Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Abfrage benutzerdefinierte Zellenformatierung





Frage

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 1 von nighty

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

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

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

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

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

hi armin

meine loesung bezog sich auf werte,bei dir ist es aber die formatierung,mein fehler

gruss nighty

Antwort 7 von Saarbauer

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

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

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

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

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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: