带参数CountIfS的Excel宏

时间:2011-04-22 04:50:26

标签: excel vba parameters worksheet-function

我正在编写一个搜索充满奥运拳击数据的电子表格的程序。使用组合框,用户选择一个国家和一个重量级,并在击中Go!按钮,程序调用Excel电子表格中的宏,如下所示:

Sub paramedals(class As String, country As String)

  MsgBox " Counting by weight class " & class & " and country " & country
  Range("I73").Select
    ActiveCell.FormulaR1C1 = _
    "=COUNTIFS(C[-7], class,C[-6],country,C[-4], ""Gold"")"

End Sub

我输入msgbox命令以确保它正确读取参数 - 它确实如此。问题是,不是将公式的参数设置为给定的字符串,而是将公式设置为COUNTIFS(B:B,类等)。

就像我之前说的,我知道正确的字符串被发送到宏的事实,因为msgbox,它正确显示。你能不在COUNTIFS中使用参数吗?

2 个答案:

答案 0 :(得分:0)

您需要从变量

中分离出公式的字符串部分
Range("I73").FormulaR1C1 = _
"=COUNTIFS(C[-7]," & class & ",C[-6]," & country & ",C[-4], ""Gold"")"

修改

这两项工作,一个是R1C1,另一个是标准公式

Range("I73").FormulaR1C1 = _
"=COUNTIFS(C[-7],""=" & class & """,C[-6],""=" & country & """,C[-4],""=Gold"")"

Range("I73").Formula =  _ 
"=COUNTIFS(B:B,""=" & class & """,C:C,""=" & country & """,E:E,""=Gold"")"

一个好的建议是首先使用debug.print或msgbox构建语句,然后你可以看到它进入单元格时的外观。

答案 1 :(得分:0)

或者,您可以替换

  Range("I73").Select
    ActiveCell.FormulaR1C1 = _
    "=COUNTIFS(C[-7], class,C[-6],country,C[-4], ""Gold"")"

通过

  Range("I73").Value = application.WorksheetFunction.CountIf(<your formula>)

当然,它只有在你只能显示值而不是公式时才有效。