2012-01-04 520 views
7

我需要计算包含特定值的列中的单元格数量。我目前使用下面的代码:Countif具有多个OR条件

iVal = Application.WorksheetFunction.COUNTIF(Range("A:A"), "SAL")

不过,我现在需要算多少细胞中含有两种

  • SAL
  • PRE
+0

为什么不是一个简单的第二线'iVal2 = Application.WorksheetFunction.COUNTIF(范围( “A:A”), “PRE”)',然后添加(或报告两者)的变量作为一个整体? – brettdj 2012-01-04 12:22:16

+0

因为我将加起来大约20个变量,并为大约30个不同的列做这个,所以如果我可以将它们全部合并到一行中,就会减少很多工作量! – BradStevenson 2012-01-04 16:21:18

+1

如何将列的值读入数组?那么你可以循环,添加条件等? – JimmyPena 2012-01-04 18:46:44

回答

7

最快的方法就是做2个COUNTIF:

iVal = Application.WorksheetFunction.CountIf(Range("A:A"), "SAL") + Application.WorksheetFunction.CountIf(Range("A:A"), "PRE") 
+0

+1,这是您的最佳方法,因为CountIf只能接受一个参数。 – 2012-01-04 16:15:38

+1

这个效果很好,但从长远来看,我将结束很多变量,所以试图找到一个更高效的方法,但很好的中间方法! – BradStevenson 2012-01-04 16:22:24

+0

@MattDonnan实际上可以为COUNTIF提供多个测试,参见上文。 – brettdj 2012-01-04 23:36:26

18

您可以使用标准COUNTIF公式(可能需要多个参数)的VBA等效项。这可以被扩展为需要

标准配方
=SUM(COUNTIF(A:A, {"SAL","PRE"}))

VBA等效
MsgBox Evaluate("Sum(COUNTIF(A:A,{""PRE"",""SAL""}))")

+1

+1远和最好的答案到目前为止!可以支付添加VBA选项来传递一个字符串数组MsgBox Evaluate(“Sum(COUNTIF(A:A,{”“”&Join(v,“”“,”“”)&“”“}))” ) ' – 2012-01-05 11:19:17

+0

@chrisneilsen thx - 以及对字符串数组的极好建议。 – brettdj 2012-01-05 11:26:03

2

你为什么不使用CountIfs功能?

例子:

Application.CountIfs(CR1_range, V_1, CR2_range, V_2, CR3_range, V_3, CR4_range, V_4) 

哪里CR1_range显然是你的范围和V_1是你的变量

编辑:哎呀!刚看到它必须是一个或声明,我的回答将只用于AND语句工作(没有删除参考柜面任何人有兴趣)

0

继为我工作很好: -

Dim val1 as string, val2 as string 

val1 = "value1" 
val2 = "value2"  

count = Application.WorksheetFunction.CountIfs(ThisWorkbook.Names("firstname").RefersToRange, val1 , ThisWorkbook.Names("secondname").RefersToRange, val2) 

webpage有助于了解Excel中的命名范围。