Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Im String ";" vor Zahlen einfügen

Im String ";" vor Zahlen einfügen
20.12.2016 11:14:50
Sebastian
Hallo zusammen,
ich habe viele Datensätze in einer Excel-Datei, die leider nicht richtig aufbereitet sind. Ein Datensatz besteht immer aus einer Bezeichnung und einem Schlüssel - d.h. einem Text und einer 5-stelligen Zahl.
Beispiel
3-D-Designer/in 23223
Abfallbeauftragte/r 42324
Abfertigungsbeamt(er/in) – Zoll (mittl. Dienst) 73242

Problem ist, dass einige Datensätze mehrfach in einer Zelle vorkommen. D.h. es manchmal sieht das Beispiel auch so aus:
Neonatol. u. pädiatr. Intensivmed 81323 Fachschwester/-pfleger - Neonatologie 81323 Fachschwester/-pfleger - Onkologie 81313 Fachschwester/-pfleger - Operationsdienst81313 Fachschwester/-pfleger - Psychiatrie 81313 Fachschwester/-pfleger - Rehabiltation 81313 Fachseminarleiter/in -
Ziel soll es sein, den Text von den Zahlen zu trennen. Ich wollte dies so lösen, dass ich per VBA Schleife ein ";" vor die Zahlen setze, sodass ich dann eine Trennung mittels "Text in Spalten" vornehmen kann. Ich komme nur bei der Problemlösung nicht weiter. Welche Funktion in VBA ermöglicht mir es dieses Problem zu lösen?
Könnt ihr mir bitte helfen? Die Zellen, in denen mehrfach Datensätze vorkommen, würde ich händisch dann noch einmal anfassen.
Danke euch vorab!
Viele Grüße
Sebastian

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Im String ";" vor Zahlen einfügen
20.12.2016 11:49:17
Anton
Hallo Sebastian,
das lässt sich wohl mit RegExp am schönsten lösen, nur leider hab ich grad aufm MAC die Bibliothek nicht zur Verfügung :) Hier mein Vorschlag.
Voraussetzung:
- Die zu bearbeitenden Texte stehen in der Spalte A. In meinem Fall Range("A1:A10"). Sollte dann angepasst werden.
In Spalte B werden die bereinigten Texte abgelegt und in Spalte C die Zahlen. Die Spalten für die Ausgabe müssen ggf. auch noch angepasst werden. Je nachdem wie du die Daten weiterverarbeiten möchtest.
Sub ZahlenVonTextTrennen() Dim rngZelle As Range Dim rngBereich As Range Dim strExtrakt As String Dim strExtraktZahlen As String With Tabelle1 Set rngBereich = .Range("A1:A10") For Each rngZelle In rngBereich strExtraktZahlen = "" strExtrakt = "" For intZ = 1 To Len(rngZelle) Select Case Mid(rngZelle.Value, intZ, 1) Case 0 To 9 strExtraktZahlen = strExtraktZahlen & Mid(rngZelle.Value, intZ, 1) Case Else strExtrakt = strExtrakt & Mid(rngZelle.Value, intZ, 1) End Select Next intZ rngZelle.Offset(0, 1).Value = strExtrakt rngZelle.Offset(0, 2).Value = strExtraktZahlen Next rngZelle End With End Sub Gibt bestimmt auch eine elegantere Lösung.
VG Anton
Anzeige
AW: Im String ";" vor Zahlen einfügen
20.12.2016 12:08:29
Sebastian
Hey Anton,
danke für deine Hilfe. Das funktioniert schon einmal grundlegend. :-) Problem ist: Bei den fehlerhaften Datensätzen, wo mehrere Zahlen in einer Zeile vorkommen, wird auch eine strikte Trennung vorgenommen. D.h. hier wird der Text und der Zahlenwert zusammengewürfelt. Das verursacht in für den nächsten Schritt leider mehr Arbeit. :-(
Können wir diese eventuell ausklammern? Alternativ wäre es immer noch die beste Lösung, wenn wir ein ";" vor die Zahlen setzen können. Hierbei würde die Trennung am "saubersten" verlaufen denke ich. :-)
Viele Grüße
Sebastian
AW: Im String ";" vor Zahlen einfügen
20.12.2016 12:25:23
Michael
Hallo!
Teste mal:
Sub a()
Const SEP As String = ";"
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Tabelle1")
Dim Texte As Range, C As Range, i As Long, t As String
With Ws
Set Texte = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
For Each C In Texte
With C
For i = 1 To .Characters.Count
Select Case True
Case IsNumeric(.Characters(i, 1).Text) And _
Not IsNumeric(.Characters(i - 1, 1).Text)
t = t & SEP & .Characters(i, 1).Text
Case Else
t = t & .Characters(i, 1).Text
End Select
Next i
Debug.Print t
.Value = t
End With
t = vbNullString
Next C
Texte.TextToColumns Destination:=.Range("B1"), DataType:=xlDelimited, textqualifier:= _
xlTextQualifierSingleQuote, _
consecutivedelimiter:=False, Tab:=False, Semicolon:=True, comma:=False, Space:= _
False, other:=False
End With
End Sub
Ist gleich inkl. "TextInSpalten"-Ausgabe. Ausgangsdaten in A1:Ax; TextInSpalten wird ab B1 ausgegeben, müsstest Du evtl. auch anpassen.
LG
Michael
Anzeige
AW: Im String ";" vor Zahlen einfügen
20.12.2016 12:30:00
Anton
Hi Sebastian,
hab noch was eingebaut. Wenn eine Zahl gefunden wird, wird eine Stelle links geschaut und das Leerzeichen durch ein ";" ersetzt. Leider bekomme ich bei der Replace Funktion eine Fehlermeldung. Ich vermute das es am MAC liegt. Kannst Du den Code mal testen?
Sub ZahlenVonTextTrennen()
Dim rngZelle As Range
Dim rngBereich As Range
Dim strExtrakt As String
Dim strExtraktZahlen As String
With Tabelle1
Set rngBereich = .Range("A1:A10")
For Each rngZelle In rngBereich
strExtraktZahlen = ""
strExtrakt = ""
For intZ = 1 To Len(rngZelle)
Select Case Mid(rngZelle.Value, intZ, 1)
Case 0 To 9
If Mid(rngZelle.Value, intZ - 1, 1) = " " Then
strExtraktZahlen = strExtraktZahlen & Replace(Mid(rngZelle.Value, intZ - 1,  _
1), " ", ";")
intZ = intZ + 1
Else
strExtraktZahlen = strExtraktZahlen & Mid(rngZelle.Value, intZ, 1)
End If
Case Else
strExtrakt = strExtrakt & Mid(rngZelle.Value, intZ, 1)
End Select
Next intZ
Next rngZelle
End With
End Sub
VG Anton
Anzeige
AW: Im String ";" vor Zahlen einfügen
20.12.2016 13:56:16
Sebastian
Hallo Michael,
hallo Anton,
danke für eure Antworten.
@ Michael
Leider wird in deinem Code nur die erste Zahl berücksichtigt. Weitere Zahlen bleiben unberücksichtigt in einer Zeile. Vorerst ist das natürlich eine super Hilfe. Schön wäre es aber, wenn die eventuell nachfolgenden Schlüssel auch berücksichtigt werden - siehe Beispiel 2.
@ Anton
Leider bekomme ich auch die den Error "5" bei der Replace-Funktion. Den MAC können wir als Problemgeber also ausschließen. Hast du vll noch eine Idee?
Ich habe hier auch einmal die Excel-Datei hochgeladen:
https://drive.google.com/file/d/0B2nhCyVjydrdNkxVT2tFb0dBUm8/view?usp=sharing
Viele Grüße
Sebastian
Anzeige
Reguläre Ausdrücke
20.12.2016 13:50:47
ransi
Hallo,
Anton hatte es schon erwähnt.
Mit regulären Ausdrücken ist so eine Aufgabe schnell gelöst.
Schau es dir mal an und teste:
Tabelle1

 AB
