簡體   English   中英

自動填充Application.Countifs.Formula VBA Excel

[英]Autofill Application.Countifs.Formula VBA Excel

我認為這可能是一個簡單的問題,但我似乎找不到一種自動填充Application.WorksheetFunction.SumProduct(wsf.CountIf公式的方法,以使行號會隨着公式的減少而改變。

我想從A列Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheet2.Range(**B2 Here**), Doctors, Sheet2.Range(**B2 Here**), wsf.Transpose(Emergency)))

因此,假設列A的最后使用行是6,因此公式應從B2自動填充到B6,例如:

B3 = Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheet2.Range(**B3 Here**)....

B4 = Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheet2.Range(**B4 Here**)....

B5 = Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheet2.Range(**B5 Here**)....

B6 = Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheet2.Range(**B6 Here**)....

我不想使用.Formula“ = SUMPRODUCT(COUNTIFS .....”)方法,因此我可以使用數組,因為條件會根據所選的下拉選項而有所不同。

有什么線索嗎?

AutoFill可以為您做到這一點。 假設您的公式以B2開頭並且結尾行發生更改,則語法為:

LRow = Sheet1.Cells(Rows.Count,1).End(xlUp).Row
With Range("B2")
    .Formula = 'Your formula here.
    .AutoFill Destination:=Range("B2:B" & LRow)
End With

另一種選擇是使用FillDown因為AutoFill幾乎總是有怪癖。 語法幾乎相同:

LRow = Sheet1.Cells(Rows.Count,1).End(xlUp).Row
Sheet1.Range("B2").Formula = 'Your formula here.
Sheet1.Range("B2:B" & LRow).FillDown

讓我們知道是否有幫助。

更新:

就像戴夫的答案一樣,這是我對您的公式的看法:

Sub Test()

    Dim Sh As Worksheet
    Set Sh = ThisWorkbook.Sheets("Sheet1") 'Modify as required.

    With Sh
        LRow = .Cells(Rows.Count, 1).End(xlUp.Row)
        .Range("B2").Formula = "=SUMPRODUCT(COUNTIFS($C$2:$C$16, ""Doctors"", $I$2:$I$16, $B2))"
        .Range("B2:B" & LRow).FillDown
    End With

End Sub

但是 ,關鍵在於:如果您僅進行COUNTIFS檢查Column C是否具有Doctors作為值,而Column I具有B2的值,則應從公式中刪除SUMPRODUCT ,因為這是不必要的。 SUMPRODUCT曾經是檢查多個條件的方法,但是在Excel 2007及更高版本中,它已被COUNTIFS完全取代, COUNTIFS進行簡單的基於多個條件的檢查和計數。 我的意思是,正確的代碼大致如下:

Sub Test()

    Dim Sh As Worksheet
    Set Sh = ThisWorkbook.Sheets("Sheet1") 'Modify as required.

    With Sh
        LRow = .Cells(Rows.Count, 1).End(xlUp.Row)
        .Range("B2").Formula = "=COUNTIFS($C$2:$C$16, ""Doctors"", $I$2:$I$16, $B2)"
        .Range("B2:B" & LRow).FillDown
    End With

End Sub

STILL ,進一步的公式取證和評估揭示了一個比較棘手的部分:您要在B2及以下輸入公式,但您的COUNTIFS檢查條件B2及以下。 這不僅會造成混亂,而且還容易出錯(如果尚未錯誤),因為它將導致循環引用。

在這一點上,我現在的問題是,您到底要檢查和/或計算什么? 我認為,這不僅僅是VBA問題,因為我認為您對於要獲得數字的方式和方式感到困惑。 盡管我們的方法是合理的,並且基本上可以解決您的問題,但是如果公式不正確,則上述方法將無濟於事。 :)

嘗試這個。

這是我的數據的布局方式:

在此處輸入圖片說明

此代碼進入常規模塊:

Sub Test(s As String) 'input frpm combo box
    Dim Sh As Worksheet, LRow As Long
    Set Sh = ThisWorkbook.Sheets("Sheet1") 'Modify as required.
    If LCase(s) = "all" Then s = "*"
    s = Chr(34) & s & Chr(34) 'bracket with quotes
    With Sh
        LRow = .Cells(Rows.Count, 1).End(xlUp).Row
        .Range("B2").Formula = "=COUNTIFS($C$2:$C$16," & s & ", $I$2:$I$16, $A2)"
        .Range("B2:B" & LRow).FillDown
    End With
End Sub

此代碼進入組合框的工作表模塊(在此例中為Sheet1)。

Private Sub ComboBox1_Change()
    Test Me.ComboBox1.Value
End Sub

我不確定您的公式結果如何,但是正確加載了該公式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM