代码之家  ›  专栏  ›  技术社区  ›  BillyMadison

调整为列中条目数的公式

  •  0
  • BillyMadison  · 技术社区  · 6 年前

    简而言之:
    我有三列。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(间接(''“&$A$2$A5&”'!A1:EE2000”),B2)

    1 回复  |  直到 5 年前
        1
  •  1
  •   tigeravatar    6 年前

    有一种方法可以做到:

    =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))