Anzeige
Archiv - Navigation
788to792
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
788to792
788to792
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datenzuweisung

Datenzuweisung
15.08.2006 12:27:27
Werner
Hi zusammen,
ich habe zwei Tabellenblätter und möchte deren Werte auf übereinstimmung vergleichen und darauf hin Daten in die entsprechenden Felder eintragen.
Das ganze sollte so aussehen:
Schritt 1:
Vergleiche A1/Tabelle1 mit A1/Tabelle2. Wenn A1/Tabelle1 = A1/Tabelle2 dann kopiere A2/Tabelle1 in A3/Tabelle2 (wenn A3/Tabelle2 schon beschrieben ist dann prüfe A4, etc. bis du eine unbeschriebene Zelle findest und kopiere den Wert dort hin), dann gehe zu Schritt2.
Wenn A1/Tabelle1 ungleich A1/Tabelle2, gehe zu Schritt2.
Schritt2:
Vergleiche A1/Tabelle1 mit A2/Tabelle2 (alles Andere wie Schritt1). Das ganze geht bis A1/Tabelle1 mit A12362/Tabelle2 verglichen wurde. Dann gehe zu Schritt3.
Schritt3:
Vergleiche A2/Tabelle1 mit A1/Tabelle2(alles Andere wie Schritt 1 + 2). Die ganze Prozedur endet wenn A18017/Tabelle1 mit A12362 verglichen und ausgewertet wurde.
So, komplizierter ging es leider nicht :-)
Wäre schön wenn mir jemand helfen könnte, ich freue mich über jeden Hinweis.
Liebe Grüße,
Werner.

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenzuweisung
16.08.2006 06:32:39
ingUR
Hallo, Werner,
ich bin nicht sicher, ob ich die Aufgabe richtig verstehe, wenn ich meine, dass Du in der Spalte A der Tabelle 1 und der Tabelle 2 zwei Datenreihen vorliegen hast und dann jede dieser Zahlen miteinander vergleichen willst, um dann, wenn eine Übereinstimmung gefunden wird, diesen Wert an das Ende der Spalte A auf dem Tabellenblat 2 anfügen willst.
Doch Du schreibst auch, dass die Spalte A auf der Tabelle 2 bis zur Zeie 12362 durchlaufen werden soll, andererseits denkst Du aber auch an die möglichkeit, dass Zelle A3 und folgende auf dem Tabellenbaltt erst beschrieben werden könnten («Wenn A1/Tabelle1 = A1/Tabelle2 dann kopiere A2/Tabelle1 in A3/Tabelle2 (wenn A3/Tabelle2 schon beschrieben ist dann prüfe A4, etc ... » ).
Das birgt doch die Gefahr, das die Spaltenlänge ins Endlose wächst, oder? Und was soll beim Vergleich mit dem Letzten Werte der Tabelle 1 geschehen? Hat dieser einen nachfolge Wert ( r1=18017: Sht2!A[Anfügen] = Sht1!A[r1+1])? Es wäre vielleicht hilfreich die Ausgangsdatenreihe als Beispiel zu sehen.

SUB Vergleich()
r1 = 1
+<------------------------------
r2 = 1                             |
+<--------------------------    |
IF Sht1!A[r1] = Sht2!A[r2] ---> nein    |   |
ja                     |    |   |
Sht2!A[Anfügen] = Sht1!A[r1+1]     |    |   |
+<---------------------     |   |
r2 = r2 + 1                      |   |
r2 > 12365 ----------------- nein   |
ja : dann Schritt 3             |
r1=r1+1                            |
r1 > 18017 ---------------------nein
END SUB

Wenn ich also so Deine Aufgbe richtig verstanden habe - Einschränkung siehe oben -, dann ist eine doppelte For-Schleife zu erledigen, wobei bei gefundener Gleichheit, immer der Wert, für den die Gleichheit festgestellt wurde, an das Ende der Tabelle 2 angefügt wird.
Dazu ist es m.E. sinnvoll, dass Ende der Tabelle 2 einmal vor Beginn der Schleifen festzustellen und dann in der Schleife den Zähler für diese nächste freie Zeile hochzusetzen, um dann in diese Zelle den Gleicheitswert zu schreiben.
NextFreeRinA_ws2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row + 1
Hier also die Befehlszeilen zum Flußdiagramm:

Option Explicit
Sub DreiSchritt()
Dim ws1 As Worksheet, r1 As Long, maxr1 As Long
Dim ws2 As Worksheet, r2 As Long, maxr2 As Long
Dim NextFreeRinA_ws2 As Long
Set ws1 = Worksheets("Tabelle1")
Set ws2 = Worksheets("Tabelle2")
NextFreeRinA_ws2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row + 1
maxr1 = 18017
maxr2 = 12363
For r1 = 1 To maxr1
For r2 = r1 + 1 To maxr2
If ws1.Cells(r1, 1) = ws2.Cells(r2, 1) Then
ws2.Cells(NextFreeRinA_ws2, 1) = ws1.Cells(r1, 1)
NextFreeRinA_ws2 = NextFreeRinA_ws2 + 1
If NextFreeRinA_ws2 = 65536 Then
MsgBox "Letzte Zeile in Spalte A in Tabelle 2 erreicht!"
Exit Sub
End If
End If
Next r2
Next r1
End Sub

Natürlich könnten auch die Felder der Spalte A auf der Tabelle 1 und die Felder der Spalte A auf der Tabelle 2 jeweils in Datenfelder Daten1(1:18017) und Data2(1:12362) geschrieben werden, so dass dann statt Zelleninhalte Daten der Datenfelder miteinader verglichen werden und bei gleichheit in ein drittes Datenfeld, Daten3(18017+?) - siehe hierzu auch meine Frage oben -, geschrieben werden. Am Ende wird dann dieses Datenfeld ausgegeben.
Vielleicht bietet diese Darstellung ein paar Anregungen zur Lösung, auch wenn ich vielleicht Deine Aufgabenstellung nicht richtig erkannt haben sollte.
Gruß,
Uwe
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige