Ich versuche, eine Spalte von Zellen von einer zu durchsuchenFinden Sie alle eindeutigen Werte und fügen Sie diese Werte dann in eine Spalte in einem anderen Arbeitsblatt ein. Bisher habe ich Code, der ein Wörterbuch erstellt, die gewünschte Spalte durchsucht und alle eindeutigen Werte in dieser Spalte auswählt.
Function UniqueRequest() As Long
myReqIDCol = ColSearch("id")
"Creates a dictionary filled with each unique value in the "TaskIDList" column and counts them to determine how many unique keys are in the document
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To LastRow
tmp = Cells(i, myReqIDCol).Value
If Not dic.exists(tmp) Then
dic.Add tmp, 1
End If
Next i
End Function
Ich habe auch eine Funktion, die das Blatt auswählt, in das die Zellen eingefügt werden sollen, und es so einrichtet, dass Werte in jede leere Zelle in der gewünschten Spalte eingefügt werden.
Function ReqSheet(input_column As Integer, input_value As Long) As Long
Dim rv As Long
rv = 1
Sheets("Request Results").Activate
Do While Cells(rv, input_column).Value <> ""
rv = rv + 1
Loop
Cells(rv, input_column).Value = input_value
ReqSheet = input_value
End Function
Das Problem, das ich habe, ist, dass ich nicht ganz sicher binwie man diese beiden in Beziehung setzt. Ich möchte die ReqSheet-Funktion mit jedem Wert des Wörterbuchs aufrufen, aber alles, was ich versucht habe, ist fehlgeschlagen. Wenn dies eine einfache Lösung ist, kann ich leider keine gute Lösung aus dem Internet finden und bin ziemlich neu zu VBA.
Antworten:
1 für die Antwort № 1Verwenden Sie diesen Code und ändern Sie die Spalte in das, was Sie verwenden möchten.
Function UniqueRequest() As Long
myReqIDCol = ColSearch("id")
"Creates a dictionary filled with each unique value in the "TaskIDList" column and counts them to determine how many unique keys are in the document
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To LastRow
tmp = Cells(i, myReqIDCol).Value
If Not dic.exists(tmp) Then
dic.Add tmp, 1
End If
Next i
For Each value in dic.keys
ReqSheet(4,value) "I have taken column 4,you can change it to any no you want.
End Function
3 für die Antwort № 2
Das Gute an Wörterbüchern ist, dass Sie ihre Werte und Schlüssel in ein Array ziehen und alles in einem Bereich ohne Schleifen schreiben können.
Sub GetUnique()
Dim dc As Scripting.Dictionary
Dim rCell As Range
Set dc = New Scripting.Dictionary
For Each rCell In Selection.Cells
If Not dc.Exists(rCell.Value) Then
dc.Add rCell.Value, rCell.Value
End If
Next rCell
ThisWorkbook.Worksheets("Request Results").Range("A1").Resize(UBound(dc.Keys), 1).Value = _
Application.Transpose(dc.Keys)
End Sub
1 für die Antwort № 3
Etwas in dieser Richtung sollte funktionieren. Sie müssen nur das ersetzen input_column
mit der richtigen Variable oder Methode, um die Spalte zu finden.
Function UniqueRequest() As Long
myReqIDCol = ColSearch("id")
"Creates a dictionary filled with each unique value in the "TaskIDList" column and counts them to determine how many unique keys are in the document
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To LastRow
tmp = Cells(i, myReqIDCol).Value
If Not dic.exists(tmp) Then
dic.Add tmp, 1
End If
Next i
For each _Value in dic
ReqSheet(input_column, _Value)
Next
End Function