jhaustein
Goto Top

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

Content-Key: 1774930905

Url: https://administrator.de/contentid/1774930905

Printed on: April 25, 2024 at 04:04 o'clock

Member: colinardo
Solution colinardo Jan 29, 2022 updated at 14:45:44 (UTC)
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
Member: jhaustein
jhaustein Jan 30, 2022 at 10:41:18 (UTC)
Goto Top
Lieben Dank - wie würdest du nun eine Variable erstellen, in der diese Werte mit Komma getrennt stehen
Member: colinardo
colinardo Jan 30, 2022 updated at 12:28:04 (UTC)
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.
Member: jhaustein
jhaustein Jan 31, 2022 at 07:43:28 (UTC)
Goto Top
prima- lieben DAnk
Member: jhaustein
jhaustein Jan 31, 2022 at 07:44:29 (UTC)
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 ?
Member: colinardo
Solution colinardo Jan 31, 2022 at 09:34:53 (UTC)
Goto Top
Zitat von @jhaustein:

habe office 2016 - damit geht es noch nicht oder ?
Nein, erst ab Office 365, Office 2021
Member: jhaustein
jhaustein Jan 31, 2022 at 10:11:15 (UTC)
Goto Top
danke