Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Jeden Wert zweier Spalten vergleichen





Frage

Hallo zusammen, habe sehr wenig Erfahrung in Excel und VBA, deshalb suche ich ein wenig Hilfe. Folgendes Problem: Ich möchte eine Spalte (ca 30.000 Zeilen) mit einer anderen Spalte (ca 50.000 Zeilen) vergleichen (jeden Wert mit jedem). Falls Werte doppelt vorkommen sollen alle markiert werden. Das war´s auch schon Hoffe ihr könnt mir helfen Gruß Sharth

Antwort 1 von zero_-_-cool

Jou, das lässt sich am leichtesten mit VBA realisieren.
Es dauert zwar ein weilchen jeden mit jedem zu vergleichen bei der Anzahl, aber machbar isses.

Ich würde mir ein Modul anlegen und folgendes reintippeln:

Public Function vgl_Zeile ()
For i = 1 to Sheets("Tabelle1").UsedRange.Rows.Count
For i2 = 1 To Sheets.UsedRange.Rows.Count
If (Sheets("Tabelle1").Range("A" & i) = Sheets("Tabelle1").Range("B" & i2) Then
Sheets("Tabelle1").Range("A" & i).Select
Selection.Interior.ColorIndex = 3
End If
Next i2
Next i
End Function

Habs jetzt nicht ausprobiert, viel. liegt irgendwo n Syntaxfehler vor. Aber vom Prinzip her funktioniert es so. Evtl. kennt jemand nen Weg der schneller geht.

Antwort 2 von Saarbauer

Hallo,

ich habe das Makro etwas überarbeiten

Public Function Zeilen_vergleichen()
Range("A1").Select
Endi = Range("A65536").End(xlUp).Row
Range("B1").Select
Endj = Range("A65536").End(xlUp).Row
For i = 1 To Endi
For j = i To Endj
If Range("A" & i) = Range("B" & j) Then
Range("B" & j).Select
Selection.Interior.ColorIndex = 3
End If
Next j
Next i
End Function

Es weden die Daten in Spalte A und Spalte B verglichen

Solten die Daten anders angeordnet sein, wäre dies abzuändern. Sollen die Daten in Spalte A bzw. B auch intern auf Doppelte geprüft werden, dann wäre dies noch zu ergänzen

Gruß

Helmut

Antwort 3 von Saarbauer

Hallo,

ist mir gerade eingefallen, dass bei unsortierten Daten, in dieser Zeile
For j = i To Endj
i durch 1 zu ersetzen ist.

Gruß

Helmut

Antwort 4 von sharth2003

Danke für eure schnellen Antworten.
Aber ich befürchte bei der Anzahl der Zeilen ist diese Lösung nicht geeignet, jedenfalls stürzt Excel jedesmal beim ausführen ab. Mit weniger Zeilen funktioniert das Makro bestens. Habt ihr noch eine Variante, die funktionieren könnte. Geht es überhaupt alleine mit Excel?

Gruß,

Sharth

Antwort 5 von Saarbauer

Hallo,

was soll den mit den markierten Zeilen passieren?

Vielleicht gibt es über diesen Weg eine Lösung

Gruß

Helmut

Antwort 6 von nightdream

Hallo zusammen,

ich hatte eine ähnliche Aufgabe mit folgender Excelformel lösen können. Ich habe sie in der Tabelle2 in Spalte B eingesetzt. Hier wird mir dann angezeigt, ob der Datensatz aus Tabelle2 auch in Tabelle1 auftaucht. Vergleichskriterium ist Spalte A.

=WENN(ISTNV(SVERWEIS(A1;Tabelle1!A:A;1;FALSCH));"ja";"nein")


Die Formel entsprechend in die anderen Zellen kopieren.

So sollte es eigentlich funktionieren.

Gruss
nightdream

Antwort 7 von rainberg

Hallo shart2003,

habe folgendes Makro mit je 10000 Werten in den Spalten A und B getestet.
Laufzeit ca. 40sek
Du kannst damit auch beliebig mehr Zeilen vergleichen, ist halt nur eine Frage der Zeit.
Die Werte befinden sich in den Spalten A und B.

Option Explicit

Sub vergleichen()
    Dim lngI As Long, intWert As Integer
    Application.ScreenUpdating = False
    For lngI = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        intWert = Application.WorksheetFunction. _
        CountIf(Worksheets("Tabelle1").Range("B:B"), Cells(lngI, 1).Value)
        If intWert > 0 Then
            Cells(lngI, 1).Interior.ColorIndex = 3
        End If
    Next lngI
    Application.ScreenUpdating = True
End Sub


Gruß Rainer

Antwort 8 von nighty

hi al :)

wie gewünscht :)

gruss nighty

Option Explicit
Sub makro01()
Dim bereich As String
Dim zeile As Long
Dim suche As Range
For zeile = 2 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set suche = Sheets(2).Range("A2" & ":A" & Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row). _
Find(Sheets(1).Range("A" & zeile), LookIn:=xlValues)
If Not suche Is Nothing Then
bereich = bereich & Sheets(1).Range("A" & zeile).Address & ","
End If
Next zeile
Sheets(1).Range("" & Mid(bereich, 1, Len(bereich) - 1)).Select
End Sub

Antwort 9 von nighty

hi all :)

die zeichenanzahl der adressen sprengt den rahmen der selectierung,daher so nicht anwendbar ist,alternativ rainers vorschlag der einfaerbug,wobei ein erneutes starten in wechselwirkung arbeiten sollte um die farben zurueckzusetzen,kommt morgen oder von anderen usern :))

gruss nighty

Antwort 10 von rainberg

Hallo nighty,

das Zurücksetzen der Farben halte ich nicht für erforderlich, geht ja auch per Hand sehr schnell.
Aber wäre natürlich nicht das Problem.

Einfach unter die Zeile

    Application.ScreenUpdating = False


diese Zeile einfügen

Columns("A:A").Interior.ColorIndex = xlNone


Das größere Problem ist die Laufzeit meines Codes.
Bei 50.000 Werten in Spalte A und 30.000 Werten in Spalte B komme ich auf 7 min und 20 s.

Die Frage ist nun, gibt es eine schnellere Methode als CountIf?

Gruß Rainer