使用多个条件查找单个列中部分字符串的出现次数

时间:2015-09-17 00:42:39

标签: excel vba excel-vba

我有一张工作表“Employee_log”,其中包含A列中单个字符串中每日日志的详细信息。例如:

A1 : EMP1~EMP2~JOB1~JOB2...
A2 : EMP1~EMP3~JOB1~JOB3...
A3 : EMP2~EMP3~JOB2~JOB3...

现在,我希望此列中出现EMP1JOB1的次数,并填入另一张“Ind_Detail”:

我正在使用,但它无法正常工作,

Set DSht = Worksheets("Employee_log")

Dsht. Activate  

ThisWorkbook.Sheets("Ind_Detail").Cells(1, "A") =CountIfs(Range("A:A"), _
                                              "EMP1", Range("A:A"), "JOB1")

Set DSht = Nothing

2 个答案:

答案 0 :(得分:0)

如果字符串' 中出现'字符串,则需要将条件包装在通配符中以进行计数。

with Worksheets("Employee_log")
    ThisWorkbook.Sheets("Ind_Detail").Cells(1, "A") = _
      application.CountIfs(.columns(1), "*EMP1*", .columns(1), "*JOB1*")
end with

我还将工作表阻止为With ... End With statement,以便范围(例如示例中的.Columns(1))可以本地化到Employee_log工作表。您的Range("A:A")示例使父工作表的定义不明确。

有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros

答案 1 :(得分:0)

CountIfs是一个WorkSheet函数,它不能直接在VBA中使用。直接在目标单元格中​​编写公式:

=CountIfs(Employee_log!A:A, "*EMP1*", Employee_log!A:A, "*JOB1*")

或者,在VBA中,使用WorksheetFunction对象访问Worksheet函数:

ThisWorkbook.Sheets("Ind_Detail").Cells(1, "A") =WorkSheetFunction.CountIfs(Range("A:A"), "*EMP1*", Range("A:A"), "*JOB1*")

编辑:在Jeeped的回答中添加了通配符