2017-03-18 190 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)