Ich denke jetzt hab ichs verstanden.
habe da was vorbereitet. Teste es bitte in einer Dummydatei, nicht das am Ende noch eine Daten verloren gehen.
Wenn in VBA etwas überschrieben wird lässt es sich nicht mehr Rückgängig machen.
Erzeuge bitte zwei Module:
1x Programm
Sub Hauptprogramm()
Dim ProdNotInTab2 As Boolean
Dim StartZeile As Integer
Dim AnzahlZeilen As Integer
Dim ZeilenTab2 As Integer
Dim Zaehler1 As Integer
Dim Zaehler2 As Integer
Dim Zaehler3 As Integer
Dim ProduktLvl1 As String
ZeilenTab2 = ActiveWorkbook.Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row
Zaehler1 = 2
Do
If ActiveWorkbook.Sheets("Tabelle1").Cells(Zaehler1, 1).Value = 1 Then
ProduktLvl1 = ActiveWorkbook.Sheets("Tabelle1").Cells(Zaehler1, 3).Value
For Zaehler2 = 2 To ZeilenTab2
If ProduktLvl1 = ActiveWorkbook.Sheets("Tabelle2").Cells(Zaehler2, 3).Value Then
ProdNotInTab2 = True
Exit For
Else
ProdNotInTab2 = False
End If
Next Zaehler2
If ProdNotInTab2 Then
Zaehler3 = Zaehler2 + 1
Do Until ActiveWorkbook.Sheets("Tabelle2").Cells(Zaehler3, 1) = 2 Or ActiveWorkbook.Sheets("Tabelle2").Cells(Zaehler3, 1) = ""
Zaehler3 = Zaehler3 + 1
Loop
StartZeile = Zaehler1 + 1
AnzahlZeilen = Zaehler3 - (Zaehler2 + 1)
Call ZeileEinfuegen(StartZeile, AnzahlZeilen)
Worksheets("Tabelle2").Range("A" & StartZeile, "D" & Zaehler1 + AnzahlZeilen).Copy
Worksheets("Tabelle1").Range("A" & StartZeile, "D" & Zaehler1 + AnzahlZeilen).PasteSpecial xlPasteValues
End If
End If
Zaehler1 = Zaehler1 + 1
Loop Until ActiveWorkbook.Sheets("Tabelle1").Cells(Zaehler1, 1).Value = Empty
End Sub
1x ZeilenEinfügen
Function ZeileEinfuegen(ZeileStart As Integer, AnzZeilen As Integer)
Dim Zaehler As Integer
For Zaehler = ZeileStart To ZeileStart + AnzZeilen - 1
ActiveWorkbook.Sheets("Tabelle1").Cells(Zaehler, 1).EntireRow.Insert
Next Zaehler
End Function
Probiere es mal aus und melde dich wieder, wie es funktioniert hat.
Kommentare kann ich die bei Gelegenheit auch nochmal ran basteln.
Wieviele Zeilen hat Eigentlich deine Tabelle 2?
über 32000?
Das ist wichtig, da dann der Fehler Index außerhalb des Bereich auftritt, denn die Schleifen verarbeiten nur Integer.
Gruß
Andreas
|