shitzovran
Goto Top

Ganze Zeilen in Sheet vervielfältigen

ich möchte mittels VBA in Excel Zellen vervielfältigen. Wie oft, wird anhand einer Zelle festgelegt.

Hallo Spezialisten da draußen,

wie man vllt erahnen kann, habe ich ein Problem...
ich habe eine Tabelle indem mehrere Zeilen vorkommen. in der Tabelle sind auch Mengen angegeben (siehe Beispiel)
ad13ae53baa19124c737bb514044aa24

Jetzt ist es so, dass die Zeilen, die indem die Menge mehr als '1' ist, so oft kopiert werden soll, dass ich im So viele Zeilen habe, dass überall Menge '1' steht.

also im Endeffekt soll es so aussehen:
cc21ddb264f21aa7efb8525683de7c72

Die Tabelle ist natürlich stark vereinfacht. In den meisten Fällen ist es so, dass ich hunderte Datenasätze mit unzähligen Spalten habe. Ich müsste also irgendwie dynamisch sagen können, in welcher Spalte die Mengen stehen, auf die sich das Skript beziehen soll... (zB: die Spalte der aktiven Zelle, oder so) eine weitere Schwierigkeit ist zudem noch, dass er nach kopieren dann die werte auf 1 ändern soll.. oder evtl, mehrmalig durchgehen soll, und nach jedem kopieren und einfügen den wert herunterzählt und in der neu eingefügten Zelle den Wert '1' einträgt. Natürlich können auch Spaltenüberschriften vorhanden sein... alles sehr kopliziert.

ich habe zwar ein Skript mitdem ich einfach jede Zelle verdoppeln kann, aber das ist in diesem fall wohl eher unbrauchbar,.. aber trotzdem möchte ich euch es nicht vorenthalten:

Sub zeilen_verdoppeln()
Dim lastrow As Long, i As Long
Dim wks1 As Worksheet

Set wks1 = ActiveSheet
lastrow = wks1.Cells(Rows.Count, 1).End(xlUp).Row  'durchgehend genutzte Spalte nutzen  

For i = lastrow To 1 Step -1
    wks1.Rows(i + 1).Insert
    wks1.Rows(i).Copy wks1.Rows(i + 1)
Next i
End Sub


ich hoffe ihr habt irgendeine idee, wie ich anfangen kann


Kurzfristig habe ich das mit einer Formel gelöst, diese ist auf dem zweiten Tabellenblatt.
=INDEX(Tabelle1!A:A;999-SUMMENPRODUKT(N(ZEILE(Tabelle1!A1)<=TEILERGEBNIS(9;BEREICH.VERSCHIEBEN(Tabelle1!D$1;;;ZEILE($1:$999)))))+1)

elegeanter wäre es aber natürlich über ein Skript

mfg
Shitz

Content-Key: 169334

Url: https://administrator.de/contentid/169334

Printed on: April 19, 2024 at 23:04 o'clock

Member: bastla
bastla Jul 07, 2011 at 15:18:05 (UTC)
Goto Top
Hallo ShitzOvran!

Du hattest es ja fast schon:
Sub zeilen_verdoppeln()
Const Spalte = "B"  

Dim lastrow As Long, i As Long, Anzahl As Long
Dim wks1 As Worksheet

Set wks1 = ActiveSheet
lastrow = wks1.Cells(Rows.Count, TheColumn).End(xlUp).Row  'durchgehend genutzte Spalte nutzen  

For i = lastrow To 1 Step -1
    Anzahl = Cells(i, Spalte).Value
    If Anzahl <> 1 Then
        Cells(i, Spalte).Value = 1
        For j = 1 To Anzahl - 1
            wks1.Rows(i + 1).Insert
            wks1.Rows(i).Copy wks1.Rows(i + 1)
        Next
    End If
Next i
End Sub
Für "Spalte" kannst Du natürlich auch eine Variable und/oder einen numerischen Wert verwenden ...

Grüße
bastla
Member: ShitzOvran
ShitzOvran Jul 13, 2011 at 14:19:46 (UTC)
Goto Top
vielen dank,

hab den Code noch ein bisschen angepasst und nu läufts...

ich weiß, nicht schön, aber selten face-smile

Sub zeilen_verdoppeln()

Dim Spalte          As String
Dim lastrow         As Long
Dim i               As Long
Dim Anzahl          As Variant
Dim wks1            As Worksheet
Application.EnableEvents = False


On Error GoTo Fehler
Spalte = ActiveCell.Column
Set wks1 = ActiveSheet
lastrow = wks1.Cells(Rows.Count, 1).End(xlUp).Row
For i = lastrow To 1 Step -1
    Anzahl = Cells(i, ActiveCell.Column).Value
    If IsNumeric(Anzahl) And Anzahl > 1 Then
            Cells(i, ActiveCell.Column).Value = 1
        For j = 1 To Anzahl - 1
            wks1.Rows(i + 1).Insert
            wks1.Rows(i).Copy wks1.Rows(i + 1)
        Next
    End If
Fehler:
Next i
End Sub