Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
424to428
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
424to428
424to428
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tabelle erstellen

Tabelle erstellen
07.05.2004 07:00:11
Sputti
Hallo,
ich vergleiche zwei Tabellen miteinander:

Sub Vergleich()
Dim i As Integer
Dim x As Integer, y As Long
Dim a As Integer, b As Long
x = 2
a = 5
y = Worksheets("Tab1").Cells(65536, x).End(xlUp).Row
MsgBox "Spalte " & x & " ist " & y & " Zeilen lang."
b = Worksheets("Tab2").Cells(65536, a).End(xlUp).Row
MsgBox "Spalte " & a & " ist " & b & " Zeilen lang."
For i = 1 To y
For j = 1 To b
If Right(Worksheets("Tab1").Cells(i, 2), 5) = Right(Worksheets("Tab2").Cells(j, 5), 5) Then
MsgBox "Übereinstimmung"
End If
Next j
Next i
End Sub

Bei einer Übereinstimmung(letzten 5 Zeichen sind gleich) möchte ich nun eine neue Tabelle erstellen, d.h. aus den übereinstimmenden Zeilen soll es verschiedene Spalten in eine neue Tabelle übernehmen, z.B.
aus Tab1: Spalte B,C,D,E
aus Tab2: Spalte B,E,F,I,N,D
Habe gestern schon hier Hilfe beim 'vergleichen' gefunden, deshalb hoffe ich auf euch.
Gruß

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle erstellen
Martin
Hallo ?,
es geht bestimmt eleganter, aber versuche mal folgendes (ungetestet):

Sub Vergleich()
Dim i As Integer
Dim x As Integer, y As Long
Dim a As Integer, b As Long
Dim z As Long
x = 2
a = 5
z = 1
y = Worksheets("Tab1").Cells(65536, x).End(xlUp).Row
MsgBox "Spalte " & x & " ist " & y & " Zeilen lang."
b = Worksheets("Tab2").Cells(65536, a).End(xlUp).Row
MsgBox "Spalte " & a & " ist " & b & " Zeilen lang."
Application.ScreenUpdating = False
For i = 1 To y
For j = 1 To b
If Right(Worksheets("Tab1").Cells(i, 2), 5) = Right(Worksheets("Tab2").Cells(j, 5), 5) Then
With Worksheets("Tab3")
.Cells(z, 1) = Worksheets("Tab1").Cells(i, 2)
.Cells(z, 2) = Worksheets("Tab1").Cells(i, 3)
.Cells(z, 3) = Worksheets("Tab1").Cells(i, 4)
.Cells(z, 4) = Worksheets("Tab1").Cells(i, 5)
.Cells(z, 5) = Worksheets("Tab2").Cells(j, 2)
.Cells(z, 6) = Worksheets("Tab2").Cells(j, 5)
.Cells(z, 7) = Worksheets("Tab2").Cells(j, 6)
.Cells(z, 8) = Worksheets("Tab2").Cells(j, 9)
.Cells(z, 9) = Worksheets("Tab2").Cells(j, 14)
.Cells(z, 10) = Worksheets("Tab2").Cells(j, 4)
End With
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub

Bei 7000 Zeilen dürfte das Makro aber lange laufen, daher am besten mal anhand einer kleinen Testdatei ausprobieren.
Gruß
Martin Beck
Anzeige
AW: Tabelle erstellen
07.05.2004 09:38:55
Sputti
Das sieht schon gut aus, danke,
allerdings gibt es noch Probleme:
Ist es möglich, dass die Spaltennamen übernommen werden?
Und zwar wird mir ja nur eine Übereinstimmung in die Tabelle geschrieben, er sollte mir aber jede Übereinstimmung reinschreiben?
Vielleicht irgendwie das z in eine for Schleife einbauen?!
Gruß
Mein Fehler
Martin
Hallo ?,
im Eifer übersehen: Vor die Zeile
End With
mußt Du noch die Zeile
z = z + 1
einfügen.
Bezüglich der "Spaltennamen": Wo stehen die genau (Tabelle, Zeile, Spalte)?
Gruß
Martin Beck
hat mir schon viel geholfen
07.05.2004 10:32:10
Sputti
Hab das mit den Spaltennamen folgendermaßen gelöst:
With Worksheets("Tab3")
For k = 1 To 1
.Cells(1, 1) = Worksheets("Tab1").Cells(1, 2)
.Cells(1, 2) = Worksheets("Tab1").Cells(1, 3)
.Cells(1, 3) = Worksheets("Tab1").Cells(1, 4)
.Cells(1, 4) = Worksheets("Tab1").Cells(1, 5)
.Cells(1, 5) = Worksheets("Tab2").Cells(1, 2)
.Cells(1, 6) = Worksheets("Tab2").Cells(1, 5)
.Cells(1, 7) = Worksheets("Tab2").Cells(1, 6)
.Cells(1, 8) = Worksheets("Tab2").Cells(1, 9)
.Cells(1, 9) = Worksheets("Tab2").Cells(1, 14)
.Cells(1, 10) = Worksheets("Tab2").Cells(1, 4)
Next k
'-----------------------------------------
.Cells(z, 1) = Worksheets("Tab1").Cells(i, 2)
.Cells(z, 2) = Worksheets("Tab1").Cells(i, 3)
.Cells(z, 3) = Worksheets("Tab1").Cells(i, 4)
.Cells(z, 4) = Worksheets("Tab1").Cells(i, 5)
.Cells(z, 5) = Worksheets("Tab2").Cells(j, 2)
.Cells(z, 6) = Worksheets("Tab2").Cells(j, 5)
.Cells(z, 7) = Worksheets("Tab2").Cells(j, 6)
.Cells(z, 8) = Worksheets("Tab2").Cells(j, 9)
.Cells(z, 9) = Worksheets("Tab2").Cells(j, 14)
.Cells(z, 10) = Worksheets("Tab2").Cells(j, 4)
z = z + 1
End With
Bei den ersten Tests hat es funktioniert- die Spaltennamen stehen immer in der ersten Zeile der Tabellen Tab1 und Tab2.
Was mir beim testen aufgefallen ist, wenn sich die Daten der Tab1/Tab2 ändern, dann wird die Tab3 allerdings nicht aktualisiert bzw. überschrieben.
Ist das irgendwie möglich?
Gruß
Anzeige
AW: hat mir schon viel geholfen
Martin
Hallo ?,
1. Spaltennamen
Mit Deinem Code werden die Spaltennamen jetzt in jedem Schleifendurchlauf eingetragen. Das ist überflüssig und verlangsamt den Code. Ziehe folgenden Code vor die Zeile, die mit For beginnt:
With Worksheets("Tab3")
.Cells(1, 1) = Worksheets("Tab1").Cells(1, 2)
.Cells(1, 2) = Worksheets("Tab1").Cells(1, 3)
.Cells(1, 3) = Worksheets("Tab1").Cells(1, 4)
.Cells(1, 4) = Worksheets("Tab1").Cells(1, 5)
.Cells(1, 5) = Worksheets("Tab2").Cells(1, 2)
.Cells(1, 6) = Worksheets("Tab2").Cells(1, 5)
.Cells(1, 7) = Worksheets("Tab2").Cells(1, 6)
.Cells(1, 8) = Worksheets("Tab2").Cells(1, 9)
.Cells(1, 9) = Worksheets("Tab2").Cells(1, 14)
.Cells(1, 10) = Worksheets("Tab2").Cells(1, 4)
End With
2. Aktualisierung
Die offensichtliche Lösung ist, das Makro manuell zu starten, wenn Änderungen vorgenommen wurden. Ansosnsten könnte man das Ganze in eine Worksheet_Change-Ereignisprozedur packen. Dann würde aber bei jeder Änderung das komplette Makro durchlaufen, was vermutlich sehr ineffizient wäre.
Gruß
Martin Beck
Anzeige
Danke
07.05.2004 11:53:59
Sputti
In Ordnung, vielen Dank für deine Hilfe.
Die Grundidee war sowieso, dass das Makro manuell gestartet wird.
Nochmals danke!
Gruß

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige