Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

String ab Ziffer abschneiden und verschieben

Forumthread: String ab Ziffer abschneiden und verschieben

String ab Ziffer abschneiden und verschieben
26.10.2016 20:22:29
Kai
Hallo
Ich schon wieder. :-(
Ich habe in der Tabelle "Abgang" eine Spalte T, dort sind ab der Zeile 3 folgende Einträge drin:
T_________________U_____________
Buchung 345/345
Buchung AR 453
Buchungen 1-6
Buchungen
Buchung.4
Nur mal um ein paar Kombinationen zu nennen.
Ich suche eine VBA Lösung, mit der ich ALLES ab der ersten Ziffer abschneiden kann und das Ausgeschnittene in die danebenliegenden Spalte U rein schreiben.
Also im Prinzip soll es dann so aussehen:
T_____________U_____________
Buchung_______345/345
Buchung AR____453
Buchungen_____1-6
Buchungen
Buchung.______4
Wenn es keine Ziffer im String gibt, diese Zelle einfach überspringen.
Also, der String vor der Ziffer (von links) kann unterschiedlich sein.
Ab der ersten Ziffer auschneiden und nach U verschieben.
Hat da jemand eine Idee, wie man das lösen könnte ?
Danke Kai
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String ab Ziffer abschneiden und verschieben
26.10.2016 20:57:34
Matthias
Moin! Hier mal eine Variante die zumindest in meinem Testlauf klappte. Bitte erst an einer Sicherungskopie testen. VG

Sub abschneiden()
Dim ende As Long
Dim daten
Dim zeile As Long
Dim stelle As Long
Dim inhalt As String
ende = Worksheets("Abgang").Cells(Rows.Count, 20).End(xlUp).Row
daten = Worksheets("Abgang").Range(Worksheets("Abgang").Cells(1, 20), _
Worksheets("Abgang").Cells(ende, 21))
For zeile = 3 To ende
inhalt = daten(zeile, 1)
For stelle = 1 To Len(inhalt)
If IsNumeric(Mid(inhalt, stelle, 1)) Then
daten(zeile, 1) = Left(inhalt, stelle - 1)
daten(zeile, 2) = Right(inhalt, Len(inhalt) - stelle + 1)
Exit For
End If
Next stelle
Next zeile
Worksheets("Abgang").Range(Worksheets("Abgang").Cells(1, 20), _
Worksheets("Abgang").Cells(ende, 21)) = daten
End Sub

Anzeige
AW: String ab Ziffer abschneiden und verschieben
27.10.2016 10:40:34
Kai
Hallo Matthias,
Danke funktioniert.
Wo kann ich denn im Ergebnis, was nach U geschrieben wird (alles ab erster Ziffer) noch das Formar STANDARD mitgeben ?
Danke
Kai
AW: String ab Ziffer abschneiden und verschieben
27.10.2016 14:35:46
Matthias
Hallo! Ich würde einfach vor dem Rückschreiben die Spalte U mit dem Standartformat formatieren.
Worksheets("Abgang").Range("U1:U" & ende).NumberFormat = "General"
Damit müsste es passen. Ansonsten ggf. noch vor dem Schreiben die Daten als String formatieren. So wie unten, da wäre alles drin.
VG Matthias

Sub abschneiden()
Dim ende As Long
Dim daten
Dim zeile As Long
Dim stelle As Long
Dim inhalt As String
ende = Worksheets("Abgang").Cells(Rows.Count, 20).End(xlUp).Row
daten = Worksheets("Abgang").Range(Worksheets("Abgang").Cells(1, 20), _
Worksheets("Abgang").Cells(ende, 21))
For zeile = 3 To ende
inhalt = daten(zeile, 1)
For stelle = 1 To Len(inhalt)
If IsNumeric(Mid(inhalt, stelle, 1)) Then
daten(zeile, 1) = cstr(Left(inhalt, stelle - 1))
daten(zeile, 2) = cstr(Right(inhalt, Len(inhalt) - stelle + 1))
Exit For
End If
Next stelle
Next zeile
Worksheets("Abgang").Range("U1:U" & ende).NumberFormat = "General"
Worksheets("Abgang").Range(Worksheets("Abgang").Cells(1, 20), _
Worksheets("Abgang").Cells(ende, 21)) = daten
End Sub

Anzeige
Danke, perfekt owT
28.10.2016 18:25:47
Kai
AW: String ab Ziffer abschneiden und verschieben
26.10.2016 21:01:27
Fennek
Hallo,
sieh dir mal RegEx (regular expression) an.
Aus dem Gedächtnis:

Sub Reg_SubMatch()
'Verweis MS VbScript Regex 5.5
Dim Str As String
Dim RegEx As RegExp
Set RegEx = CreateObject("vbscript.regexp")
Str = "abc 123s2 qwe edde 456W7"
RegEx.Global = True
RegEx.Pattern = "\d"
Set RR = RegEx.Execute(Str)
Debug.Print "Count: " & RR.Count ', RR(0) ', RR(1)
For Each R In RR
Debug.Print R.FirstIndex, R.Value, R.Length
Next R
end sub
R.FirstIndex liefert die Position der ersten, dies kann dann mit Left(), Right zum spalten genutzt werden.
mfg
(ungeprüft, einfach kopiert aus dem Muster)
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

String ab Ziffer abschneiden und in benachbarte Spalte verschieben


Schritt-für-Schritt-Anleitung

Um einen String ab der ersten Ziffer abzuschneiden und das Ergebnis in eine benachbarte Spalte zu verschieben, kannst Du folgenden VBA-Code verwenden. Dieser Code geht davon aus, dass Deine Daten in der Tabelle "Abgang" in Spalte T beginnen und die Ergebnisse in Spalte U geschrieben werden.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub abschneiden()
    Dim ende As Long
    Dim daten
    Dim zeile As Long
    Dim stelle As Long
    Dim inhalt As String
    ende = Worksheets("Abgang").Cells(Rows.Count, 20).End(xlUp).Row
    daten = Worksheets("Abgang").Range(Worksheets("Abgang").Cells(1, 20), _
    Worksheets("Abgang").Cells(ende, 21))
    For zeile = 3 To ende
        inhalt = daten(zeile, 1)
        For stelle = 1 To Len(inhalt)
            If IsNumeric(Mid(inhalt, stelle, 1)) Then
                daten(zeile, 1) = Left(inhalt, stelle - 1)
                daten(zeile, 2) = Right(inhalt, Len(inhalt) - stelle + 1)
                Exit For
            End If
        Next stelle
    Next zeile
    Worksheets("Abgang").Range(Worksheets("Abgang").Cells(1, 20), _
    Worksheets("Abgang").Cells(ende, 21)) = daten
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus, indem Du ALT + F8 drückst und das Makro abschneiden auswählst.

Häufige Fehler und Lösungen

  • Fehler: Das Makro funktioniert nicht.

    • Lösung: Stelle sicher, dass Du die richtige Tabelle ("Abgang") verwendest und dass die Daten in der richtigen Spalte (T) stehen.
  • Fehler: Die Zellen in Spalte U sind leer.

    • Lösung: Überprüfe, ob in Spalte T tatsächlich Ziffern enthalten sind. Wenn nicht, bleibt die Zelle in Spalte U leer.
  • Fehler: Formatierung der Zellen ist nicht korrekt.

    • Lösung: Füge vor dem Rückschreiben der Daten den folgenden Code hinzu, um die Zellen in Spalte U im Standardformat zu formatieren:
Worksheets("Abgang").Range("U1:U" & ende).NumberFormat = "General"

Alternative Methoden

Eine alternative Methode wäre die Verwendung von regulären Ausdrücken (RegEx). Hier ist ein einfaches Beispiel:

Sub Reg_SubMatch()
    Dim Str As String
    Dim RegEx As RegExp
    Set RegEx = CreateObject("vbscript.regexp")
    Str = "abc 123s2 qwe edde 456W7"
    RegEx.Global = True
    RegEx.Pattern = "\d"
    Set RR = RegEx.Execute(Str)
    For Each R In RR
        Debug.Print R.FirstIndex, R.Value
    Next R
End Sub

Diese Methode erfordert jedoch, dass Du die Microsoft VBScript Regular Expressions 5.5 Bibliothek in den Verweisen aktivierst.


Praktische Beispiele

Angenommen, Du hast folgende Werte in Spalte T:

Buchung 345/345
Buchung AR 453
Buchungen 1-6
Buchungen
Buchung.4

Nach dem Ausführen des Makros sieht das Ergebnis in den Spalten T und U wie folgt aus:

T                        U
Buchung                 345/345
Buchung AR              453
Buchungen               1-6
Buchungen               
Buchung.                4

Tipps für Profis

  • Backup: Erstelle immer eine Sicherungskopie Deiner Daten, bevor Du Makros ausführst.
  • Debugging: Nutze Debug.Print, um Variablen während der Ausführung des Codes zu überwachen.
  • Optimierung: Du kannst den Code optimieren, indem Du nur die benötigten Zeilen bearbeitest, anstatt die gesamte Spalte zu durchlaufen.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, wenn ich andere Spalten verwenden möchte?
Du musst lediglich die Spaltenreferenzen im Code ändern (z.B. Cells(zeile, 20) für Spalte T und Cells(zeile, 21) für Spalte U).

2. Was passiert, wenn keine Ziffer im String vorhanden ist?
In diesem Fall wird die Zelle in Spalte U einfach leer gelassen, und der ursprüngliche Wert in Spalte T bleibt unverändert.

3. Kann ich das Makro für andere Tabellenblätter verwenden?
Ja, ändere einfach den Namen des Arbeitsblattes im Code von "Abgang" auf den gewünschten Blattnamen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige