Excel VBA CountIFsearchstring数组

如何使用COUNTIF()函数来只计算范围内存在的某些文本string?

我试图使用下面,但我得到一个错误

 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列与Hard B列相匹配,应该是这样的:

 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,你不能以这种方式join范围。 你甚至没有给我分配一个值,但假设我= 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”或者硕士!A&i =“硬”。 那么让我们看看我们能否find能够做到的代码。

对于数据我们input“软”到主!A1和“硬”到主!A2。 然后我们input随机的“软”或“硬”到新的列中的各个单元格中。

现在你的代码如下所示:

 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) 

这是效率低下和有限的,但它尽可能多地保留你原来的代码,并且工作。

编辑添加:如果“硬”在主!B&我而不是A&我然后代码变成:

 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)