Zelle Splitten

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Zelle Splitten
von: Christoph Zahn
Geschrieben am: 26.11.2015 01:42:25

Hey. Habe es nicht geschafft im alten Thema einen Beitrag zu verfassen. Deshalb nochmal neu.
Habe das Makro mal erhalten.
Option Explicit

Sub splitCells()
  Dim vntIn As Variant, vntOut() As Variant, vntTmp() As Variant, vntSplit As Variant, vntH As  _
Variant
  Dim lngI As Long, lngJ As Long, lngN As Long, lngM As Long
  
  With Sheets("Tabelle2") 'Ausgabgstabelle - Anpassen!
    vntH = .Range("A2:F1")
    vntIn = .Range("A2:F" & Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row))
  End With
  
  Redim vntTmp(1 To 1, 1 To UBound(vntIn, 2))
  
  
  For lngI = 1 To UBound(vntIn, 1)
    vntSplit = Split(vntIn(lngI, 6), ",")
    For lngN = 0 To UBound(vntSplit)
      For lngJ = 1 To UBound(vntIn, 2) - 1
        vntTmp(1, lngJ) = vntIn(lngI, lngJ)
      Next
      vntTmp(1, UBound(vntTmp, 2)) = vntSplit(lngN)
      lngM = lngM + 1
      Redim Preserve vntOut(1 To lngM)
      vntOut(lngM) = vntTmp
    Next
  Next
  
  vntOut = Application.Transpose(Application.Transpose(vntOut))
  
  Worksheets.Add
  
  With ActiveSheet
    .Columns(6).NumberFormat = "0"
    .Range("A1").Resize(1, UBound(vntH, 2)) = vntH
    .Range("A2").Resize(UBound(vntOut), UBound(vntOut, 2)) = vntOut
    .Columns.AutoFit
  End With
  
End Sub
Habe das Problem das wenn es 5-6 Zahlen sind in einer Zelle gibt es kein Problem.
Wenn es aber 8 oder mehr Zahlen sind die gesplittet werden müssen bricht das Makro immer ab mit Fehler.
Kann mir da eventuell jemand weiter helfen?

Bild

Betrifft: AW: Zelle Splitten
von: Christoph Zahn
Geschrieben am: 26.11.2015 10:10:37
Hier nochmal ein Beispiel welche Zahlenreihe nicht gesplittet wird.
Es kommt dann immer Typen unverträglich.
221836843074,221836844941,221836845848,221836846383,221836846867,221836847478,221836848223,221836849975,221836851372,221836851934,221836853498,221836863231,221836868353,221836869561,221836870948,221836875148,221836875554,221837778883,221838686177,221838690883,221838701337,221838703900,221838731229

Bild

Betrifft: lad mal die Mappe hoch. owT
von: Rudi Maintaire
Geschrieben am: 26.11.2015 10:15:41


Bild

Betrifft: AW: lad mal die Mappe hoch. owT
von: Christoph Zahn
Geschrieben am: 26.11.2015 10:25:55
Hier die Mappe.
https://www.herber.de/bbs/user/101818.xlsx

Bild

Betrifft: AW: lad mal die Mappe hoch. owT
von: Rudi Maintaire
Geschrieben am: 26.11.2015 10:55:32
Hallo,
bei mir schlägt

vntOut = Application.Transpose(Application.Transpose(vntOut))

fehl.
Ersetze durch
  ReDim vntTmp(1 To UBound(vntOut), 1 To UBound(vntIn, 2))
  For lngI = 1 To UBound(vntOut)
    For lngJ = 1 To 6
      vntTmp(lngI, lngJ) = vntOut(lngI)(1, lngJ)
    Next lngJ
  Next lngI
  vntOut = vntTmp
Gruß
Rudi

Bild

Betrifft: Das hatte ich bereits vermutet, Rudi! Gruß owT
von: Luc:-?
Geschrieben am: 26.11.2015 11:14:45
:-?

Bild

Betrifft: liegt an der Array-Struktur
von: Rudi Maintaire
Geschrieben am: 26.11.2015 12:06:26
Ergebnis ist
vntOut(1 to 160)(1 to 6)
Das geht mit Transpose nicht.
Gruß
Rudi

