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)