Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1692to1696
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
doppelte finden über vba
15.05.2019 06:42:26
Tino
Guten morgen,
wir kämpfen seit gestern über ein VBA Code. In der Spalte A ab der zeile 5 stehen unsere Betriebskunden. diese können aber mehrmals vorkommen.
In der Spalte G steht wann der Betrieb geöffnet wurde als Datum.
Jetzt wollen wir eine Abfrage machen und, wenn der Betriebskunde doppelt drin steht mit verschiedenen Datum soll eine Meldung kommen " Betriebskunde ( welcher Kunde anzeigen lassen ) gibt es schon zwei mal mit verschiedene Datums"
Wir wollen nämlich die Liste mal prüfen.
Wäre super cool wenn uns jemand helfen könnte.
Dankeschön
Tino

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: doppelte finden über vba
15.05.2019 06:45:33
Werner
Hallo Tino,
warum anzeigen? Schmeißt doch die doppelten Datensätze einfach raus.
Daten - Datentools - Duplikate entfernen
Gruß Werner
AW: doppelte finden über vba
15.05.2019 10:44:02
Tino
Hallo Werner,
ne das darf nicht passieren. Sonst hätte ich natürlich Duplikate entfernt.
Weil wir diese dann manuell ändern müssen die doppelt sind wenn ein andere Datum drin steht.
AW: doppelte finden über vba
15.05.2019 11:15:15
Torsten
Hallo Tino,
zeig doch mal, was du schon hast als Beispieldatei. Ist dann einfacher, dir zu helfen.
Gruss Torsten
AW: doppelte finden über vba
15.05.2019 11:40:36
peterk
Hallo
Versuch es über Dictionary zu lösen
AW: doppelte finden über vba
15.05.2019 12:09:39
peterk
Hallo
Ein kleines Beispiel

Option Explicit

Public Sub KundenVgl()

    Dim maxCells As Long, i As Long
    Dim objDictionary As Object

    With Worksheets("Tabelle1")    'Tabellenname anpassen 
        maxCells = .Cells(.Rows.Count, 1).End(xlUp).Row

        Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
        For i = 5 To maxCells

            If objDictionary.Exists(Key:=.Cells(i, 1).Text) Then
                If objDictionary(.Cells(i, 1).Text) = .Cells(i, 7).Text Then
                    MsgBox "Duplicate gefunden, Datum gleich " & _
                    .Cells(i, 1).Text & "/" & .Cells(i, 7).Text & "/" & _
                    objDictionary(.Cells(i, 1).Text)
                Else
                    MsgBox "Duplicate gefunden, Datum ungleich " & _
                    .Cells(i, 1).Text & "/" & .Cells(i, 7).Text & "/" & _
                    objDictionary(.Cells(i, 1).Text)
                End If

            Else
                objDictionary.Add Key:=.Cells(i, 1).Text, Item:=.Cells(i, 7).Text
            End If

        Next i
    End With

    Set objDictionary = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0



Anzeige
AW: doppelte finden über vba
15.05.2019 13:09:23
Tino
Hey Peter,
erkläre mir mal was Dictionary ist
Danke :-)
AW: doppelte finden über vba
15.05.2019 11:57:46
Daniel
Hi
ich würde erstmal nach Spalte A sortieren, so dass gleiche Betriebskunden direkt untereinander stehen.
dann kannst du dir mit der Bedingten Formatierung alle Duplikate einfärben lassen (bei "Regeln zum hervorheben von Zellen")
und dann mit dem Autofilter nach den gefärbten Zellen filtern (Filtern nach Farbe ist möglich).
dann hat du eine List mit den infrage kommenden Zeilen und kannst diese bearbeiten.
Gruß Daniel
AW: doppelte finden über vba
15.05.2019 13:08:39
Tino
Hallo Peter,
Danke für deine Hilfe, ich lerne gerade VBA deswegen übe ich :-)
Aber er müsste es so zeigen:
hier muss jetzt die Meldung kommen " Kunde 8987777 doppelt mit Datum 19.05.2019 und 01.01.2018
SpalteA 89877777----SpalteG 19.05.2019
SpalteA 89877777----SpalteG 19.05.2019
SpalteA 89877777----SpalteG 01.01.2018
SpalteA 89877777----SpalteG 19.05.2019
SpalteA 89877777----SpalteG 19.05.2019
hier darf gar nichts kommen, weil es so okay ist, da kein anderes Datum hinterlegt ist.
SpalteA 97125851----SpalteG 19.05.2019
SpalteA 97125851----SpalteG 19.05.2019
SpalteA 97125851----SpalteG 19.05.2019
Es reicht wenn die Meldung einmal pro Kunde kommt, da der Kunde teilweise 100mal in der Spalte vorkommt.
Danke dir Peter
Anzeige
AW: doppelte finden über vba
15.05.2019 13:22:04
peterk
Hallo Tino
Hat Du meinen Code ausprobiert? Ein Dictionary ist eine Liste bestehend aus einem eindeutigen Key und einem Wert. Da der Key nur einmal vorkommen darf, ist damit das aufsuchen von Duplicaten relativ einfach.
Wenn Du die MsgBox bei Gleichheit auskommentierst sollte Dein gewünschtes Ergebnis rauskommen.
AW: doppelte finden über vba
15.05.2019 13:40:24
Daniel
Hi
mit Dictionary ggf so:
du bekommst eine Liste mit allen Kunden, die mit mehr als einem Datum in der Liste stehen:
Sub test()
Dim arrK, arrD
Dim dicK As Object, dicD As Object
Dim z As Long
Dim KD
Dim Erg As String
arrK = Range(Cells(5, 1), Cells(5, 1).End(xlDown)).Value
arrD = Range(Cells(5, 7), Cells(5, 7).End(xlDown)).Value
Set dicK = CreateObject("Scripting.dictionary")
Set dicD = CreateObject("Scripting.dictionary")
For z = 1 To UBound(arrK, 1)
KD = arrK(z, 1)
If dicK.exists(KD) Then
Set dicD = dicK(KD)
Else
Set dicD = CreateObject("Scripting.dictionary")
End If
dicD(arrD(z, 1)) = dicD(arrD(z, 1)) + 1
Set dicK(KD) = dicD
Next
For Each KD In dicK.keys
If dicK(KD).Count > 1 Then Erg = Erg & vbLf & KD
Next
If Erg = "" Then
MsgBox "alles ok"
Else
MsgBox "folgende Kunden sind zu prüfen:" & Erg
End If
End Sub
ein Dictionary ist im Prinzip ein eindimensionales Array, bei dem der Index durch einen beliebigen Wert gebildet wird.
man muss sich hier auch nicht um die Dimensionierung oder ähnliches kümmern, weil jeder Eintrag bei erstmaliger Verwendung automatisch neu angelegt wird.
mit Dic.Keys bekommst du die Liste der verwendeten Indizes als eindimensionales Array ausgegeben.
Gruß Daniel
Anzeige
AW: doppelte finden über vba
16.05.2019 06:54:05
Tino
Super danke Daniel.... :-)
auch Danke an Peter :-)

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige