Hallo,
ich hab mich mal drüber her gemacht und es so angelegt, dass alle Doppelungen ausgegeben werden.
Mehrere Spalten zu durchlaufen habe ich, da MultiSelect in der ListBox nicht verwendet wird außer Acht gelassen.
Die Übergabe in die Prozedur erfolgt trotzdem als Array, falls mal der ursprüngliche Weg wieder benötigt wird.
Im Userform: frmDoppelte_Markieren
Private Sub btnMark_Click()
Dim ar() As Variant
Dim i As Integer
Dim n As Integer
n = -1
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
n = n + 1
ReDim Preserve ar(n)
ar(n) = i + 1
End If
Next
End With
If n < 0 Then Exit Sub
'Call xlph_Doppelte_Markieren(Bereich, ar())
Call MehrfachvorkommenMarkieren(Bereich, ar())
End Sub
und in ein allgemeines Modul:
Sub MehrfachvorkommenMarkieren(Bereich As Range, Spalte As Variant)
Dim objDic As Object
Dim arrSp(), arrDic, i&, j&, tmp$
Set objDic = CreateObject("Scripting.Dictionary")
Bereich.Parent.Cells.Interior.ColorIndex = xlColorIndexNone
arrSp = Bereich.Columns(Spalte(0)).Value
For i = 2 To UBound(arrSp)
objDic(arrSp(i, 1)) = 0
Next i
arrDic = objDic.keys
With Bereich
For i = 0 To UBound(arrDic)
If WorksheetFunction.CountIf(.Columns(Spalte(0)), arrDic(i)) > 1 Then
For j = 2 To .Rows.Count
If arrDic(i) = .Cells(j, Spalte(0)) Then
If InStr(1, tmp, "A" & j, vbTextCompare) = 0 Then
If Len(tmp) < 256 Then
tmp = tmp & ",A" & j + 2
Intersect(Bereich, Tabelle1.Range(Mid(tmp, 2)).EntireRow).Interior.ColorIndex = 4
tmp = ""
End If
End If
End If
Next j
End If
Next i
End With
End Sub
Es ist nicht so speicherschonend wie von xlph.
Der kanns einfach besser.
Gruß Uwe
|