将UDF应用于每个用作sumproduct范围的值

我在VBA中编写了一个UDF,它接受一个参数和一个string,并处理它们以返回一个double。 我希望能够使用这个公式来处理一个表格中的一个范围在一个sumproduct公式,我有一些问题。

Public Function ColorCount(Color As String, ToCount As String) Dim WordArray() As String ToCount = Replace(ToCount, " ", "") WordArray() = Split(ToCount, "}{") ColorCount = 0 For i = LBound(WordArray) To UBound(WordArray) WordArray(i) = Replace(WordArray(i), "{", "") WordArray(i) = Replace(WordArray(i), "}", "") If UCase(Color) = UCase(WordArray(i)) Then ColorCount = ColorCount + 1 ElseIf UCase(WordArray(i)) Like UCase(Color) & "[/\]*" Or UCase(WordArray(i)) Like "*[/\]" & UCase(Color) Then ColorCount = ColorCount + 0.5 End If Next i End Function 

我有一个表格中的数据,我希望能够调用一个总和产品。 我试过类似于=sumproduct(Table[Quant],ColorCount("Color", Table[Colors])但它似乎并没有工作。

任何意见或帮助将不胜感激!

把所有的处理写入UDF。 使用VBA中的上级(与SUMPRODUCT相比)似乎很遗憾。

 Option Explicit Public Function udfColorCount(theColor As String, toCount As Range, toQty As Range) Dim c As Integer, i As Integer, colorString As String, colorArray As Variant 'toCount = Replace(toCount, " ", vbNullString) udfColorCount = 0 For c = 1 To toQty.Cells.Count Debug.Print toCount.Cells(c).Value2 colorString = Replace(toCount.Cells(c).Value2, Chr(32), vbNullString) colorArray = Split(Mid(colorString, 2, Len(colorString) - 2), "}{") For i = LBound(colorArray) To UBound(colorArray) If UCase(theColor) = UCase(colorArray(i)) Then udfColorCount = udfColorCount + toQty.Cells(c) ElseIf CBool(InStr(1, colorArray(i), theColor, vbTextCompare)) Then udfColorCount = udfColorCount + 0.5 * toQty.Cells(c) End If Next i Next c End Function 

在这里输入图像说明