Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Doppelte Werte in Array

Doppelte Werte in Array
20.08.2015 11:17:12
Tim
Hallo,
ich habe in Spalte A ca 250 Zahlenwerte, ich möchte die Doppelten Werte in ein Array schreiben und mit Angabe der Zeilenangabe in einer Msgbox ausgeben. Ich bin mir bewusst dass die Bedingte Formatierung das im Excel toll gelöst hat, möchte diesen Teil aber gerne in Vba realisieren. Der Makrorecorder spuckt leider mir einen völlig unverständlchen Code aus.
Bitte um Hilfe !

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Doppelte Werte in Array
20.08.2015 13:54:07
JoWE
Hallo Tim,
lies Dir mal dies hier durch: http://www.vb-homepage.de/tipps/tip259.htm
Ist allerdings vielleicht recht "sportlich" und Du müsstest es auf Deine Bedürfnisse anpassen.
Viel Erfolg
Jochen

AW: Doppelte Werte in Array
20.08.2015 16:23:49
Jack_d
Hallo Jochen,
Ich würde es über ein Dictionary lösen. Das ist was den Abgleich angeht ganz komfortabel.
Hier mal ein Codezum probieren
(Werte in Spalte & Trägt die Doppelten mit Zeilenbezeichnung in Spalte C )
Grüße

Option Explicit
Sub DopIdent()
Dim A As Variant
Dim B As Variant
Dim Ai As Long
Dim Zeile As Long
Dim NEU As String
Dim ODict1 As Object
With Worksheets("Tabelle2")
Set ODict1 = CreateObject("scripting.dictionary")
A = .Range(.Cells(1, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 1))
For Ai = 1 To UBound(A)
If ODict1.exists(A(Ai, 1)) Then
NEU = NEU & A(Ai, 1) & " Zeile " & Ai & "-"
Else
ODict1(A(Ai, 1)) = Ai
End If
Next Ai
B = Split(NEU, "-")
For Zeile = 1 To UBound(B)
.Cells(Zeile, 3) = B(Zeile - 1)
Next Zeile
Set ODict1 = Nothing
A = ""
B = ""
End With
End Sub

Anzeige
AW: Doppelte Werte in Array
20.08.2015 18:57:46
JoWE
HiJack :-)
ich war gar nicht der Fragesteller - vielleicht liest Tim ja doch irgendwann mal seine Antworten.
Gruß
Jochen

AW: Doppelte Werte in Array
20.08.2015 23:12:52
Jack_D
Hallo jochen,
Ja da hab ich wohl was übersprungen :-D
Man möge es mir vergeben :-)
Grüße

AW: Doppelte Werte in Array
20.08.2015 19:22:00
Daniel
Hi
bei kaum VBA-Kenntnisse vielleicht so:
1. sicherer in einer Hilfsspalte die aktuelle Zeilennummer.
schreibe hierzu in einer Hilfsspalte in alle Zellen bis zum Tabellenende die Formel =Zeile()
kopiere dann diese Spalte und füge sie an gleicher Stelle als wert ein.
2. lasse über die Bedingte Formatierung die doppelten farblich markieren
3. filtere in der Spalte mit dem Autofilter nach der Zellfarbe, der autofilter kann die Farben der bedingten Formatierung erkennen.
4. kopiere jetzt die Spalte A und die Hilfsspalte mit den fixierten Zeilennummern in ein neues Blatt.
die ausgeblendeten Zeilen werden nicht mit kopiert, so dass du in dem neuen Blatt nur die doppelten Werte hast
5. soritere in dem neuen Blatt die Liste nach den Werten, dann siest du sofort, welcher Wert sich wie oft wiederholt und in welchen Zeilen die Duplikate stehen.
das geht auch ohne VBA recht schnell, wenn du es mit VBA brauchst, sollte sich diese Methode relativ gut mit dem Recorder aufzeichnen lassen.
gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Doppelte Werte in einem Array mit VBA entfernen


Schritt-für-Schritt-Anleitung

Um doppelte Werte in einem Array mit VBA zu entfernen, kannst du die folgende Schritt-für-Schritt-Anleitung nutzen:

  1. Öffne Excel und erstelle ein neues VBA-Modul, indem du Alt + F11 drückst, dann auf Einfügen > Modul klickst.

  2. Füge den folgenden Code in das Modul ein:

    Option Explicit
    Sub DopIdent()
       Dim A As Variant
       Dim B As Variant
       Dim Ai As Long
       Dim Zeile As Long
       Dim NEU As String
       Dim ODict1 As Object
       With Worksheets("Tabelle2")
           Set ODict1 = CreateObject("scripting.dictionary")
           A = .Range(.Cells(1, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 1))
           For Ai = 1 To UBound(A)
               If ODict1.exists(A(Ai, 1)) Then
                   NEU = NEU & A(Ai, 1) & " Zeile " & Ai & "-"
               Else
                   ODict1(A(Ai, 1)) = Ai
               End If
           Next Ai
           B = Split(NEU, "-")
           For Zeile = 1 To UBound(B)
               .Cells(Zeile, 3) = B(Zeile - 1)
           Next Zeile
           Set ODict1 = Nothing
           A = ""
           B = ""
       End With
    End Sub
  3. Führe das Makro aus, um die doppelten Werte zu finden und in Spalte C auszugeben.


Häufige Fehler und Lösungen

  • Fehler: "Objektvariable nicht festgelegt"
    Ursache: Überprüfe, ob du auf das richtige Arbeitsblatt zugreifst. Stelle sicher, dass "Tabelle2" existiert oder passe den Namen an.

  • Fehler: Kein Wert wird in Spalte C ausgegeben
    Ursache: Überprüfe, ob in Spalte A wirklich doppelte Werte vorhanden sind und ob der Bereich korrekt definiert ist.


Alternative Methoden

Wenn du keine VBA-Lösungen nutzen möchtest, kannst du auch die folgenden Methoden verwenden:

  1. Bedingte Formatierung: Markiere die doppelten Werte in Spalte A, indem du die bedingte Formatierung einstellst.
  2. Hilfsspalte nutzen: Schreibe in einer Hilfsspalte die Formel =ZÄHLENWENN(A:A;A1)>1, um doppelte Einträge zu finden.
  3. Filter nach Zellfarbe: Filtere die Spalte nach der Zellfarbe der bedingten Formatierung, um die doppelten Werte anzuzeigen.

Praktische Beispiele

Angenommen, du hast folgende Werte in Spalte A:

1
2
3
2
4
3
5

Nach Ausführung des VBA-Skripts würden in Spalte C die Ausgaben erscheinen:

2 Zeile 4
3 Zeile 6

Das Skript hat erfolgreich die doppelten Werte und deren Zeilenangaben extrahiert.


Tipps für Profis

  • Nutze Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
  • Experimentiere mit Dictionaries, um die Effizienz bei der Suche nach doppelten Werten zu erhöhen. Diese Methode ist schneller, wenn du mit großen Datenmengen arbeitest.

FAQ: Häufige Fragen

1. Wie kann ich das Skript anpassen, um andere Datenquellen zu verwenden?
Du kannst den Bereich in der Zeile A = .Range(...) ändern, um auf andere Spalten oder Blätter zuzugreifen.

2. Kann ich das gleiche Skript verwenden, um doppelte Werte in mehreren Spalten zu finden?
Ja, du kannst das Skript anpassen, indem du mehrere Schleifen hinzufügst, um durch die gewünschten Spalten zu iterieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige