我在一大堆工作表上有一大堆数据,对于每个工作表,我想找到给定列中唯一值的计数。
当我在工作表中使用以下命令时,它可以完美运行
=SUM(IF(FREQUENCY(MATCH(REST!D2:D2225,REST!D2:D2225,0),MATCH(REST!D2:D2225,REST!D2:D2225,0))>0,1))
但是当我在 VBA 中使用等效命令时,出现错误
range1 = Cell(2,j).Address & ":" & Cells(k,j).Address
= Application.WorksheetFunction.SUM( Application.WorksheetFunction.IF( Application.WorksheetFunction.FREQUENCY( Application.WorksheetFunction.MATCH(Range(range1),Range(range1),0), Application.WorksheetFunction.MATCH(Range(range1),Range(range1),0))>0,1))
我尝试过其他组合,例如使用
Application.Match
和
Application.Frequency
我也有“类型不匹配错误。
另一方面,以下功能完美运行
Application.Worksheetfunction.Sum(Range(range2))
range1 和 range2 的最大区别在于 range2 数据是严格的数字,而 range1 数据既是数字又是字符串。
编辑:实现 BX201 的解决方案
range_TradeID_total_FL = .Cells(2, TradeId_column).Address & ":" & Cells(Finalrow, TradeId_column).Address
doubleQ = Chr(34) & Chr(34)
fStr = "=SUMPRODUCT((range_TradeID_total_FL & " <> " & " & doubleQ & ")/COUNTIF(range_TradeID_total_FL , range_TradeID_total_FL & " & " & " & doubleQ & "))"
var_TOTAL_TradeId_count_FL = Evaluate(fStr)
MsgBox var_TOTAL_TradeId_count_FL
我不想将值存储在单元格中,而是将其存储在变量中。但是当我这样做时,MsgBox 给我的值是“True”而不是数字。
最佳答案
@SiddharthRout I am not aware of evaluate. Can you please tell me how it would work in my context, especially when I use variables for range.
试试这个(未经测试)
这是一个 row 是变量的示例。
Sub Sample()
Dim r1 As Long, r2 As Long
Dim formulaString As String
r1 = 2
r2 = 2225
'=SUM(IF(FREQUENCY(MATCH(REST!D2:D2225,REST!D2:D2225,0),MATCH(REST!D2:D2225,REST!D2:D2225,0))>0,1))
formulaString = "=SUM(IF(FREQUENCY(MATCH(REST!D" & r1 & _
":D" & r2 & _
",REST!D" & r1 & _
":D" & r2 & _
",0),MATCH(REST!D" & r1 & _
":D" & r2 & _
",REST!D" & r1 & _
":D" & r2 & _
",0))>0,1))"
Debug.Print Application.Evaluate(formulaString)
End Sub
关于excel - 无法获取 WorksheetFunction 类错误的匹配属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20481067/