Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1224to1228
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
Inhaltsverzeichnis

Zeile aus zwei Tabellenblätter in 3 Tabelle

Zeile aus zwei Tabellenblätter in 3 Tabelle
Kisselstein
Hallo Zusammen,
Ich versuche gerade eine Menge Zeilen aus zwei verschiedenen Tabellenblättern in ein Drittes zu kopieren. Das ist händich ziemlich aufwendig, da es sich um viele Daten handelt, die immer wieder neu erzeugt werden müssen. Deswegen versuche ich greade dies mit VBA zu verbessern. Leider scheitere ich.
Ich habe in Tabelle 1 mehrere Tests in Spalte A zu diesen gibt es jeweils unterschiedlich viele Cases in Spalte B z.b.
Test 1
...........Case 1
...........Case 2
Test 2
...........Case 3
...........Case 2
In Tabelle 2 habe ich zu den Cases (Spalte B) die einzelnen Test Schritte (Spalte C) mit unterschiedliche Anzahlen. z.b.
Case 1
...........Testschritt 1
...........Testschritt 1
Case 2
...........Testschritt 2
Case 3
...........Testschritt 3
...........Testschritt 3
...........Testschritt 3
Ich möchte jetzt in einem dritten Tabellenblatt z.b mit Namen Ziel
beide miteinader verbinden also wie folgt:
(gleiche Spalten wie in den ersten beiden Tabellenblätter).
Test 1
........... Case 1
......................Testschritt 1
......................Testschritt 1
Case 2
Testschritt 2
Test 2
Case 3
Testschritt 3
Testschritt 3
Testschritt 3
Case 2
Testschritt 2
Für jeden Tipp ich wie das in einen sinvollen Code bekomme bin ich she dankbar.
Hier noch ein Excel Beispiel
https://www.herber.de/bbs/user/76000.xls
Gruß und eine Guten Nach
Kisselstein
AW: Zeile aus zwei Tabellenblätter in 3 Tabelle
03.08.2011 09:25:50
Marc
Hallo!
Versuch mal folgendes:
Gruß, Marc
Sub testcase()
Sheets(3).Range("A2:G999").ClearContents
lz = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row 'letzte Zeile ermitteln
ls = Sheets(1).UsedRange.Columns.Count
ls2 = Sheets(2).UsedRange.Columns.Count
zielzeile = 2
For sh1 = 2 To lz
If Sheets(1).Cells(sh1, 1)  "" Then
For zielspalte = 1 To ls
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(1).Cells(sh1, zielspalte)
Next zielspalte
zielzeile = zielzeile + 1
'Case suchen, abarbeiten
x = 1
Do
suchcase = Sheets(1).Cells(sh1 + x, 2)
casereihe = Sheets(2).Range("B:B").Find(suchcase).Row
For zielspalte = 2 To ls2
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(2).Cells(casereihe, zielspalte)
Next zielspalte
casereihe = casereihe + 1
zielzeile = zielzeile + 1
x = x + 1
'Testschritte arbeiten
Do While Sheets(2).Cells(casereihe, 2) = ""
For zielspalte = 3 To ls2
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(2).Cells(casereihe,  _
zielspalte)
Next zielspalte
casereihe = casereihe + 1
zielzeile = zielzeile + 1
Loop
Loop Until Sheets(1).Cells(sh1 + x, 2) = ""
End If
Next sh1
Sheets(3).Select
End Sub

Anzeige
AW: Zeile aus zwei Tabellenblätter in 3 Tabelle
03.08.2011 12:38:35
Kisselstein
Hallo Marc,
ich bin begeistert,
das funktioniert richtig gut.
Ich habe noch etwas gestern vergessen:
Und zwar habe ich für jeden Test zuerst mehrere Zeilen mit einer Beschreibung und den jewiligen Test Daten: z.b.
ursprünglich
Test 1
...........Case 1
...........Case 2
erweitert:
Test 1
...........Beschreibung
...........Zeile mit Text
...........Zeile mit Text
...........Testdaten
...........Daten
...........Daten
...........Case 1
...........Case 2
Für die Beschreibung und auch für die Testdaten können unterschiedlich viele Zeilen (also die Zeilen Zeile mit Text und Daten) pro Testfall vorkommen.
Ich habe wieder ein Beispiel erstellt.
https://www.herber.de/bbs/user/76010.xls
Könntest Du mich hier nochmals unterstützen.
Vielen Dank schon mal
Kisselstein
Anzeige
AW: Zeile aus zwei Tabellenblätter in 3 Tabelle
04.08.2011 08:46:23
Marc
Guten Morgen!
Sorry, das es etwas länger gedauert hat.
Hab mich mit Reihenfolgenproblemen auseinandersetzen müssen. Sehr verwirrend. Ich hoffe, das es jetzt alles so ist, wie du dir das vorstellst. ich hab allerdings bemerkt, das die Zeile nach "Test" nich geprüft wird, weil der Zähler 2x hochgesetzt wird. Das wird aber an anderer Stelle nötig. Da aber da nur Bemerkungen in der Zeile stehen, hab ich das vernachlässigt.
Gruß, Marc
Sub testcase()
Sheets(3).Range("A2:G999").ClearContents
lz = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row 'letzte Zeile ermitteln
ls = Sheets(1).UsedRange.Columns.Count 'spalten Tabelle 1 ermitteln
ls2 = Sheets(2).UsedRange.Columns.Count ' spalten Tabelle 2 ermitteln
zielzeile = 2
'Test Nr. ermittel und in Zeile eintragen
For sh1 = 2 To lz
If Sheets(1).Cells(sh1, 1)  "" Then
For zielspalte = 1 To ls
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(1).Cells(sh1, zielspalte)
Next zielspalte
zielzeile = zielzeile + 1
'Case suchen, abarbeiten
x = 1
Do
Do
If (x + sh1) > lz Then End
x = IIf(InStr(1, suchcase, "Case") = 0, x + 1, x + 0)
suchcase = Sheets(1).Cells(sh1 + x, 2)
Loop While InStr(1, suchcase, "Case") = 0
casereihe = Sheets(2).Range("B:B").Find(suchcase).Row
For zielspalte = 2 To ls2
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(2).Cells(casereihe,  _
zielspalte)
Next zielspalte
Testreihe = casereihe + 1
zielzeile = zielzeile + 1
x = x + 1
'Testschritte arbeiten
Do While Sheets(2).Cells(Testreihe, 2) = ""
For zielspalte = 3 To ls2
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(2).Cells(Testreihe,  _
zielspalte)
Next zielspalte
Testreihe = Testreihe + 1
zielzeile = zielzeile + 1
Loop
Loop Until Sheets(1).Cells(sh1 + x, 1)  ""
End If
Next sh1
Sheets(3).Select
End Sub

Anzeige
AW: Zeile aus zwei Tabellenblätter in 3 Tabelle
04.08.2011 09:50:51
Kisselstein
Hallo Marc,
danke erstmal für die Antwort, also so lange hat es jetzt nicht gedauert :-)
Es passt aber noch nicht. Die Beschrebungs-Zeilen und die Testdaten-Zeilen werden nicht eingefügt in der Ziel Tabelle. Also wie zuvor:
Test 1
...........Case 1
...........Case 2
statt
est 1
...........Beschreibung
...........Zeile mit Text
...........Zeile mit Text
...........Testdaten
...........Daten
...........Daten
...........Case 1
...........Case 2
Gruß Kisselstein
AW: Zeile aus zwei Tabellenblätter in 3 Tabelle
04.08.2011 10:04:50
Kisselstein
Hallo Marc,
danke erstmal für die Antwort, also so lange hat es jetzt nicht gedauert :-)
Es passt aber noch nicht. Die Beschrebungs-Zeilen und die Testdaten-Zeilen werden nicht eingefügt in der Ziel Tabelle. Also wie zuvor:
Test 1
...........Case 1
...........Case 2
statt
est 1
...........Beschreibung
...........Zeile mit Text
...........Zeile mit Text
...........Testdaten
...........Daten
...........Daten
...........Case 1
...........Case 2
Gruß Kisselstein
Anzeige
Jetzt aber:
05.08.2011 08:22:54
Marc
Moin!
Jetzt sollte es gehen.
Gruß, Marc
Sub testcase()
Sheets(3).Range("A2:G999").ClearContents
lz = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row 'letzte Zeile ermitteln
ls = Sheets(1).UsedRange.Columns.Count 'spalten Tabelle 1 ermitteln
ls2 = Sheets(2).UsedRange.Columns.Count ' spalten Tabelle 2 ermitteln
zielzeile = 2
'Test Nr. ermittel und in Zeile eintragen
For sh1 = 2 To lz
If Sheets(1).Cells(sh1, 1)  "" Then
For zielspalte = 1 To ls
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(1).Cells(sh1, zielspalte)
Next zielspalte
zielzeile = zielzeile + 1
'Case suchen, abarbeiten
x = 1
Do
Do
If (x + sh1) > lz Then End
x = IIf(InStr(1, suchcase, "Case") = 0, x + 1, x + 0)
suchcase = Sheets(1).Cells(sh1 + x, 2)
For zielspalte = 1 To ls
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(1).Cells(sh1 + x,  _
zielspalte)
Next zielspalte
zielzeile = zielzeile + 1
Loop While InStr(1, suchcase, "Case") = 0
casereihe = Sheets(2).Range("B:B").Find(suchcase).Row
For zielspalte = 2 To ls2
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(2).Cells(casereihe,  _
zielspalte)
Next zielspalte
Testreihe = casereihe + 1
zielzeile = zielzeile + 1
x = x + 1
'Testschritte arbeiten
Do While Sheets(2).Cells(Testreihe, 2) = ""
For zielspalte = 3 To ls2
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(2).Cells(Testreihe,  _
zielspalte)
Next zielspalte
Testreihe = Testreihe + 1
zielzeile = zielzeile + 1
Loop
Loop Until Sheets(1).Cells(sh1 + x, 1)  ""
End If
Next sh1
Sheets(3).Select
End Sub

Anzeige
AW: Jetzt aber:
05.08.2011 08:51:35
Kisselstein
Hallo Marc,
fast nur ganz am Anfang noch nicht, da wird eine Zeile Übersprungen:
Die erste nach der Test Zeile (Die Beschreibung), da geht es direkt in die Zeile mit Text. Beim zweiten Durchlauf und allen folgenden Durchläufe passt es dann allerdings.
D.h beim ersten Durchlauf wir Beschreibungszeile übersprungen, also würde ich jetzt mal sagen, mit meinen schwachen Kenntnissen, dass die Zeilenzahl am anfang zu hoch ist.
Gruß Wolfi
Alles drin, alles dran.
05.08.2011 12:26:11
Marc
Und wie wär´s damit?
Gruß, Marc
Sub testcase()
Sheets(3).Range("A2:G999").ClearContents
lz = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row 'letzte Zeile ermitteln
ls = Sheets(1).UsedRange.Columns.Count 'spalten Tabelle 1 ermitteln
ls2 = Sheets(2).UsedRange.Columns.Count ' spalten Tabelle 2 ermitteln
zielzeile = 2
'Test Nr. ermittel und in Zeile eintragen
For sh1 = 2 To lz
If Sheets(1).Cells(sh1, 1)  "" Then
For zielspalte = 1 To ls
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(1).Cells(sh1, zielspalte)
Next zielspalte
zielzeile = zielzeile + 1
'Case suchen, abarbeiten
x = 1
Do
If (x + sh1) > lz Then End
For zielspalte = 1 To ls
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(1).Cells(sh1 + x, zielspalte)
Next zielspalte
zielzeile = zielzeile + 1
suchcase = Sheets(1).Cells(sh1 + x, 2)
If InStr(1, suchcase, "Case") > 0 Then
casereihe = Sheets(2).Range("B:B").Find(suchcase).Row
Testreihe = casereihe + 1
'Testschritte arbeiten
Do While Sheets(2).Cells(Testreihe, 2) = ""
For zielspalte = 3 To ls2
Sheets(3).Cells(zielzeile, zielspalte) = Sheets(2).Cells(Testreihe,  _
zielspalte)
Next zielspalte
Testreihe = Testreihe + 1
zielzeile = zielzeile + 1
Loop
End If
x = x + 1
Loop Until Sheets(1).Cells(sh1 + x, 1)  ""
End If
Next sh1
Sheets(3).Select
End Sub

Anzeige
AW: Alles drin, alles dran.
05.08.2011 21:45:45
Kisselstein
Hallo Marc,
ja jetzt passt es Danke !
Allerdings hätte ich gerne noch eine kleine Änderung eingebaut:
Ich versuch das zwar gar über eine Hilfspalte, aber das klappt nicht wirklich:
Wenn die Cases in beiden Tabellen verglichen werden klappt das wenn ich jetzt aber einen _ beliebigen Text nehme geht es nicht da (wenn ich das richtig verstanden habe), über die Funktion

InStr(1, suchcase, "Case") > 0 Then"
hart nach "Case" ~ geprüft wird.
Ich hätte es aber lieber bzw. die die Tests durchführen, dass die einzelnen Cases mit einem Text beschrieben werden nicht nur Case 1 Case 2 etc.
Also statt Case 1 steht z.b. Bitte starten Sie Versuchsreihe grün. Natürlich steht der Text in beiden Tabellen.
Ist das möglich ?
Gruß und ein schönes Wochenende
Kisselstein
Anzeige
AW: Alles drin, alles dran.
08.08.2011 08:36:59
Marc
Guten Morgen!
Dann schreib statt "Case" einen Begriff rein, der auf jeden fall vorkommt, z.B. "Bitte" oder "Versuch" oder ähnlich.
Das solltest du hinkriegen...
Gruß, Marc
AW: Alles drin, alles dran.
09.08.2011 09:41:17
Kisselstein
Hallo Marc,
klar das bekomme ich hin,
werde aber falls doch in Zukunft Problem geben sollte das noch mittels einer Hilfsspalte lösen.
Du hast mir aber auf jeden Fall richtig Gut weiter geholfen. Vilen Dank nochmals.
Kisselstein

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige