免责声明:我意识到只需在表格中对TALLY列进行论坛就可以轻松解决这个问题,但这更像是一般学习VBA的练习。
我的工作表中有一些表,其中包含多个“是”或“否”的列,我想在VBA中找到一种方法来在单独的列中记录“否”。这是我要尝试的一个示例描述:
我认为它涉及一个循环,包括Application.WorksheetFunction.CountIf
,但是没有做一个非常混乱的联盟范围来引用我无法想象如何有效地编码。提前感谢您提出的任何想法。
答案 0 :(得分:0)
像公式:
=COUNTIF(C:C,K1)+COUNTIF(F:F,K1)+COUNTIF(I:I,K1)
其中K1包含C:C,F:F和I:I中您想要计算的值。
现在,如果您需要计算任何列,您可以设置所有列并执行countif()
例如=COUNTIF(A:I,K1)
但在A中发生任何事件:如果是/否,我将被计算在内。
另请注意,这不区分大小写。
答案 1 :(得分:0)
我这样做(不是用Countif):
Sub countCond()
Dim cond As String
Dim i As Long
Dim countCond As Long
Dim column As Variant
cond = "No" 'You can set this to 'Yes' as well
With Sheet1 'Or Worksheets("Sheet1") 'or whatever you have
For i = 1 To .Range("TALLY").Cells.Count
'I suggest naming it (at least the sum column)
'--Edit: Without the header, so just the values.
For Each column In .UsedRange.Columns
'Or maybe instead UsedRange, name the section
'that contains these columns
If column.Cells(1).Value Like "*COMP" Then 'Assuming this is true
If column.Cells(i + 1) = cond Then countCond = countCond + 1
End If
Next
.Range("TALLY").Cells(i, 1).Value = countCond
countCond = 0
Next i
End With
End Sub
这样,您的代码会为每个看起来像* COMP的列的每一行手动计算cond变量。
希望它有所帮助。
答案 2 :(得分:0)
谢谢大家的意见,我相信我找到了问题的答案。使用此代码,我能够得到我想要的结果:
Sub Test()
Dim Fx() As Variant
Dim i As Integer
Dim tg_row As Integer
Fx() = Array("Table1", "[EXAComp]", "[EXBComp]", "[EXCComp]")
For Each cl In Range("Table1[TALLY]")
For i = 1 To 3
If Range(Fx(0) & Fx(i)).Cells(tg_row, 1).Value = "No" Then
cl.Value = cl.Value + 1
Else: cl.Value = cl.Value + 0
End If
Next
tg_row = tg_row + 1
Next cl
End Sub