Discussion:
VBA-Zelleninhalt zerlegen ?!
(zu alt für eine Antwort)
Michael Klein
2004-07-07 16:26:51 UTC
Permalink
Hi,

ich kenne die Funktion "split()", aber weiß nicht so recht, ob ich damit
Zelleninhalte beliebig zerlegen kann.

Bspw. eine Zelle beinhaltet 10 Zeichen.
Wie stelle ich es an, dass ich die ersten 4, die nächsten 3 und dann die
letzten 3 Zeichen Variablen zuweise?

Mit der Funktion "split()" kann ich zwar Inhalte trennen wenn Zeichen wie
bspw. ";" vorhanden sind, aber wie trenne ich einen ganzen einzelnen Wert
bzw. Begriff in einer Zelle?

Gibt es da keine Funktion nach dem Motto:
Schneide erst die ersten 4 Zeichen ab, dann die nächsten 3 und danach die
letzten 3 Zeichen?

Für jeden Tipp dankbar.
Freundliche Grüße

Michael
Monika Weber
2004-07-07 17:12:29 UTC
Permalink
Hallo Michael,
Post by Michael Klein
ich kenne die Funktion "split()", aber weiß nicht so recht, ob ich damit
Zelleninhalte beliebig zerlegen kann.
Bspw. eine Zelle beinhaltet 10 Zeichen.
Wie stelle ich es an, dass ich die ersten 4, die nächsten 3 und dann die
letzten 3 Zeichen Variablen zuweise?
Mit der Funktion "split()" kann ich zwar Inhalte trennen wenn Zeichen wie
bspw. ";" vorhanden sind, aber wie trenne ich einen ganzen einzelnen Wert
bzw. Begriff in einer Zelle?
Schneide erst die ersten 4 Zeichen ab, dann die nächsten 3 und danach die
letzten 3 Zeichen?
evtl. hilft Dir "Mid" weiter.

Ein Beispiel:

Sub test()
Dim x As String
x = "abcdefghi"

MsgBox Mid(x, 1, 4)
MsgBox Mid(x, 4, 3)
MsgBox Mid(x, 7, 10)
End Sub
--
Es liebs Grüessli
Monika Weber [Microsoft MVP für Excel]

http://www.jumper.ch (Office Help Desk)
http://excel.codebooks.de
Joachim Gohlke
2004-07-07 17:14:32 UTC
Permalink
-----Originalnachricht-----
Hi,
ich kenne die Funktion "split()", aber weiß nicht so
recht, ob ich damit
Zelleninhalte beliebig zerlegen kann.
Bspw. eine Zelle beinhaltet 10 Zeichen.
Wie stelle ich es an, dass ich die ersten 4, die nächsten
3 und dann die
letzten 3 Zeichen Variablen zuweise?
Mit der Funktion "split()" kann ich zwar Inhalte trennen
wenn Zeichen wie
bspw. ";" vorhanden sind, aber wie trenne ich einen
ganzen einzelnen Wert
bzw. Begriff in einer Zelle?
Schneide erst die ersten 4 Zeichen ab, dann die nächsten
3 und danach die
letzten 3 Zeichen?
Für jeden Tipp dankbar.
Freundliche Grüße
Michael
.
Hallo Michael,

ein einfache Lösung als Sub:

Sub Michael()

Dim strOrigi As String
Dim strText1 As String
Dim strText2 As String
Dim strText3 As String

strOrigi = "1234567890"

strText1 = Left(strOrigi, 4)
strText2 = Left(strText1, 3)
strText3 = Right(strOrigi, 3)

MsgBox strText1 & "-" & strText2 & "-" & strText3

End Sub

Ist insoweit statisch, als die Zerlegungsparameter (4,3
und 3) ja nur für dieses Bsp. gelten. Wenn's für jede
Zerlegung individuelle sein solln, noch mal fragen.
Als Funktion müsste ihr der Originalstring, und die
Zerlegungsparameter übergeben werden.

Jrüsse us Kölle Joachim
Melanie Breden
2004-07-07 17:26:54 UTC
Permalink
Hallo Michael,
Post by Michael Klein
Bspw. eine Zelle beinhaltet 10 Zeichen.
Wie stelle ich es an, dass ich die ersten 4, die nächsten 3 und dann die
letzten 3 Zeichen Variablen zuweise?
Mit der Funktion "split()" kann ich zwar Inhalte trennen wenn Zeichen wie
bspw. ";" vorhanden sind, aber wie trenne ich einen ganzen einzelnen Wert
bzw. Begriff in einer Zelle?
Schneide erst die ersten 4 Zeichen ab, dann die nächsten 3 und danach die
letzten 3 Zeichen?
die Funktion Split erwartet ein Trennzeichen, damit kommst du leider nicht weiter.
Es ist aber möglich eine eigene Funktion zu programmieren, welche nach
angegebenen Anzahl Zeichen die Trennung einer Zeichenkette vornimmt und
die Einzelstrings in Datenfelder speichert und als Funktionsergebnis zurückgibt.

Zunächst die Funktion:

Public Function SplitLen(strText As String, ParamArray arr()) As Variant
Dim avarDummy As Variant
Dim intI As Integer

ReDim dummy(UBound(arr()))
For intI = 0 To UBound(arr())
dummy(intI) = Mid(strText, 1, arr(intI))
strText = Right(strText, Len(strText) - arr(intI))
Next intI
SplitLen = dummy()
End Function

Und hier eine Prozedur zur Demonstration der Funktion:

Public Sub CallSplitLen()
Dim aMySplit As Variant
Dim intI As Integer

aMySplit = SplitLen("HundEisWer", 4, 3, 3)
For intI = 0 To 2
MsgBox aMySplit(intI)
Next intI
End Sub

--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Melanie Breden
2004-07-07 18:10:08 UTC
Permalink
Hallo Michael,
Post by Melanie Breden
Es ist aber möglich eine eigene Funktion zu programmieren, welche nach
angegebenen Anzahl Zeichen die Trennung einer Zeichenkette vornimmt und
die Einzelstrings in Datenfelder speichert und als Funktionsergebnis zurückgibt.
ich habe die Funktion noch etwas angepasst, um mögliche Fehler bei den angegebenen
Zeichenlängen zu vermeiden:

Public Function SplitLen(strText As String, ParamArray arr()) As Variant
Dim aDummy As Variant
Dim intI As Integer

ReDim aDummy(UBound(arr()))
For intI = 0 To UBound(arr())
If Len(strText) < arr(intI) Then arr(intI) = Len(strText)
aDummy(intI) = Mid(strText, 1, arr(intI))
strText = Right(strText, Len(strText) - arr(intI))
Next intI
SplitLen = aDummy
End Function

Public Sub CallSplitLen()
Dim aMySplit As Variant
Dim intI As Integer

aMySplit = SplitLen("HundEisWer", 4, 3, 7)
For intI = 0 To UBound(aMySplit)
MsgBox aMySplit(intI)
Next intI
End Sub

--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#

Loading...