Excel 具有多个或多个条件的Countif

Excel 具有多个或多个条件的Countif,excel,excel-formula,vba,Excel,Excel Formula,Vba,我需要计算一列中包含特定值的单元格数。我目前正在使用以下代码: iVal=Application.WorksheetFunction.COUNTIF(范围(“A:A”),“SAL”) 但是,我现在需要计算有多少个单元格包含 SAL,或 PRE 最快的方法就是做两件事: iVal = Application.WorksheetFunction.CountIf(Range("A:A"), "SAL") + Application.WorksheetFunction.CountIf(Range("A

我需要计算一列中包含特定值的单元格数。我目前正在使用以下代码:

iVal=Application.WorksheetFunction.COUNTIF(范围(“A:A”),“SAL”)

但是,我现在需要计算有多少个单元格包含

  • SAL
  • PRE

    • 最快的方法就是做两件事:

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

      您可以使用标准COUNTIF公式的
      VBA
      等价物(可以接受多个参数)。这可以根据需要进行扩展

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

      VBA等效物

      MsgBox求值(“Sum(COUNTIF(A:A,{“PRE”,“SAL”}))
      为什么不使用
      CountIfs
      函数呢

      例如:

      Application.CountIfs(CR1_range, V_1, CR2_range, V_2, CR3_range, V_3, CR4_range, V_4)
      
      其中CR1_range显然是您的范围,V_1是您的变量


      编辑:哦!刚才看到它必须是一个OR语句,我的回答只适用于AND语句(没有删除以供参考,以防有人感兴趣)

      以下内容对我很有用:-

      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)
      

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

      为什么不做一个简单的第二行
      iVal2=Application.WorksheetFunction.COUNTIF(Range(“a:a”),“PRE”)
      ,然后加上(或同时报告这两个)变量作为一个总数?因为我将要加上大约20个变量,并对大约30个不同的列执行此操作,所以如果我能将它们全部放在一行中,将减少大量工作!将列的值读入数组如何?然后你可以循环,添加条件等等?我使用2010,CountIfs函数不是只有在所有条件都为真时才起作用,而不是在每个条件都为真时才起作用吗?“我使用2010,CountIfs函数不是只有在所有条件都为真时才起作用吗?”是的。+1,这是你最好的方法,因为CountIf只能接受一个参数。这很有效,但从长远来看,我会有很多变量,所以我试图找到一个更有效的方法,伟大的中间方法@Matttonnan实际上可以为COUNTIF提供多个测试,请参见上文。@brettdj不知道您可以使用{}添加更多的值,文档中没有,但是非常好+1包含SAL和PRE两次的单元格不算吗?+1绝对是目前为止最好的答案!可能需要添加VBA选项来传递字符串数组
      MsgBox Evaluate(“Sum(COUNTIF(A:A,{“”&Join(v,“,”,“,”)&“}”)”)
      @chrisneilsen thx-这是对字符串数组的极好建议。