0

我认为这可能是一个简单的问题,但我似乎找不到自动填充 Application.WorksheetFunction.SumProduct(wsf.CountIf 公式的方法,以便行号会随着公式的下降而改变。

我想从 A 列自动填充 B2 到 LastRow 的这个公式 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....." 方法,以便我可以使用数组,因为标准会根据所选的下拉选项而有所不同。

有什么线索吗?

4

2 回答 2

1

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检查 if Column Chas Doctorsas value 和Column Ivalue of B2,您应该SUMPRODUCT从公式中删除 ,因为这不是必需的。SUMPRODUCT曾经是检查多个条件的方法,但在 Excel 2007 及更高版本中,它已完全被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

仍然,进一步的公式取证和评估揭示了一个更棘手的部分:您正在输入您的公式B2和下面,但您COUNTIFS正在检查B2和下面作为条件的一部分。这不仅令人困惑,而且容易出错(如果还没有出错的话),因为它会导致循环引用。

在这一点上,我现在的问题是,您到底要检查和/或计数什么?在我看来,这不仅仅是一个 VBA 问题,因为我相信你对你想要什么以及如何获得你的数字感到困惑。虽然我们的方法是合理的,并且对于您的问题基本上是完美的,但如果公式不正确,上述内容将毫无用处。:)

于 2013-11-11T02:21:25.990 回答
0

尝试这个。

这是我的数据的布局方式:

在此处输入图像描述

此代码进入常规模块:

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

我不确定您的公式结果,但它已正确加载。

于 2013-11-12T01:37:38.060 回答