Excel VBA - 如何使用引用非连续列的COUNTIF值填充范围

时间:2014-10-20 14:50:23

标签: excel vba loops excel-vba countif

免责声明:我意识到只需在表格中对TALLY列进行论坛就可以轻松解决这个问题,但这更像是一般学习VBA的练习。

我的工作表中有一些表,其中包含多个“是”或“否”的列,我想在VBA中找到一种方法来在单独的列中记录“否”。这是我要尝试的一个示例描述:

Example image

我认为它涉及一个循环,包括Application.WorksheetFunction.CountIf,但是没有做一个非常混乱的联盟范围来引用我无法想象如何有效地编码。提前感谢您提出的任何想法。

3 个答案:

答案 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中发生任何事件:如果是/否,我将被计算在内。

enter image description here

另请注意,这不区分大小写。

答案 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