Bild

Betrifft: Das bezweifle ich, ...
von: Luc:-?
Geschrieben am: 26.11.2015 13:03:27
…Rudi: ;-)

Sub arrTestTrans()
    Dim x
    x = Array(Array(1, 2, 3), Array(4, 5, 6))
    MsgBox x(0)(1)
    x = WorksheetFunction.Transpose(x)
    MsgBox x(2, 1) & vbTab & 160 * 6
End Sub
.Transpose wandelt eine irreguläre in eine reguläre VBA-Matrix um, zumindest dann, wenn sie als vertikaler Vektor, dessen Elemente aus gleichlangen, horizontalen Vektoren bestehen, organisiert ist. Nur, wenn eine dieser Voraussetzungen nicht erfüllt ist, klappt das nicht. Das ist übrigens auch ein Vorteil von .Transpose, wenn man solche „Matrizen“ auf einen ZellBereich abbilden will. Die Größen­Ordnung von 160×6=960 ist von .Transpose auch zu bewältigen.
Luc :-?

Bild

Betrifft: Das ist für meine Fml kein Problem, ...
von: Luc:-?
Geschrieben am: 26.11.2015 11:13:35
…Christoph:

 EFGHIJKLMNO
1ebay111728097401 111728097401       
2ebay111728189955 111728189955       
3ebay111728294265,111728311679,111728342691,111729015888111728294265111728311679111728342691111729015888    
4ebay111729279882 111729279882       
5ebay111730033888 111730033888       
6ebay111731213445,111731214243,111731225963,111731228568,111731230417,111731235357,111731236426111731213445111731214243111731225963111731228568111731230417111731235357111731236426 
7ebay111731906082 111731906082       
8ebay201403123517 201403123517       
9ebay201406279011,201406291228,201406298476,201406317049,201406318406201406279011201406291228201406298476201406317049201406318406   
10ebay201408074535 201408074535       
11ebay201408156614 201408156614       
12ebay201408625797 201408625797       
13ebay201410749879 201410749879       
14ebay201410818792 201410818792       
15ebay201411428855 201411428855       
16ebay201413055007 201413055007       
17ebay221831304361,221831316390,221831318652221831304361221831316390221831318652     
18ebay221832780598 221832780598       
19ebay221833565515 221833565515       
20ebay221836711776 221836711776       
Mal als MatrixFml für den ganzen Bereich (hier nur auf den Ausschnitt bezogen), um das der Wirkung deines Makros anzugleichen (sonst wäre d.Fml kürzer):
H1:O20:{=WENNFEHLER(WENN(ANZAHL(VSplit(INDEX(F1:F71;ZEILE());",";1))=1;VSplit(INDEX(F1:F71&",";ZEILE());",";1);VSplit(INDEX(F1:F71;ZEILE());",";1));"")}
Luc :-?

Bild

Betrifft: Das sind doch nur 23 12stellige Zahlen, ...
von: Luc:-?
Geschrieben am: 26.11.2015 10:39:31
…Christoph;
damit sollte ein gutes Pgm doch keine Probleme haben. Evtl ist es nicht pflegeleicht und du hast eine Variable nicht richtig angepasst. Für meine UDF VSplit (im Archiv per RECHERCHE-Button zu finden) war's jedenfalls ein Klacks).
Es könnte natürlich auch sein, dass es nicht am Bsp liegt, sondern der GesamtBereich zu groß wird (.Transpose hat Grenzen!) und deshalb an der Position des Bsps abgebrochen wird. Das wirkt sich nicht auf die o.g. UDF aus, die in ZellFmln unter Einbeziehung von INDEX auch auf ganze Spalten bzw Zeilen angewendet wdn könnte.
Gruß, Luc :-?

Besser informiert mit …

Bild

Betrifft: AW: Das sind doch nur 23 12stellige Zahlen, ...
von: Christoph Zahn
Geschrieben am: 26.11.2015 21:33:34
Hey.
Ich danke euch für eure Hilfe. Habe es mit den Varianten probiert die hier stehen. Klappt alles so wie gewünscht und bin mal wieder begeistert wie schnell einem hier geholfen wird!
mfg Zahni

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zelle Splitten"