Anzeige
Archiv - Navigation
852to856
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
852to856
852to856
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellinhalt auf Zeilen verteilen

Zellinhalt auf Zeilen verteilen
10.03.2007 14:57:40
pit-tip
Hallo,
ich habe folgendes Problem.
Ein Tabellenstruktur soll wie folgt durch ein Makro geändert werden:
https://www.herber.de/bbs/user/41013.xls
Die Zeilenanzahl in der Ursprungsversion kann durchaus zwischen 10000 und 15000 liegen.
Schon mal danke für Eure Hilfe
Gruß pit-tip

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellinhalt auf Zeilen verteilen
10.03.2007 15:34:00
Peter
Hallo pit-tip
versuche es so:


Option Explicit
Public Sub Verteilen()
Dim lZeile_1  As Long
Dim lZeile_2  As Long
Dim aTmp      As Variant
Dim iIndex    As Integer
   lZeile_2 = 3
   With Worksheets("Tabelle1")
      For lZeile_1 = 3 To .Range("A65536").End(xlUp).Row
          aTmp = Split(.Range("C" & lZeile_1).Value, Chr(10))
         For iIndex = 0 To UBound(aTmp)
            Work sheets("Tabelle2").Range("A" & lZeile_2).Value = .Range("A" & lZeil e_1).Value
            Worksheets("T abelle2").Range("B" & lZeile_2).Value = .Range("B" & lZeile_1).Valu e
            Worksheets("Tabelle2") .Range("C" & lZeile_2).Value = aTmp(iIndex)
    &nbs p;       Worksheets("Tabelle2").Range("D" & lZeile_2).Va lue = .Range("D" & lZeile_1).Value
      & nbsp;     lZeile_2 = lZeile_2 + 1
  &nbsp ;      Next iIndex
      Next lZeile_1
   End With
End Sub 


Die Ursprungstabelle wird in Tabelle1 erwartet, das Ergebnis wird in Tabelle2 ausgegeben.
Gruß Peter
Anzeige
AW: Zellinhalt auf Zeilen verteilen
ransi
Hallo Pit
Teste mal diesen Code:
Option Explicit


Public Sub test()
Dim arr
Dim arrtmp(1 To 15000, 1 To 4)
Dim s As Integer
Dim L As Long
Dim Z As Long
Dim a As Long
a = 1
With Sheets("Tabelle1").Range("A1:D15000") 'Tabellennamen evtl. anpassen
    arr = .Value
    .Clear
    For Z = 1 To UBound(arr)
        For L = 0 To UBound(Split(arr(Z, 3), Chr(10)))
            arrtmp(a, 1) = arr(Z, 1)
            arrtmp(a, 2) = arr(Z, 2)
            arrtmp(a, 3) = Split(arr(Z, 3), Chr(10))(L)
            arrtmp(a, 4) = arr(Z, 4)
            a = a + 1
        Next
    Next
    .Value = arrtmp
End With
End Sub



ransi
Anzeige
AW: Zellinhalt auf Zeilen verteilen
10.03.2007 15:50:00
Daniel
Hallo
hier ne lösung,
das Ergebnis wird in Tabellen2 eingetragen
Vorraussetztung ist allerdings, daß nur in Spalte 3 die Mehrfachwerte vorkommen können.
https://www.herber.de/bbs/user/41014.xls
und der Code dazu:

Option Explicit
Option Base 1
Sub Modifizieren()
Dim Quelle
Dim Erg()
Dim Erg2
Dim spQ As Long
Dim TextSP3
Dim i As Long, i2 As Long
Dim j As Long
Dim k As Long
Quelle = Sheets("Tabelle1").Cells(1, 1).CurrentRegion.Value
spQ = UBound(Quelle, 2)
'---Tabelle in neue Tabelle übertragen
For i = 1 To UBound(Quelle, 1)
TextSP3 = Split(Quelle(i, 3), Chr(10))
For i2 = 1 To UBound(TextSP3) + 1
k = k + 1
ReDim Preserve Erg(spQ, k)
For j = 1 To spQ
Erg(j, k) = Quelle(i, j)
Next
Erg(3, k) = TextSP3(i2 - 1)
Next
Next
'---Ergebnisarry transponieren, falls es hierfür einen Befehl gibt, wüsste ich gerne wie er heißt
ReDim Erg2(UBound(Erg, 2), UBound(Erg, 1))
For i = 1 To UBound(Erg2, 1)
For j = 1 To UBound(Erg2, 2)
Erg2(i, j) = Erg(j, i)
Next
Next
'---Ergebnis zurückschreiben
Sheets("Tabelle2").Cells(1, 1).Resize(UBound(Erg2, 1), UBound(Erg2, 2)).Value = Erg2
Sheets("Tabelle2").Select
End Sub

Gruß, Daniel
Anzeige
AW: Zellinhalt auf Zeilen verteilen
10.03.2007 17:23:17
pit-tip
Hallo,
schon mal Danke für die bisher erhaltenen Antworten.
Meine Beispieldatei habe ich etwas kleiner gehalten als sie eigentlich ist.
Die Ursprungsdatei geht eigentlich bis Spalte AJ und die aufzuteilende Zelle ist in der Spalte H.
Ich habe versucht die Spalten in den Codes anzupassen. Da mir nicht genügend Literatur zur Verfügung steht, zu den verschiedenen Befehlen, habe ich vielleicht die oder andere Anpassung übersehen.
Es kommt immer die Fehlermeldung 9 "Index liegt ausserhalb des Bereichs.
Könntet ihr die entscheidenden Anpassungen bitte irgendwie hervorheben.
Danke.
Gruß pit-tip
Anzeige
AW: Zellinhalt auf Zeilen verteilen
10.03.2007 17:49:00
Daniel
Hallo
interessant wäre natürlich der Hinweis, welchen code du verwendest.
in meinem Code müsstest du eigentlich nur in diesem Codebreich den Wert 3 auf 8 verändern, dann sollte es funktionieren. (vorausgesetzt, die Tabelle beginnt in A1 und keine Leerspalten und Leerzeilen sind dazwischen.)
alt:
'---Tabelle in neue Tabelle übertragen
For i = 1 To UBound(Quelle, 1)
TextSP3 = Split(Quelle(i, 3), Chr(10))
For i2 = 1 To UBound(TextSP3) + 1
k = k + 1
ReDim Preserve Erg(spQ, k)
For j = 1 To spQ
Erg(j, k) = Quelle(i, j)
Next
Erg(3, k) = TextSP3(i2 - 1)
Next
Next

neu
'---Tabelle in neue Tabelle übertragen
For i = 1 To UBound(Quelle, 1)
TextSP3 = Split(Quelle(i, 8), Chr(10))
For i2 = 1 To UBound(TextSP3) + 1
k = k + 1
ReDim Preserve Erg(spQ, k)
For j = 1 To spQ
Erg(j, k) = Quelle(i, j)
Next
Erg(8, k) = TextSP3(i2 - 1)
Next
Next

Gruß, Daniel
Anzeige
AW: Zellinhalt auf Zeilen verteilen
10.03.2007 20:49:32
pit-tip
Hallo Daniel,
Danke Code funktioniert.
Wie würde der Code aussehen wenn man mehrere Spalten aufschlüsseln würde.
Gruß pit-tip
AW: Zellinhalt auf Zeilen verteilen
10.03.2007 21:39:00
Daniel
Hallo
dann wirds komplizierter.
hängt auch davon ab, wieviele Spalten mehrere Werte enthalten, obs immer die gleichen sind oder obs theoretisch alle sein können.
Zudem stellt sich die Frage, was passieren soll, wenn eine Spalte 2 Werte und eine 4 Werte enthält.
Also da gibt noch einige Fragen zu klären.
Außerdem wäre das dann der Punkt, wo für mich die Nachbarschaftshilfe aufhört und es bei professioneller Auftragsprogrammierung weitergeht.
Gruß, Daniel
Anzeige
AW: Zellinhalt auf Zeilen verteilen
10.03.2007 22:02:37
pit-tip
Hallo Daniel,
in einer zweiten Spalte stehen genau soviele Werte wie in der ersten und jeweils gehören die Ersten, Zweiten ....... Werte zusammen. Mein erste Gedanke war diese zweite Spalte zu löschen. Allerdings möchte ich den ganzen Ablauf wenn möglichst automatisch ablaufen lassen und soviel Daten wie möglich beibehalten damit diese für evtl. später Abfragen weiterhin zur Verfügung stehen.
Gruß pit-tip
AW: Zellinhalt auf Zeilen verteilen
10.03.2007 23:18:00
Daniel
Hallo
Also im Prinzip ne zweite TextSP3-Variable für die entsprechende Spalte ergänzen und deren Werte dann in die Tabelle einfügen.
Kein Hexenwerk, wenn du den Code verstanden hast, sollltest du das hinbekommen.
Gruß, Daniel
Anzeige
AW: Zellinhalt auf Zeilen verteilen
10.03.2007 20:47:00
Peter
Hallo Pit,
dann so:


Option Explicit
Public Sub Verteilen()
Dim lZeile_1  As Long
Dim lZeile_2  As Long
Dim iSpalte   As Integer
Dim aTmp      As Variant
Dim iIndex    As Integer
   lZeile_2 = 3
   With Worksheets("Tabelle1")  ' ggf. Tabellenblatt-Namen anpassen
       For lZeile_1 = 3 To .Range("A65536").End(xlUp).Row
          aTmp = Split(.Cells(lZeile_1, 8).Value, Chr(10))
 &nb sp;       For iIndex = 0 To UBound(aTmp)
            For iSpalte = 1 To 36       ' Spalte (1 = A) bis (36 = AJ)
&nbs p;              Worksheets("Tabelle 2").Cells(lZeile_2, iSpalte).Value = _
                   .Cells(lZeile_1, iSpalte).Value

               If iSpalte = 8 Then
           &nbs p;      Worksheets("Tabelle2").Cells(lZeile_2, 8).Value = aT mp(iIndex)
              & nbsp;End If
            Next iSpalte
         &nb sp;  lZeile_2 = lZeile_2 + 1
      & nbsp;  Next iIndex
      Next lZeile_1
   End With
End Sub 


Vorausgesetzt die erste DatenZeile ist 3.
Gruß Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige