Abfrage benutzerdefinierte Zellenformatierung
Hallo,
ich erhalte per Download Excel-Listen aus SAP/BW
Am Downloadformat kann ich leider nichts ändern.
Nun zu meinem Problem:
Ich habe in einer Zelle die Menge und die Einheit, z.B.: 10 ST, 20 kg....
Leider ist die Einheit eine benutzerdefinierte Zellformatierung, jede Zelle hat das passende Format.
Wie kann ich den Zellwert auf zwei Zellen trennen, in Menge und Einheit ?
Gruß Armin
Antwort schreiben
Antwort 1 von nighty vom 07.05.2020, 12:00 Options
hi Armin :-)
ein beispiel
gruss nighty
was eine unbestimmte anzahl von zahlen mit verschiedenener stellenanzahl, aus einem string isoliert
angenommen in spalte a als string formatiert
"10St22KG"
ausgabe spalte b=10
aushabe spalte c=22
angenommen in spalte a als string formatiert
"1St123KG"
ausgabe spalte b=1
aushabe spalte c=123
usw.
automatische abtastung auf das zeilenende der spalte a
Sub Trennen()
Dim ZeilenA As Long
For ZeilenA = 2 To Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
Worksheets(1).Cells(ZeilenA, 2) = Sumtext(Worksheets(1).Cells(ZeilenA, 1), 1)
Worksheets(1).Cells(ZeilenA, 3) = Sumtext(Worksheets(1).Cells(ZeilenA, 1), 2)
Next ZeilenA
End Sub
Function Sumtext(Zellen As Range, zaehler1 As Integer) As String
Dim Zelle As Range
Dim zeich1 As Integer
Dim schalter As Boolean
Dim zaehler3 As Integer
ReDim zaehler2(Len([Zellen])) As String
zaehler3 = 1
Application.Volatile
If zaehler1 > Len([Zellen]) Then zaehler1 = Len([Zellen])
For zeich1 = 1 To Len([Zellen])
If Mid([Zellen], zeich1, 1) Like "[0-9,]" = True Then
zaehler2(zaehler3) = zaehler2(zaehler3) & Mid([Zellen], zeich1, 1)
schalter = True
End If
If schalter = True And Mid([Zellen], zeich1, 1) Like "[0-9,]" = False Then
zaehler3 = zaehler3 + 1
schalter = False
End If
Next zeich1
Sumtext = zaehler2(zaehler1)
End Function
Antwort 2 von Testerle vom 07.05.2020, 12:16 Options
Hallo nighty,
vielen Dank für das Makro. Es funktioniert schon recht gut.
Ich habe in einer Zelle nur einen Wert mit "Einheit" den ich trennen will.
Beispiel:
Anzeige:
Zelle A1: 10 ST (Inhalt 10, Format #.##0 "ST")
Ergebnis:
Zelle B1: 10 Zelle C1: ST
Anzeige:
Zelle A2: 10,5 kG (Inhalt 10,5, Format #.##0 "kG")
Ergebnis:
Zelle B2: 10,5 Zelle C2: kG
Lässt sich die Ausgabe in Spalte C entsprechend anpassen?
Gruß Armin
Antwort 3 von nighty vom 07.05.2020, 12:18 Options
hi armin :-)
vielleicht das noch
gruss nighty
bei zusammengesetzten werten bzw zellen
koennte man das makro vorangesetzt benutzen
es wandelt werte zu zeichen um in der spalte a
Sub Umwandlung()
Columns("A:A").Copy
Columns("A:A").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub
Antwort 4 von Testerle vom 07.05.2020, 12:54 Options
Hallo nighty,
danke für deine Mühen. Leider klappt es mit dem Umwandeln nicht. Die Einheit bleibt immer noch im Format, der Zellwert bleibt ein Wert.
Noch Ideen?
Gruß Armin
Antwort 5 von nighty vom 07.05.2020, 12:54 Options
hi armin :-)
das kuerzel das durch formatieren der zelle bezug nimmt ist schwierig auszulesen,da fehlt es mir an uebung,versuch eine andere loesung vielleicht ?
gruss nighty
Antwort 6 von nighty vom 07.05.2020, 12:56 Options
hi armin
meine loesung bezog sich auf werte,bei dir ist es aber die formatierung,mein fehler
gruss nighty
Antwort 7 von Saarbauer vom 07.05.2020, 13:15 Options
Hallo,
ist zwischen Einheit und Wert immer ein Leerzeichen, dann könnte man es so versuchen
in Zelle X1
=LINKS(A1;FINDEN(" ";A1;1)-1)
in Zelle Y1
=TEIL(A1;FINDEN(" ";A1;1)+1;5)
wobei x und y für einen belibige Spalte stehen
Gruß
Helmut
Antwort 8 von Testerle vom 07.05.2020, 15:04 Options
Hallo Helmut,
leider ist die "Einheit" durch eine Formatierung dargestellt.
Der Zellinhalt den ich durch Formeln greifen kann ist nur die Zahl, es ist leider kein Leerzeichen enthalten.
Trotzdem Danke
Gruß Armin
Antwort 9 von Saarbauer vom 07.05.2020, 21:02 Options
Hallo,
versuch es mal damit
Sub Aufteilen()
For i = 2 To Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
Range("C" & i).Value = Mid(Range("A" & i).NumberFormat, InStr(2, Range("A" & i).NumberFormat, """", 0) + 1, InStr(InStr(2, Range("A" & i).NumberFormat, """", 0) + 1, Range("A" & i).NumberFormat, """", 0) - (InStr(2, Range("A" & i).NumberFormat, """", 0) + 1))
Range("B" & i).Value = Val(Range("A" & i).Value)
Next i
End Sub
Gruß
Helmut
P.S. Habe es zwar mal getestet aber mit "ActiveCell" anstelle von "Range("A" & i)" , müsste aber funktionieren
Antwort 10 von Testerle vom 09.05.2020, 12:56 Options
Hallo Saarbauer,
danke für das Makro.
Ich werde es über das Wochenende testen und melde mich dann wieder.
Gruß Armin
Antwort 11 von nighty vom 10.05.2020, 14:22 Options
hi armin :-)
dank saarbauers tip nun eine moeglichkeit mit einschraenkung
einschraenkung=es sind als kuerzel bei der formatierung nur A-Z und oder a-z erlaubt
eine richtige loesung hab ich nicht parat
gruss nighty
spalteA=auszulesende zelle
spalteB=darstellung der ersten zahl von der auszulesenden zelle
spalteC=darstellung des ersten kuerzels duch formatierte zelle definiert
spalteD=darstellung der zweiten zahl von der auszulesenden zelle
spalteE=darstellung des zweiten kuerzels duch formatierte zelle hervorgebracht
Sub Trennen()
Dim ZeilenA As Long
For ZeilenA = 2 To Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
Worksheets(1).Cells(ZeilenA, 2) = Sumtext(Worksheets(1).Cells(ZeilenA, 1), 1)
Worksheets(1).Cells(ZeilenA, 3) = SumtextB(Worksheets(1).Cells(ZeilenA, 1).NumberFormatLocal, 1)
Worksheets(1).Cells(ZeilenA, 4) = Sumtext(Worksheets(1).Cells(ZeilenA, 1), 2)
Worksheets(1).Cells(ZeilenA, 5) = SumtextB(Worksheets(1).Cells(ZeilenA, 1).NumberFormatLocal, 2)
Next ZeilenA
End Sub
Function Sumtext(Zellen As Range, zaehler1 As Integer) As String
Dim Zelle As Range
Dim zeich1 As Integer
Dim schalter As Boolean
Dim zaehler3 As Integer
ReDim zaehler2(Len([Zellen])) As String
zaehler3 = 1
Application.Volatile
If zaehler1 > Len([Zellen]) Then zaehler1 = Len([Zellen])
For zeich1 = 1 To Len([Zellen])
If Mid([Zellen], zeich1, 1) Like "[0-9,]" = True Then
zaehler2(zaehler3) = zaehler2(zaehler3) & Mid([Zellen], zeich1, 1)
schalter = True
End If
If schalter = True And Mid([Zellen], zeich1, 1) Like "[0-9,]" = False Then
zaehler3 = zaehler3 + 1
schalter = False
End If
Next zeich1
Sumtext = zaehler2(zaehler1)
End Function
Function SumtextB(Zellen As String, zaehler1 As Integer) As String
Dim Zelle As String
Dim zeich1 As Integer
Dim schalter As Boolean
Dim zaehler3 As Integer
ReDim zaehler2(Len([Zellen])) As String
zaehler3 = 1
Application.Volatile
If zaehler1 > Len([Zellen]) Then zaehler1 = Len([Zellen])
For zeich1 = 1 To Len([Zellen])
If Mid([Zellen], zeich1, 1) Like "[A-Z]" = True Or Mid([Zellen], zeich1, 1) Like "[a-z]" = True Then
zaehler2(zaehler3) = zaehler2(zaehler3) & Mid([Zellen], zeich1, 1)
schalter = True
End If
If schalter = True And Mid([Zellen], zeich1, 1) Like "[A-Z,]" = False Or Mid([Zellen], zeich1, 1) Like "[a-z]" = True Then
zaehler3 = zaehler3 + 1
schalter = False
End If
Next zeich1
SumtextB = zaehler2(zaehler1)
End Function
Antwort 12 von Testerle vom 13.05.2020, 11:45 Options
Hallo,
ich habe die Makros jetzt getestet. Die Lösung von Saarbauer funktioniert problemlos.
Bei der Lösung von nighty wird die Einheit auf die Spalten C & E verteilt wenn beides Kleinbuchstaben sind.
Vielen Dank für die Unterstützung.
Gruß Armin