使用CountIf循环文本,然后移至下一列

时间:2019-07-16 22:22:10

标签: excel vba loops

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

我在第3个工作表(WS3)上有一张表格,用于对每列(计数“ T”和计数“ 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在第一列中起作用,但是我对如何将其循环放置一无所知。我想继续对Test.Range(“ B22”)等中的下一列结果使用CountIf。

谢谢!

1 个答案:

答案 0 :(得分:0)

您不需要循环。您可以在一行中将公式写到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"")"