Excel VBA CountIF 搜索字符串数组

Excel VBA CountIF To Search For String Array

如何使用 COUNTIF() 函数来仅计算范围内存在的某些文本字符串?

我尝试使用下面的方法,但出现了

的错误
Syntax error

这是我尝试的语法

Dim worksheetmaster As String = "Master"
Dim worksheettocheck As String = "New"
Dim softcount As Int, i As Long, hardcount As Int

softcount = Evaluate("=COUNTIF(Range('" & worksheettocheck & "'!A:A'" & worksheetmaster & "'!A" & i & ")"Soft")")
hardcount = Evaluate("=COUNTIF(Range('" & worksheettocheck & "'!A:A'" & worksheetmaster & "'!A" & i & ")"Hard")")

编辑
我尝试在没有 Range 的情况下使用此语法,但仍然出现错误

hardcount = Evaluate("=COUNTIF('" & worksheettocheck & "'!A:A'" & worksheetmaster & "'!A" & i & ")"Hard"")

要在 A 列中与 B 列中的 Hard 匹配,应该是这样的:

hardcount = Application.Evaluate("COUNTIFS('" & worksheettocheck & "'!A:A,'" & worksheetmaster & "'!A" & i & ",'"  & worksheettocheck & "'!B:B, ""Hard"")")

softcount = Application.Evaluate("COUNTIFS('" & worksheettocheck & "'!A:A,'" & worksheetmaster & "'!A" & i & ",'"  & worksheettocheck & "'!B:B, ""Soft"")")

你的第一个语法错误在这里:

Dim worksheetmaster As String = "Master"
Dim worksheettocheck As String = "New"

你不能那样做。相反,您需要使用:

Dim worksheetmaster As String
Dim worksheettocheck As String
worksheetmaster = "Master"
worksheettocheck = "New"

更好的方法是让它们直接指向工作表,但让我们尽可能多地使用您的代码,而不是完全重写它。

对于 countif,您不能以这种方式连接范围。你甚至没有给 i 赋值,但假设 i = 1,你的代码:

softcount = Evaluate("=COUNTIF(Range('" & worksheettocheck & "'!A:A'" & worksheetmaster & "'!A" & i & ")"Soft")")

在 VBA 中评估为完全无意义:

softcount = Evaluate(=COUNTIF(Range('New'!A:A'Master'!A1)Soft))

现在,据我所知,您要做的是计算单元格 Master!A & i 中的值出现在 New!A:A 范围内的次数,具体取决于 Master!A & i="Soft" 或 Master!A & i="Hard"。那么让我们看看是否可以找到可以做到这一点的代码。

对于数据,我们在 Master!A1 中输入 "Soft",在 Master!A2 中输入 "Hard"。然后我们在 New!A:A.

列的各个单元格中随机输入 "Soft" 或 "Hard"

现在您的代码如下所示:

Dim worksheetmaster As String
Dim worksheettocheck As String
Dim softcount As Long, i As Long, hardcount As Long

worksheetmaster = "Master"
worksheettocheck = "New"
i = 1
softcount = Application.CountIf(Sheets(worksheettocheck).Range("A:A"), Sheets(worksheetmaster).Range("A" & i).Value)
i = 2
hardcount = Application.CountIf(Sheets(worksheettocheck).Range("A:A"), Sheets(worksheetmaster).Range("A" & i).Value)

这是低效且有限的,但它保留了尽可能多的原始代码,并且有效。

编辑添加:如果 "Hard" 在 Master!B & i 而不是 A & i 中,则代码变为:

i = 1
softcount = Application.CountIf(Sheets(worksheettocheck).Range("A:A"), Sheets(worksheetmaster).Range("A" & i).Value)
hardcount = Application.CountIf(Sheets(worksheettocheck).Range("A:A"), Sheets(worksheetmaster).Range("B" & i).Value)