【问题标题】:Formula that adjusts to number of entries in column根据列中条目数调整的公式
【发布时间】:2019-05-21 19:24:56
【问题描述】:

简而言之:
我有 3 列。 A 列是工作表名称,B 列是个人姓名,第 3 列是实例数。

我想计算 B 列中的人名出现在 A 列的动态工作表列表中的实例数。

更多详情:
我有一个包含许多工作表的工作簿。一些工作表以名称“Test”开头。我想搜索以“Test”开头的每个工作表,并查找名称(来自 B 列)出现的次数。

我有两个部分。

  • 宏会列出所有以“Test”开头的工作表并将它们放在 A 列中。
  • C 列中的公式进入 A 列中的每个工作表,并查找 B 列中的名称出现的实例数。

问题是可以添加以“测试”开头的新标签。

如何使公式动态化并搜索所有 A 列?

Sub WorksheetLoop()
    Dim WS_Count As Integer
    Dim I As Integer
    Dim R As Integer
    ' Set WS_Count equal to the number of worksheets in the active
    ' workbook.
    WS_Count = ActiveWorkbook.Worksheets.Count
    R = 2
    ' Begin the loop.
    For I = 1 To WS_Count
        If (InStr(1, ThisWorkbook.Worksheets(I).Name, "Test")) > 0 Then
            ThisWorkbook.Worksheets("Master").Cells(R, 1) = ActiveWorkbook.Worksheets(I).Name
            R = R + 1
        End If
    Next I
End Sub

公式:

=SUMPRODUCT(COUNTIF(INDIRECT("'"&$A$2:$A5&"'!A1:EE2000"),B2))

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    这是一种方法:

    =SUMPRODUCT(COUNTIF(INDIRECT("'"&$A$2:INDEX($A:$A,MAX(2,ROWS($A:$A)-COUNTBLANK($A:$A)))&"'!A1:EE2000"),B2))
    

    或者,您可以创建一个动态命名范围来引用 A 列中的工作表名称。在 Excel 中,转到公式 -> 名称管理器 -> 新建 -> 将名称设置为 listSheetNames 并将引用设置为:=$A$2:INDEX($A:$A,MAX(2,ROWS($A:$A)-COUNTBLANK($A:$A)))

    现在您的工作表名称列表有了一个动态命名范围,您可以改为让您的公式看起来像这样:=SUMPRODUCT(COUNTIF(INDIRECT("'"&listSheetNames&"'!A1:EE2000"),B2))

    【讨论】:

    • 这太棒了!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2022-01-01
    相关资源
    最近更新 更多