Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bitte nochmnal Hilfe, wo ist der Fehler

Bitte nochmnal Hilfe, wo ist der Fehler
Holger
Hallo,
den ganzen Tag bastel ich an einem Problem rum und komme einfach nicht weiter.
Falls jemand einen ganz anderen Lösungansatz hat, bitte schreibt das.
Diese Zeile funktioniert nie, egal was ich tue:
Cells(intZ + 1, intCol).Resize(UBound(intTemp) + 1) = WorksheetFunction.Transpose(intTemp)
Was will ich machen? Wenn in einer Zelle ein String mit einem oder mehreren Kommas vorkommt, will ich den String zerlegen und unter der Zelle soviele Zeilen einfügen wie Strings vorhanden, die Werte von oben kopieren und den String jeweils hinten eintragen.
Beispiel:
Aus :
Hallo,aaa,bbb,ccc
Hallo2,aaa
Hallo3,aaa

Soll das hier werden:
Hallo,aaa
Hallo,bbb
Hallo,ccc
Hallo2,aaa
Hallo3,aaa

Alles klappt bis auf das Kopieren der Werte aaa,bbb,ccc.
Diese werden immer in die Zeilen nach unten kopiert und nicht in die eingefügte Zeile.
Ich komme also soweit (bbb und ccc werden nicht da eingefügt wo ich sie brauche):
Hallo,aaa
Hallo,bbb
Hallo2,bbb
Hallo3,ccc

Sub bla
strTemp = Cells(intZ, intCol).Value
intZkomma = InStr(strTemp, ",")
If intZkomma  0 Then
intZkomma = 0
intTemp = Split(strTemp, ",")
For lngZeile = 0 To UBound(intTemp)
Cells(intZ + 1, intCol).EntireRow.Insert
Range(Cells(intZ, 1), Cells(intZ, 6)).Copy Range(Cells(intZ + 1, 1), Cells(intZ  _
+ 1, 6))
Cells(intZ + 1, intCol).Resize(UBound(intTemp) + 1) = WorksheetFunction. _
Transpose(intTemp)
intZkomma = intZkomma + 1
Next lngZeile
End Sub

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Könnte es so gehen
22.06.2010 22:18:06
Holger
Hallo,
hier meine Idee, die neue Zeile in Fett:
Sub bla
For lngZeile = 0 To UBound(intTemp)
Cells(intZ + 1, intCol).EntireRow.Insert
Range(Cells(intZ, 1), Cells(intZ, 6)).Copy Range(Cells(intZ + 1, 1), Cells(intZ  _
+ 1, 6))
Cells(intZ + 1, 7).Value = intTemp(lngZeile)
End Sub

Anzeige
AW: Bitte nochmnal Hilfe, wo ist der Fehler
22.06.2010 22:19:58
Josef

Hallo Holger,
so?

Sub zerlegen()
  Dim vntValues As Variant, vntTmp() As Variant, vntSplit As Variant
  Dim lngIndex As Long, lngC As Long, lngI As Long
  
  vntValues = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
  
  For lngIndex = 1 To UBound(vntValues, 1)
    If Len(vntValues(lngIndex, 1)) - Len(Replace(vntValues(lngIndex, 1), ",", "")) > 1 Then
      vntSplit = Split(vntValues(lngIndex, 1), ",")
      For lngC = 1 To UBound(vntSplit)
        Redim Preserve vntTmp(lngI)
        vntTmp(lngI) = vntSplit(0) & "," & vntSplit(lngC)
        lngI = lngI + 1
      Next
    Else
      Redim Preserve vntTmp(lngI)
      vntTmp(lngI) = vntValues(lngIndex, 1)
      lngI = lngI + 1
    End If
  Next
  
  Range("A1").Resize(UBound(vntTmp) + 1, 1) = Application.Transpose(vntTmp)
End Sub

Gruß Sepp

Anzeige
Halleluja
22.06.2010 22:26:39
Holger
Hallo Sepp,
da muss ich Dir sagen: Ich passe.
Vielen Dank für deinen Code, aber ich kapiere ihn nicht mal ansatzweise.
Hilfe ;), wahrscheinlich machst du das schon ewig und selbst wenn der Code genauso für mich funktioniert, könnte ich ihn nicht nehmen, weil ich ihn nicht mal modifizieren, erklären oder irgendwas damit könnte.
Gruß+Dank
Holger
Anzeige
AW: Halleluja
22.06.2010 22:32:42
Josef

Hallo Holger,
naja "Ewig" ist relativ, und soooo alt bin ich nun auch wieder nicht;-))
Ist gar nicht so kompliziert.


Sub zerlegen()
  Dim vntValues As Variant, vntTmp() As Variant, vntSplit As Variant
  Dim lngIndex As Long, lngC As Long, lngI As Long
  
  vntValues = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
  'erstmal die Werte in ein Array schreiben
  
  For lngIndex = 1 To UBound(vntValues, 1) 'Das Array abarbeiten
    'wenn mehr als ein Komma (,) vorkommt
    If Len(vntValues(lngIndex, 1)) - Len(Replace(vntValues(lngIndex, 1), ",", "")) > 1 Then
      'die einzelnen Werte in ein neues Array per Split() einlesen
      vntSplit = Split(vntValues(lngIndex, 1), ",")
      'das Werte-Array abarbeiten
      For lngC = 1 To UBound(vntSplit)
        'unser drittes Array neu Dimensionieren
        Redim Preserve vntTmp(lngI)
        'Ersten Wert & n-ten Wert in das Array schreiben
        vntTmp(lngI) = vntSplit(0) & "," & vntSplit(lngC)
        lngI = lngI + 1
      Next
    Else 'nur ein Komma (oder keines)
      'drittes Array ebenfalls neu Dimensionieren
      Redim Preserve vntTmp(lngI)
      'Kompletten (Zell)Wert in das Array schreiben
      vntTmp(lngI) = vntValues(lngIndex, 1)
      lngI = lngI + 1
    End If
  Next
  
  'Das Array zurück in die Zellen schreiben
  Range("A1").Resize(UBound(vntTmp) + 1, 1) = Application.Transpose(vntTmp)
End Sub

Gruß Sepp

Anzeige
Ok ...
22.06.2010 23:14:18
Holger
Hi Sepp,
ich bin zwar Anfänger, aber sooo jung auch nicht mehr.
Ok, ich teste den Code. Allerdings verstehe ich nicht, wo
an der richtigen Stelle die Zeilen eingefügt werden?
@Sepp, bitte eine Frage noch!
23.06.2010 09:53:51
Holger
Hi Sepp,
eine Frage zu deinem Code.
For lngIndex = 1 To UBound(vntValues, 1)
Der Datenbereich verändert sich ja während der For Schleife, da ja Zeilen mittendrin eingefügt werden.
Aber der Arraybereich wurde ja vorher definiert?
Dann hört er ja vorher aúf?
Anzeige
@Sepp, bitte eine Frage noch!
23.06.2010 10:10:26
Holger
Hi Sepp,
eine Frage zu deinem Code.
For lngIndex = 1 To UBound(vntValues, 1)
Der Datenbereich verändert sich ja während der For Schleife, da ja Zeilen mittendrin eingefügt werden.
Aber der Arraybereich wurde ja vorher definiert?
Dann hört er ja vorher aúf?
AW: @Sepp, bitte eine Frage noch!
23.06.2010 22:24:21
Josef

Hallo Holger,
mein Code ändert den Datenbereich erst zum Schluß, wenn das Array wieder in die Zellen geschrieben wird, vorher werden nur die Daten in den einzelnen Arrays manipuliert.

Gruß Sepp

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige