2014-10-20 46 views
-1

聲明:我意識到,只需在表格中對TALLY列進行論壇化即可輕鬆解決此問題,但這更多的是學習VBA一般來說。Excel VBA - 如何使用引用非連續列的COUNTIF值填充範圍

我在我的工作表中有一個表有多列「是」或「否」,我想在VBA中找到一種方法來計算單獨列中的否。下面是我嘗試的一個示例描述:

Example image

我想,這涉及到一個循環不知何故,其中將包括Application.WorksheetFunction.CountIf,但短期做一個真的很亂聯盟範圍內引用的我想不出如何有效地編寫此預先感謝您的任何。想法假設

回答

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)但 內的任何發生:我會,如果是/否計算。

enter image description here

也注意到,這是不區分大小寫。

+0

謝謝你,但我希望做一個'對於Each'在VBA我可以添加到現有的宏,這樣它可以幫助我詳細瞭解Visual Basic的功能。 – bcwhite1618 2014-10-20 15:08:00

+0

達喔錯過了那部分。 – xQbert 2014-10-20 16:26:51

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 

這樣一來,你的代碼中手工計算每行的COND變量爲每一個看起來像* COMP列。

希望它有幫助。

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