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

Spalten vergleichen - VBA

Spalten vergleichen - VBA
09.10.2006 19:13:19
Wolfgang
Hallo+,
den nachfolgenden Code konnte ich auf der Excel-CD entdecken; Er bewirkt, dass die Spalten A und B miteinander verglichen werden und die doppelten Werte in Spalte C ausgewiesen werden. Wie müßte ich den Code umstellen, wenn ich in Spalte C nicht die doppelten Werte ausgewiesen haben möchte, sondern die Werte die entweder in Spalte A oder in Spalte B im Vergleich nur jeweils in einer Spalte vorkommen ? Danke schon jetzt wieder Allen für die Rückantwort.
Herzliche Grüße
Wolfgang
'Spalten A und B vergleichen und Doppel in C listen

Sub Vergleich()
Dim A As Range, B As Range, C As Range
Dim i%, y%, z%
Set A = Columns(1)
Set B = Columns(2)
Set C = Columns(3)
i = 1: y = 1: z = 1
Do Until IsEmpty(A.Cells(i))
Do Until IsEmpty(B.Cells(y))
If A.Cells(i) = B.Cells(y) Then
C.Cells(z) = A.Cells(i)
z = z + 1: y = 1
Exit Do
End If
y = y + 1
Loop
i = i + 1: y = 1
Loop
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten vergleichen - VBA
09.10.2006 20:58:00
Alex
Hi Wolfgang,

Sub Compare()
Dim rng As Range
Dim iRngALastIndex As Integer
Dim iRngBLastIndex As Integer
Dim iResultCounter As Integer
Dim compareValue As Variant
Dim i As Integer
Dim y As Integer
Dim b As Boolean
' Bereiche von Saplten A und B festlegen
Set rng = Me.Range("A65536")
iRngALastIndex = rng.End(xlUp).Row
Set rng = Me.Range("B65536")
iRngBLastIndex = rng.End(xlUp).Row
' Spalte A mit B vergleichen
For i = 1 To iRngALastIndex
compareValue = Me.Cells(i, 1).Value
b = False
For y = 1 To iRngBLastIndex
If Me.Cells(y, 2).Value = compareValue Then
b = True
Exit For
End If
Next
If Not b Then
iResultCounter = iResultCounter + 1
Me.Cells(iResultCounter, 3).Value = compareValue
End If
Next
' Spalte B mit A vergleichen
For i = 1 To iRngBLastIndex
compareValue = Me.Cells(i, 2).Value
b = False
For y = 1 To iRngALastIndex
If Me.Cells(y, 1) = compareValue Then
b = True
Exit For
End If
Next
If Not b Then
iResultCounter = iResultCounter + 1
Me.Cells(iResultCounter, 3).Value = compareValue
End If
Next
End Sub

Das wäre das, was du möchtest.
Gruss Alex
Anzeige
Danke Alex
09.10.2006 21:04:33
Wolfgang
Hallo Alex,
Danke für Deine Rückmeldung; Der Code sieht ja mächtig anders aus, den hätte ich niemals mit meinen geringen Kenntnissen umstellen bzw. erstellen können. Umsomehr auch meinen herzlichen Dank für Deine Arbeit. Ich werde ihn morgen direkt im Büro umsetzen. Dir weiterhin alles Gute.
Herzliche Grüße
Wolfgang
läuft leider nicht
09.10.2006 21:16:29
Wolfgang
Hallo Alex,
ich habe doch noch schnell eine Probemappe erstellt und Deinen Code in ein Modul kopiert. Es erscheint leider eine Fehlermeldung mit dem Hinweis Fehler beim Kompilieren und sagt dann weiter, dass Set rng = Me.Range("A65536") eine unzulässige Verwendung des Schlüsselwortes Me hervorruft. Mußt da noch evtl. etwas verändert werden? - Danke schon jetzt wieder für die Rückmeldung.
Gruß - Wolfgang
Anzeige
AW: Spalten vergleichen - VBA
09.10.2006 21:14:15
Gerd
Hallo Wolfgang,
probier mal.

