Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Excel VBA: String von rechts (hinten) abschneiden
#1
Hallo zusammen,
dürfte ich mal wieder Eure werte Hilfe in Anspruch nehmen?

Sicher für Euch ein einfaches Thema.

Ich möchte bei einem String alles von rechts bis einschließlich des zweiten Leerzeichens abschneiden und mit dem linken Teil dann weiterarbeiten.
die Strings können z.B. wie folgt aufgebaut sein:

BBBBBBAAAAAXXXXX BA 2 (MS) 739,2 kWp      ...... Ergebnis so: BBBBBBAAAAAXXXXX BA 2 (MS)

AAAXXXXCCCCZZZ LLLLLNNN 3 (MS)- WR 27-39 1,06 MWp      ...... Ergebnis so: AAAXXXXCCCCZZZ LLLLLNNN 3 (MS)- WR 27-39

LLLLLNNNNN PVA 1 143,22 kWp  ...... Ergebnis so: LLLLLNNNNN PVA 1

Ich habe da schon etwas probiert das mir aber sehr umständlich erscheint.

Code:
            Z = InStrRev(.Range("C" & sCell.Row - 2), " ")
            If Z > 0 Then
              Test1 = Trim(Mid(.Range("C" & sCell.Row - 2), Z + 0))
              Test1 = Trim(Left(.Range("C" & sCell.Row - 2), Z - 1))
              .Range("C" & sCell.Row - 2) = Test1
             
              Z = InStrRev(.Range("C" & sCell.Row - 2), " ")
              Test1 = Trim(Mid(.Range("C" & sCell.Row - 2), Z + 0))
              Test1 = Trim(Left(.Range("C" & sCell.Row - 2), Z + 4))
              .Range("C" & sCell.Row - 2) = Test1
            End If

Ginge das auch einfacher bzw. in einem Rutsch, dass ab dem vorletzten Leerzeichen im String alles in die Tonne soll und nur der Rest übrig bleibt?

Vielleicht kann mir jemand einen Tipp geben?
Top
#2
Hallo,

unter "schöne" Programmierung fällt das nicht:

Code:
Sub F_en()
Cells(1, 1) = "A 1 2 3 4 5"

dim Tx
Tx = split(cells(1, 1))
ReDim preserve Tx(ubound(Tx)-2)
debug.print join(Tx)
end sub

mfg

(getestet, aber abgetippt)
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • sharky51
Top
#3
Hallo Fennek,
vielen Dank für Dein Beispiel!

Mit Deinem Zahlenbeispiel funktioniert das bestens.

Leider aber nicht mit meinen o.g. Beispielen.

Wenn ich z.B. diesen String "BEESENLAUBLINGEN BA 1-1 (MS) 478,8 kWp" einsetze, dann kommt folgendes zurück:
BEESENLAUBLINGEN BA 1-1" es fehlt aber hier dieser Teil "(MS)".

Ich würde also dieses Ergebnis erwarten: "BEESENLAUBLINGEN BA 1-1 (MS)"

Woran kann dies jetzt noch liegen?
Top
#4
das Zeichen nach "(MS)" ist das geschützte Leerzeichen 160.

Zitat:BBBBBBAAAAAXXXXX BA 2 (MS) 739,2 kWp
Top
#5
Hallo,

weitere Variante mit Bereinigung des Zeichens 160:
Sub aaa()
Dim strQ As String, strS As String, strZ As String

strS = Chr(32)
strQ = Replace(ActiveCell.Value, Chr(160), strS)
strZ = Left(strQ, InStrRev(Left(strQ, InStrRev(strQ, strS) - 1), strS) - 1)
Debug.Print strZ
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sharky51
Top
#6
Guten Morgen Uwe,

das passt jetzt prima!

Super und vielen Dank für Deine Mühe.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste