online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon Testerle vom 07.05.2020, 11:28 Options

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

Ähnliche Themen

abfrage
jasper111  19.01.2007 - 153 Hits - 3 Antworten

Format min bezieht sich immer auf einen Tag
Putzer  22.01.2007 - 76 Hits - 2 Antworten

Zellenformatierung nicht mitkopieren
robertu  25.04.2007 - 115 Hits - 2 Antworten

Benutzerdefinierte Formatierung von Zelle leer
dvdh  02.12.2007 - 95 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026