我使用以下代码将字符串列中的所有唯一值保存到数组中,然后通过计算数组的长度来获取唯一值的数量。
Dim tmp As String
Dim prNumbers() As String
Dim arrLen As Integer
Dim lastRow As Integer
Dim txt As String
lastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Dim rngPR As Range
Set rngPR = Range("B2:B" & lastRow)
If Not rngPR Is Nothing Then
For Each cell In rngPR
If (cell <> "") And (InStr(tmp, cell) = 0) Then
tmp = tmp & cell & "|"
End If
Next cell
End If
If Len(tmp) > 0 Then tmp = Left(tmp, Len(tmp) - 1)
prNumbers = Split(tmp, "|")
'Find the array length
arrLen = UBound(prNumbers) + 1
但是,当我运行此代码时,arrLen是一个小于列中唯一条目实际数量的数字(我通过对唯一条目进行手动数据检查来了解这一点。)列中的数据不包含任何& #34; |&#34;字符,只有数字。
问题是什么?是否有另一种方法可以将唯一条目的数量输入数组并确定其长度?
答案 0 :(得分:3)
这个检查可能是问题所在:
(InStr(tmp, cell) = 0)
如果是单元格为hello
,后面的单元格为ello
,因为ello
是hello
的一部分,因此tmp
字符串将不包括在内。
要使用您当前的方法,请将其更改为
(InStr(tmp, "|" & cell & "|") = 0)
并以初始tmp = "|"
开头。
因此,如果当前tmp
为|foo|hello|bar|
,则会搜索|ello|
,并获得0。
更直接的方法是使用例如一个集合,检查每个新单元格是否已包含在集合中。
请参阅http://www.cpearson.com/Excel/CollectionsAndDictionaries.htm - &gt; KeyExistsInCollection