13-D-Designer/in 232233-D-Designer/in ;23223
2Abfallbeauftragte/r 42324Abfallbeauftragte/r ;42324
3Abfertigungsbeamt(er/in) – Zoll (mittl. Dienst) 73242Abfertigungsbeamt(er/in) – Zoll (mittl. Dienst) ;73242
4  
5Problem ist, dass einige Datensätze mehrfach in einer Zelle vorkommen. D.h. es manchmal sieht das Beispiel auch so aus:Problem ist, dass einige Datensätze mehrfach in einer Zelle vorkommen. D.h. es manchmal sieht das Beispiel auch so aus:
6  
7Neonatol. u. pädiatr. Intensivmed 84323 Fachschwester/-pfleger - Neonatologie 81323 Neonatol. u. pädiatr. Intensivmed ;84323 Fachschwester/-pfleger - Neonatologie ;81323
8Fachschwester/-pfleger - Onkologie 81313 Fachschwester/-pfleger - Operationsdienst81313Fachschwester/-pfleger - Onkologie ;81313 Fachschwester/-pfleger - Operationsdienst;81313
9Fachschwester/-pfleger - Psychiatrie 81313 Fachschwester/-pfleger - Rehabiltation 81313Fachschwester/-pfleger - Psychiatrie ;81313 Fachschwester/-pfleger - Rehabiltation ;81313
10Fachseminarleiter/in -Fachseminarleiter/in -
11  

Formeln der Tabelle
ZelleFormel
B1=machs(A1)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Das ist die Funktion:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Function machs(zelle)
    Dim regex As Object
    machs = zelle.Text
    Set regex = CreateObject("Vbscript.Regexp")
    With regex
        .Pattern = "(?=\d{5})"
        .Global = True
        machs = .Replace(machs, ";")
    End With
End Function


ransi
Anzeige
AW: Reguläre Ausdrücke
20.12.2016 14:14:31
Sebastian
DANKE!
So funktioniert es!
Viele Grüße
Sebastian
+1 for RegEx: https://xkcd.com/208/ ;-), owT
20.12.2016 14:23:55
Michael

336 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige