PDA

Vollständige Version anzeigen : VBA Zellenkombinationen aus unterschliedlichen Tabellen vergleichen


booboost
03.09.2013, 12:40
Liebe Community,

ich möchte folgendes mit VBA realisieren:

Ich habe 2 Excel-Tabellen (Tabelle2 und Tabelle3) in der gleichen Exceldatei, die ich miteinander vergleichen möchte.

In Tabelle 3 sind Zellen Kombinationen definiert, die für meine Zwecken zulässig sind.
In Tabelle 2 werden Kombinationen aus einem bestimmten System generiert.

Die vom System generierten Kombinationen sind jedoch nicht immer zulässig so dass ich diese Zeile für Zeile überprüfen muss. Für die Überprüfung gelten die zulässigen Kombinationen in Tabelle3 als Grundlage.

Die unzulässigen Kombinationen sollen einfach mit einer anderen Farbe markiert werden (z.B. grün für zulässig und rot für unzulässig)

In der Angehängten Datei ist ein Beispiel zu finden: In der Tabelle steht das gewünschte Ergebnis. Die Zeilen 2,3,4 und 7 sind zulässig (Die Markierung erfolgt in diesem Beispiel auf Spalte O).

An dieser Stelle möchte ich auch erwähnen, dass ich nur bestimmte Zellenkombinationen vergleichen möchte. Man sieht z.B. aus den zulässigen Zeilen 2,3,4 und 7, dass Die Spalte K in Tabelle2 (blaue Markierung) andere Werte enthält als die Spalte K in Tabelle 3. Die Zeilen gelten trotzdem als zulässig da ich für den Vergleich nur die Spalten B,C,E,F,H,I,J,M,N heranziehe. Diese müssen in beiden Tabellen übereinstimmen um als zulässig zu gelten.

Das Beispiel ist vereinfacht aber theoretisch könnte Tabelle2 über 20 tausend system-generierte Zeilen haben und Tabelle3 über 200 zulässige Kombinationen aufweisen.

Wie könnte ich dies so einfach wie möglich mit VBA umsetzen?

Vielen Dank für die Unterstützung

Ich verwende Office 2010

Hasso
03.09.2013, 13:57
Hallo booboost,

bei mir funktioniert das mit diesem Code:Option Explicit

Private Sub CommandButton1_Click()

Dim rngZelle As Range
Dim lngLetzteZeile2 As Long
Dim lngLetzteZeile3 As Long
Dim intZaehler As Integer
Dim strKombination2()
Dim strKombination3()
Dim i, j

lngLetzteZeile2 = Worksheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row
lngLetzteZeile3 = Worksheets("Tabelle3").Cells(Rows.Count, 1).End(xlUp).Row

ReDim strKombination2(2 To lngLetzteZeile2)
ReDim strKombination3(2 To lngLetzteZeile3)

With Worksheets("Tabelle2")
For intZaehler = 2 To lngLetzteZeile2
strKombination2(intZaehler) = .Cells(intZaehler, 2) & .Cells(intZaehler, 3) & _
.Cells(intZaehler, 5) & .Cells(intZaehler, 6) & .Cells(intZaehler, 8) & _
.Cells(intZaehler, 9) & .Cells(intZaehler, 10) & _
.Cells(intZaehler, 13) & .Cells(intZaehler, 14)
Debug.Print strKombination2(intZaehler)
Next intZaehler
End With

With Worksheets("Tabelle3")
For intZaehler = 2 To lngLetzteZeile3
strKombination3(intZaehler) = .Cells(intZaehler, 2) & .Cells(intZaehler, 3) & _
.Cells(intZaehler, 5) & .Cells(intZaehler, 6) & .Cells(intZaehler, 8) & _
.Cells(intZaehler, 9) & .Cells(intZaehler, 10) & _
.Cells(intZaehler, 13) & .Cells(intZaehler, 14)
Debug.Print strKombination3(intZaehler)
Next intZaehler
End With


For i = 2 To UBound(strKombination2)
For j = 2 To UBound(strKombination3)
If strKombination2(i) = strKombination3(j) Then
Worksheets("Tabelle2").Cells(i, 16).Interior.Color = RGB(0, 255, 0)
Exit For
Else
Worksheets("Tabelle2").Cells(i, 16).Interior.Color = RGB(255, 0, 0)
End If
Next j
Next i

End Sub
Die Ergebnisse (Färbung) habe ich in die Spalte neben deinem Muster eingetragen, damit man das vergleichen kann. Ich weiß natürlich nicht, wie die Performance bei deinen Datenmengen aussieht. Ich habe das mal mit 24.706 Zeilen in Tabelle 2 und 197 Zeilen in Tabelle3 getestet und es dauerte ca, 4 Minuten.

Da kann man bestimmt noch etwas optimieren - oder einen ganz anderen Ansatz wählen. Teste einfach mal, ob dir das weiterhilft.

booboost
04.09.2013, 15:17
Super!!! Vielen vielen Dank

es scheint zu funktionieren... ich werde erstmal versuchen verschiedene Szenarien zu testen und das Programm für die weiteren Schritten anzupassen... Sollte ich weitere Fragen haben, würde ich auf dich zurückkommen

Gruß