Sub VergleichII()
Dim A As Range, B As Range, C As Range
Dim i%, z%
Set A = Columns(1)
Set B = Columns(2)
Set C = Columns(3)
i = 1: z = 1
Do Until IsEmpty(A.Cells(i))
If Application.WorksheetFunction.CountIf(B, A.Cells(i)) = 0 Then
C.Cells(z) = A.Cells(i)
z = z + 1
End If
i = i + 1
Loop
i = 1
Do Until IsEmpty(B.Cells(i))
If Application.WorksheetFunction.CountIf(A, B.Cells(i)) = 0 Then
C.Cells(z) = B.Cells(i)
z = z + 1
End If
i = i + 1
Loop
End Sub

Gruß
Gerd
Danke Gerd, läuft und funktioniert.
09.10.2006 21:26:47
Wolfgang
Hallo Gerd,
auch Dir recht herzlichen Dank für Deine Rückantwort und Mühewaltung. Ich habe Deinen Code gerade getestet und meine, er funktioniert einwandfrei. Ich werde ihn morgen im Büro noch mit ganz vielen Zahlen testen. Sollte noch eine Frage offen sein, darf ich mich bestimmt noch wieder erneut melden?; einstweilen nochmals recht herzlichen Dank und auch Dir weiterhin alles Gute.
Gruß - Wolfgang
Anzeige
AW: Danke Gerd, läuft und funktioniert.
09.10.2006 21:39:10
P@ulchen
Hallo Wolfgang,
wenn es um viele Zellen geht, die Du vergleichen möchtest, empfehle ich Dir den nachstehenden Code, er ist um einiges schneller als die bisher geposteten Lösungen:


Sub Einzelne_auflisten()
Dim ALetzte As Long, BLetzte As Long, iCounter As Long, xCounter As Long
Dim xZelle As Range
ALetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(-4162).Row, Rows.Count)
BLetzte = IIf(IsEmpty(Cells(Rows.Count, 2)), Cells(Rows.Count, 2).End(-4162).Row, Rows.Count)
For iCounter = 1 To ALetzte
    Set xZelle = Columns(2).Find(what:=Cells(iCounter, 1), Lookat:=xlWhole)
    If Not xZelle Is Nothing Then
        xCounter = xCounter + 1
        Cells(xCounter, 3) = Cells(iCounter, 1)
    End If
Next iCounter
For iCounter = 1 To BLetzte
    Set xZelle = Columns(1).Find(what:=Cells(iCounter, 2), Lookat:=xlWhole)
    If Not xZelle Is Nothing Then
        xCounter = xCounter + 1
        Cells(xCounter, 3) = Cells(iCounter, 2)
    End If
Next iCounter
End Sub


Gruß aus Leipzig
P@ulchen
www.excel-werkstatt.de

Anzeige
Hallo P@ulchen
10.10.2006 06:46:28
Wolfgang
Hallo P@ulchen,
auch Dir herzlichen Dank für Deine Rückmeldung; Ich habe Deinen Code getestet. Er läuft und funktioniert, allerdings filtert er die Daten, die doppelt vorkommen und speichert sie in Spalte C. - Mir ging es um die Daten, die entweder nur in Spalte A oder Spalte B, also nicht in beiden Spalten stehen. Wäre es denkbar, Deinen Code entsprechend zu ändern? - Wenn ja, was müßte ich da machen ? - Schon jetzt Danke für die Rückmeldung.
Gruß - Wolfgang
AW: Hallo P@ulchen
10.10.2006 07:54:43
P@ulchen
Hallo Wolfgang,
sorry, mein Fehler...
Ändere einfach die beiden Codezeilen
If Not xZelle Is Nothing Then
in
If xZelle Is Nothing Then
Gruß aus Leipzig
P@ulchen
www.excel-werkstatt.de

Anzeige
Danke P@ulchen
10.10.2006 21:25:10
Wolfgang
Hallo P@ulchen,
erneuten Dank für Deine Rückmeldung; Habe den Code umgestellt, er rennt nun auch wunderbar. Die Schnelligkeit kann ich dabei noch nicht beurteilen, habe jetzt zuhause mit wenig Zahlen gearbeitet. Sollte ich noch Fragen haben, werde ich mich erneut melden. Einstweilen nochmals vielen herzlichen Dank Dir und Allen, die sich mit meiner Fragestellung befaßt und mir erneut gute Hilfestellung geleistet haben.
Gruß - Wolfgang

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige