jhaustein

Excel - Per VBA eindeutige Werte einer Variablen zuweisen

Hallo Gemeinschaft,

habe folgende Tabelle - die hat natürlich noch mehrere Spalten und Zeilen - aber nur zum Grundverständnis

ich möchte, wenn ich so eine Tabelle habe eine Variable
Attributneu = ohne, Kragen, KragenBrust haben

also das in der Tabelle per VBA die doppelten Einträge nicht in die Variable kommen sondern nur einmal
Attribut Name 3
ohne
ohne
ohne
ohne
ohne
ohne
ohne
Kragen
Kragen
Kragen
Kragen
Kragen
Kragen
Kragen
Kragen Brust
Kragen Brust
Kragen Brust
Kragen Brust
Kragen Brust
Kragen Brust
Kragen Brust
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 1774930905

Url: https://administrator.de/forum/excel-per-vba-eindeutige-werte-einer-variablen-zuweisen-1774930905.html

Ausgedruckt am: 29.06.2025 um 04:06 Uhr

colinardo
Lösung colinardo 29.01.2022 aktualisiert um 15:45:44 Uhr
Goto Top
Stichwort Unique column values liefert dir diesbezüglich etliche Ergebnisse.

Such dir was aus

Neuere Excel-Versionen (WorksheetFunction.Unique() Methode)
Sub UniqueValues1()
    Dim uniques As Variant, i As Long
    uniques = WorksheetFunction.Unique(Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row))  
    For i = 1 To UBound(uniques)
        MsgBox uniques(i, 1)
    Next
End Sub
Andere Varianten
Sub UniqueValues2()
    Dim dic As Object, cell as Range, k as Variant
    With ActiveSheet
        Set dic = CreateObject("Scripting.Dictionary")  
        For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            If Not dic.Exists(cell.Value) Then dic.Add cell.Value, ""  
        Next
        For Each k In dic.Keys
            MsgBox k
        Next
    End With
End Sub
Sub UniqueValues3()
    Dim dic As Object, arr() As String, cnt As Long, cell as Range, i as long
    cnt = 0
    With ActiveSheet
        Set dic = CreateObject("Scripting.Dictionary")  
        For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            If Not dic.Exists(cell.Value) Then
                dic.Add cell.Value, ""  
                ReDim Preserve arr(cnt)
                arr(cnt) = cell.Value
                cnt = cnt + 1
            End If
            
        Next
        For i = 0 To UBound(arr)
            MsgBox arr(i)
        Next
    End With
End Sub
Oder zum direkten Entfernen der Duplikate in der Tabelle
ActiveSheet.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes  
usw.
hier noch mehr Input
https://stackoverflow.com/questions/64614210/array-of-unique-values-in-a ...

G. @colinardo
jhaustein
jhaustein 30.01.2022 um 11:41:18 Uhr
Goto Top
Lieben Dank - wie würdest du nun eine Variable erstellen, in der diese Werte mit Komma getrennt stehen
colinardo
colinardo 30.01.2022 aktualisiert um 13:28:04 Uhr
Goto Top
Zitat von @jhaustein:

Lieben Dank - wie würdest du nun eine Variable erstellen, in der diese Werte mit Komma getrennt stehen

Arrays kannst du ganz einfach mit der Join Methode als String mit Delimiter zusammenfügen.
strResult = Join(arr,",")  

Oder auf die herkömmliche ganz primitive Art über FOR-Loop deinen String aneinander reihen.
Dim strResult as String
For i = 0 To UBound(arr)
       strResult = strResult & arr(i) & ","  
Next
strResult = Left(strResult,Len(strResult)-1)
Wenn du eh kein Array brauchst kannst du das letzte Verfahren auch direkt oben in den Methoden anwenden und auf die Arrays verzichten.
jhaustein
jhaustein 31.01.2022 um 08:43:28 Uhr
Goto Top
prima- lieben DAnk
jhaustein
jhaustein 31.01.2022 um 08:44:29 Uhr
Goto Top
hatte noch eine Frage

zu diesem code
Sub UniqueValues1()
    Dim uniques As Variant, i As Long
    uniques = WorksheetFunction.Unique(Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row))  
    For i = 1 To UBound(uniques)
        MsgBox uniques(i, 1)
    Next
End Sub

habe office 2016 - damit geht es noch nicht oder ?
colinardo
Lösung colinardo 31.01.2022 um 10:34:53 Uhr
Goto Top
Zitat von @jhaustein:

habe office 2016 - damit geht es noch nicht oder ?
Nein, erst ab Office 365, Office 2021
jhaustein
jhaustein 31.01.2022 um 11:11:15 Uhr
Goto Top
danke