首页 > 解决方案 > 使用 CountIf 循环文本然后移动到下一列

问题描述

我有一个工作表(每日),其中包含列中的数据和标题。数据是基于一个月中的天数的动态数据,并且已被有条件地格式化为图标(不完整 = T,完整 = R)。我正在尝试在另一个工作表(WS2)上创建一个图表,以显示每个项目(标题)的完成和不完整百分比。

我在第三张工作表(WS3)上有一个表格来计算每列中的所有非空单元格,countif“T”和countif“R”。(例如,=COUNTIF(Daily!D5:D29,"R"))。WS1 上的图表从 WS3 中为每个项目选择数据。有时我必须在每日页面上添加或删除一列。我正在尝试使用 CountIF 和 CountA 编写一个子程序来遍历 Daily 的每一列,并在 WS2 上显示结果。

Sub LoopforCt()

Dim ws As Worksheet
Dim Daily As Worksheet
Dim Test As Worksheet
Dim AllData As Variant
Dim pcv As Range

Set Daily = Sheets("Daily")
Set Test = Sheets("Test")
Set AllData = Daily.Range("B5:B100")
Set pcv = Test.Range("A22")

With AllData
 pcv = "=COUNTIF(Daily!C5:C29,""R"")"
End With

End Sub

我已经能够让 countif 为第一列工作,但我不知道如何把它放在一个循环中。我想继续 CountIf 以获取 Test.Range("B22") 等中的下一列结果。

谢谢!

标签: excelvbaloops

解决方案


你不需要循环。您可以将公式写入Range一行。您正在使用相对引用,因此随着您的进步,C5:C29将变为。D5:D29E5:E29

Test.Range("A22:X22").Formula = "=COUNTIF(Daily!C5:C29,""R"")" ' replace X with whatever column you need.

或者,如果您更愿意保留pcv

Set pcv = Test.Range("A22:X22")
pcv.Formula = "=COUNTIF(Daily!C5:C29,""R"")"

推荐阅读