我这里有数据,我想获取 C 列 = 项目 ID 的唯一值。
Date || Project ID || Implementation Area || Start Time || End Time || Status
8/28/2023 || 1145544 || Arizona || 8:00:03 AM || 9:15:17 AM || For Approval 1
8/28/2023 || 1157788 || Arizona || 9:15:20 AM || 12:00:19 PM || For Approval 1
8/28/2023 ||LUNCH BREAK || || 12:00:18 PM || 1:00:00 PM || LUNCH BREAK
8/29/2023 || 1145544 || Arizona || 1:00:01 PM || 3:00:00 PM || For Approval 2
8/29/2023 || 1145544 || Arizona || 3:30:07 PM || 3:40:40 PM || COMPLETED
8/30/2023 || 1157788 || Arizona || 3:41:00 PM || 3:50:00 PM || For Approval 2
9/1/2023 || 1157788 || Arizona || 4:00:00 PM || 4:30:45 PM || COMPLETED
9/2/2023 || 1233343 || New York || 9:05:17 AM || 11:30:20 AM || For Approval 1
9/2/2023 ||LUNCH BREAK || || 12:00:00 AM || 1:00:00 PM || LUNCH BREAK
9/2/2023 || 1233343 || New York || 1:45:01 PM || 2:45:30 PM || For Approval 2
9/2/2023 || 1233343 || New York || 3:00:00 AM || 3:22:00 AM || COMPLETED
9/2/2023 || 1422457 || Louisana || 3:50:00 PM || 4:12:00 PM || For Approval 1
9/3/2023 || 1422457 || Louisana || 10:18:03 AM || 11:15:17 AM || For Approval 2
9/4/2023 || 1422457 || Louisana || 4:15:20 PM || 4:35:19 PM || COMPLETED
现在我获取唯一值的代码是这样的:
Private Sub UserForm_Initialize()
Dim UniqueList() As String
Dim x As Long
Dim Rng1 As Range
Dim c As Range
Dim Unique As Boolean
Dim y As Long
Set Rng1 = Sheets("Sheet1").Range("C:C")
y = 1
ReDim UniqueList(1 To Rng1.Rows.Count)
For Each c In Rng1
If Not c.Value = vbNullString Then
Unique = True
For x = 1 To y
If UniqueList(x) = c.Text Then
Unique = False
End If
Next
If Unique Then
y = y + 1
Me.ListBox1.AddItem (c.Text)
UniqueList(y) = c.Text
End If
End If
Next
End Sub
这会返回 C 列的唯一值。
Project ID
1145544
1157788
LUNCH BREAK
1233343
1422457
在我提供的数据中,请注意还有其他列。在列表框中,我想要实现的是这个(不再午餐):
Date Project ID Status
8/29/2023 1145544 COMPLETED
9/1/2023 1157788 COMPLETED
9/2/2023 1233343 COMPLETED
9/4/2023 1422457 COMPLETED
提前致谢。
请尝试
Private Sub UserForm_Initialize()
Dim Dic As Object, i, sKey, arr, aList
Set Dic = CreateObject("scripting.dictionary")
With Sheets("Sheet1")
arr = .Range(.[g2], .Cells(.Rows.Count, 2).End(xlUp))
For i = 1 To UBound(arr)
sKey = arr(i, 2)
If Not UCase(sKey) = "LUNCH BREAK " Then
If Dic.exists(sKey) Then
If arr(i, 1) >= Dic(sKey)(0) Then
Dic(sKey) = Array(arr(i, 1), arr(i, 6))
End If
Else
Dic(sKey) = Array(arr(i, 1), arr(i, 6))
End If
End If
Next
End With
ReDim aList(Dic.Count, 2)
aList(0, 0) = "Date"
aList(0, 1) = "Project ID"
aList(0, 2) = "Status"
i = 1
For Each sKey In Dic.keys
aList(i, 0) = Dic(sKey)(0)
aList(i, 1) = sKey
aList(i, 2) = Dic(sKey)(1)
i = i + 1
Next
With Me.ListBox1
.ColumnCount = 3
.List = aList
End With
End Sub