2017-03-18 332 views
1

如何使用COUNTIF()函数仅计算范围内存在的某些文本字符串?Excel VBA 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"") 
+0

你不需要的范围内,这将是因为它会在一个工作表。 –

+0

@Nathan_Sav - 仍然有错误:( - 请参阅我的编辑。 – BellHopByDayAmetuerCoderByNigh

+0

不,在每个段之后像'= countif('“&w1&”'!A:A,''“&w2&”!A:A “.....' –

回答

1

要与Hard匹配AB列,这是应该的:

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"")") 
+0

我想要得到一个计数,其中主列上的列A与新列上的列A匹配 - 但列B中的值很难。如果我尝试使用上面的第二个语法,它总是会返回0结果,即使认为它应该更多。 – BellHopByDayAmetuerCoderByNigh

0

你的第一个语法错误的位置:

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

你不能做到这一点。相反,你需要使用:

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

更妙的是给它们分配到工作表diectly点,但让我们与您的代码工作,尽可能地而不是完全重写它。

对于countif,你不能以这种方式加入范围。你甚至还没有分配一个值我,但假设我= 1,代码:

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

计算为总废话在VBA:

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

现在,从我可以告诉你,什么你正在试图做的是计算在小区主多少次A值&我出现在范围内新答:!!!A,这取决于是否主角色A & I =“软”或主角色A & I =“辛苦了! ”。那么让我们看看我们是否可以找到能够做到的代码。

对于我们输入“Soft”到Master!A1和“Hard”进入Master!A2的数据。然后我们在列中的各个单元格中输入随机的“软”或“硬”新!A:A。

现在你的代码如下所示:

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)