Excel VBA – 公式计数唯一值错误

我正在尝试根据条件计算唯一值的计数。

例如,

对于列B中的值,我试图通过VBA来计算列C中的唯一值。

我知道如何使用Excel公式来做到这一点 –

=SUMPRODUCT((B2:B12<>"")*(A2:A12=32)/COUNTIF(B2:B12,B2:B12)) 

32的值是dynamic的 – 编程方式,我叫他们在我的vba代码作为名称

这是我的代码:

 Application.WorksheetFunction.SumProduct((rng <> "") * (rng2 = Name) / CountIfs(rng, rng)) 

这是具有要求的示例数据

数据

或者,我连接两个列保持简单,并希望确定以name *方法开始的唯一值。

我不知道我哪里错了。 请分享你的想法。

你可以尝试这样的事情…

 Function GetUniqueCount(Rng1 As Range, Lookup As String) As Long Dim x, dict Dim i As Long, cnt As Long Set dict = CreateObject("Scripting.Dictionary") x = Rng1.Value For i = 1 To UBound(x, 1) If x(i, 1) = Lookup Then dict.Item(x(i, 1) & x(i, 2)) = "" End If Next i GetUniqueCount = dict.Count End Function 

那么你可以像下面一样使用它…

 =GetUniqueCount($A$2:$B$10,C2) 

其中A2:B10是数据范围,C2是名称标准。

在这里输入图像说明

在这里输入图像说明

我将这些值放到一个数组中,创build一个临时的第二个数组,如果它们不存在,只给这个数组添加值,然后replace原来的数组。 那么总结唯一值就是一件简单的事情:

 Sub Unique dim arr(10) as variant, x as variant dim arr2() as variant for x = 1 to 10 ' or whatever arr(x) = cells(x, 1) ' or whatever next x arr2 = UniqueValuesArray(arr) ' now write some code to count the unique values, you get the idea End Sub 

 Function UniqueValuesArray(arr As Variant) As Variant() Dim currentRow, arrpos As Long Dim uniqueArray() As Variant Dim x As Long arrpos = 0 ReDim uniqueArray(arrpos) For x = 0 To UBound(arr) If UBound(Filter(uniqueArray, arr(x))) = -1 Then ReDim Preserve uniqueArray(arrpos) uniqueArray(arrpos) = arr(x) arrpos = arrpos + 1 End If Next x UniqueValuesArray = uniqueArray End Function