【发布时间】:2023-03-22 00:19:01
【问题描述】:
我在一大堆工作表上有一大堆数据,对于每个工作表,我想找到给定列中唯一值的计数。
当我在工作表中使用以下命令时,它可以完美运行
=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”而不是数字。
【问题讨论】:
-
你知道你也可以
application.evaluate()吗? -
@SiddharthRout 我不知道评估。你能告诉我它在我的上下文中是如何工作的,尤其是当我使用变量作为范围时。
-
确定几分钟