Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1572to1576
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
Inhaltsverzeichnis

Vergleich von Spalten

Vergleich von Spalten
18.08.2017 07:44:53
Spalten
Guten Morgen,
in einem alten Beitrag von 2002 https://www.herber.de/forum/archiv/180to184/180731_Spalten_mit_38000_Nummern_vergleichen_A_und_C.html habe ich ein Marko gefunden, welches ich an meine Bedürfnisse angepasst habe:
Sub Vergleich_starten()
'Spalte A wird nach Werten aus Spalte C durchsucht.
'Wenn vorhanden, wird die Zeilennummer neben den C-Wert in Spalte E geschrieben.
Application.ScreenUpdating = False
On Error Resume Next
Z1 = Range("c1").End(xlDown).Row
For S = 1 To Z1
Zeile = 0
Suchwert = Cells(S, 3).Value
Zeile = Columns("A:A").Find(What:=Suchwert, lookat:=xlWhole).Row
If Zeile  0 Then Cells(S, 5) = "in alter Liste (Spalte A) in Zeile " & Zeile & "  _
vorhanden"
Next S
Application.ScreenUpdating = True
End Sub
Wenn jetzt in Spalte A ein Wert doppelt vorkommt und in C nur einfach, wird nur der 1. gleiche Wert erkannt und in E ausgegeben.
Kann man hier noch eine Art Schleife einbauen, dass alle gleichen vorkommenden Werte in A berücksichtigt und in E ausgegeben werden?
Beispiel: https://www.herber.de/bbs/user/115545.xlsm
Grüße - Erwin

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

Betreff
Datum
Anwender
Anzeige
AW: Argumente
18.08.2017 08:17:05
Fennek
Hallo Erwin,
es gibt mehrere mögliche Ansätze und Standard ist es, den einfachsten zu wählen:
- =Zählenwenn(): Damit kann man sehr einfach bestimmen, welche Nr. nicht, einfach mehrfach in der neuen Liste vorkommt.
- mehrfach Treffer kann man mit Formeln kkleinste, kgrößte und aggregat ermitteln
- in VBA kann die vorhanden "Range.Find"-Methode um ".Findnext" erweitert werden
- Ansätze mit "Dictionary" können bei sehr großen Datensätzen schneller sein
Der erste Schritt wäre es je nach den Umstände die geeigneteste Methode zu wählen
mfg
AW: Argumente
18.08.2017 08:46:23
Erwin
Hallo Fennek,
danke für die ausführlichen Informationen.
Auf dem anderen Tabellenblatt "Formel" habe ich schon eine "zählenwenn" Lösung.
Ich wollte die Datei später noch mit bedingter Formatierung auf einem weiteren Tabellenblatt ergänzen, um mehrere Möglichkeiten für Vergleiche zu haben :)
Hier ging es mir wirklich um den VBA Code, der noch etwas ergänzt werden sollte, sodass mehrfach vorkommende Werte in A auch in E gelistet werden.
Danke schon mal, der sich die Mühe macht.
Grüße - Erwin
Anzeige
AW: Argumente
18.08.2017 23:41:16
Christian
Hi Erwin,
hier eine Variante, die dir alle Trefferadressen in Spalte E
schreibt. Lässt sich bestimmt noch effizienter (schneller) gestalten...
VG, Christian
Sub ReportAddressToColumnE()
Dim dict As Dictionary
Set dict = New Scripting.Dictionary
Dim e As Variant
Dim i As Long
' Einlesen auf Tabellenblatt3 >> Anzupassen
With ThisWorkbook.Worksheets("Tabelle3")
Dim oRow As Variant
' Es wird angenommen, dass A - E eine zusammenhängender Datebereich mit Überschrift
' und ohne Leerzeilen/-spalten ist
' Dictionary mit Adressen und Werten der Spalte A laden
For Each oRow In .Cells(1, 1).CurrentRegion.Rows
dict.Add oRow.Cells(1, 1).Address, oRow.Cells(1, 1).Value
Next oRow
Dim arrList As Object
Set arrList = CreateObject("System.Collections.ArrayList")
' Schleife über Spalte C (Suchwerte die in Spalte A gefunden werden sollen)
For Each oRow In .Cells(1, 1).CurrentRegion.Rows
Dim SeachValue As String
SearchValue = oRow.Cells(1, 3).Value
i = 0
' SearchValue in der Items-Collection suchen um Index zu ermitteln
For Each e In dict.Items
' Wenn Treffer, dann mit dem Item-Index den entsprechenden Schlüssel
' aus der Keys-Collection via Funktion auslesen. Ergebnisse in einem
' ArrayList-Objekt speichern.
If SearchValue = e Then
arrList.Add "Wert " & e & " steht in der alten Liste in Zelle " & _
getKey(dict.keys, i) & " vorhanden."
End If
i = i + 1
Next e
Next oRow
' Werte der ArrayList im Block in Spalte E schreiben. Ab Zeile 2
.Range(.Cells(1, 5).Offset(1), .Cells(arrList.Count, 5).Offset(1)) _
= Application.Transpose(arrList.toarray)
End With
End Sub
Private Function getKey(x As Variant, lngIndex As Long) As String
getKey = x(lngIndex)
End Function

Anzeige
AW: Argumente
19.08.2017 20:16:23
Erwin
Hallo Christian,
ich war heute den ganzen Tag unterwegs, deshalb erst jetzt Danke für die Mühe und den Code.
Aber gleich in der 2. Zeile geht es bei mir nicht weiter
" Dim dict As Dictionary
Set dict = New Scripting.Dictionary"
Es kommt der Fehler beim Kompilieren "Benutzerdefinierter Typ nicht definiert"
Da komme ich nicht weiter.
Kannst du dir das bitte nochmal ansehen oder am besten eine funktionierende Datei hochladen?
Danke - Erwin
AW: Argumente
19.08.2017 20:45:14
Christian
Hallo Erwin,
du hast die Wahl die Sache zum Laufen zu bringen
a) im Vba-Editor im Menü Extras > Verweise den Verweis auf die Bibliothek "Microsoft Scripting Runtime"
checken
oder
b)
die ersten beiden Zeilen nach dem Sub wie folgt zu ändern:
    Dim dict As Object
Set dict = CreateObject("scripting.dictionary")
Viele Grüße
Christian
Anzeige
AW: Argumente
19.08.2017 21:03:53
Erwin
Hallo Christian,
ich habe die Methode b, genommen und der Code läuft ;)
Jetzt habe ich die Liste ein wenig geändert, aber die grün markierten Zahlen werden nicht aufgelistet.
Leider kann ich es nicht herausfinden, wo es hakt.
https://www.herber.de/bbs/user/115592.xlsm
Grüße - Erwin
AW: Argumente
19.08.2017 21:24:13
Christian
Hi,
ich schaue es mir mal an....
AW: Argumente
19.08.2017 22:14:10
Christian
Hallo Erwin,
das Problem ist die Formatierung! Einmal sind die Zahlen als Zahl formatiert,
einmal als Text. Je nach Einstellung bekommst du dass ja in deiner Tabelle
auch angezeigt, das ein numerischer Wert als Text formatiert ist.
Diesen Umstand hatte ich nicht berücksichtigt. Ist jetzt geändert.
Die Vergleichspaare werden jetzt jeweils als Zeichenkette miteinander
verglichen. Des Weiteren habe ich das Makro noch so geändert, das keine Duplikate
mehr ausgegben werden wenn ein Suchwert mehrfach vorkommt.
Hier die Datei: https://www.herber.de/bbs/user/115593.xlsm
VG, Christian
Anzeige
AW: Argumente
19.08.2017 23:03:14
Erwin
Hallo Christian,
jetzt passt es super, nochmals vielen Dank für deine Mühe und Unterstützung.
LG Erwin

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige