2013-02-25 46 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