2013-02-25 48 views
2

我正在嘗試使用循環來計算工作表中K列中出現特定字符串的行數。用於搜索的字符串位於Scorecards B2:B8中。計數應該放在下一列C中。我試圖將「op_id」中的字符串傳遞給countif。當我運行它C欄中的所有計數值爲0.這是我到目前爲止:vba將標準傳遞給變量中的countif

Dim op_id As String 

For i = 2 To 8 
op_id = Sheets("Scorecards").Cells(i, 2) 
Sheets("Scorecards").Cells(i, 3) = "=COUNTIF('Raw Data'!K:K, & op_id)" 

Next i 

在此先感謝!

+0

你能指定你使用的是哪個版本的Excel嗎? – bonCodigo 2013-02-26 08:17:39

回答

1

問題是VBA不支持字符串插值。你需要,而不是來連接:

Dim op_id As String 

For i = 2 To 8 
    op_id = Sheets("Scorecards").Cells(i, 2) 
    Sheets("Scorecards").Cells(i, 3) = _ 
     "=COUNTIF('Raw Data'!K:K, """ & op_id & """)" 

Next i 
+0

不知道是一個noob。謝謝!正是我想要的。 – user2108935 2013-02-26 15:06:23

+0

作爲後續措施:我可以以某種方式嵌套這個或在有多個標準時使用它嗎?示例:使用上面的字符串(b2:b8)以及原始數據表中的其他兩列。過程:1.對上面的字符串進行計數(更多信息:它們是用戶標識符)。 2.對包含每個用戶標識的字符串Pass,Fail的行進行計數。 3.爲每個用戶的每次失敗對關鍵失敗計數行。希望這是有道理的 – user2108935 2013-02-26 15:10:45

+0

@ user2108935我不知道如何使用公式來完成,除非你有一個組合列('UserId&Status')和使用'countif'再次查詢這樣的值(例如'123success', '456fail')。有可能是一個更優雅的解決方案,但我現在沒有看到它 – GolfWolf 2013-02-26 15:28:29

2

除非你的例子過於簡單,沒有必要使用VBA在這裏,因爲你可以使用SUMPRODUCT達到同樣的效果,如:

=SUMPRODUCT(1*('Raw Data'!K:K=B2)) 

...和向下拖動以根據需要應用到儘可能多的行。

+0

謝謝。我會把它放在我的工具包裏。我使用VB,因爲我支持的人正在做許多手動計算,我試圖儘可能讓它變得容易。 – user2108935 2013-02-26 15:07:53