根据工作表名称获取列H的总和

时间:2019-09-27 02:17:55

标签: excel vba

我正在尝试从每个工作表中获取H列的总和。工作表的名称在A列中给出

enter image description here

enter image description here

我一直使用的方式是使用= SUM('BSF10003'!H:H),向下拖动此公式并手动更改最后几位数字,但是如果有100列以上,这将是一个漫长的过程。

我是VBA的新手,希望有一种方法可以更快地完成此任务

再次感谢!

2 个答案:

答案 0 :(得分:2)

INDIRECT函数是另一种方法。以下示例,

=SUM(INDIRECT("'"& A2 &"'!H:H"))

A2 =工作表名称

INDIRECT使您可以动态引用。

答案 1 :(得分:1)

一种方法可能是UDF

将此内容粘贴到模块中

Function SumSheets(ByVal SheetName As String) as Double
    SumSheets=Application.WorksheetFunction.Sum(Worksheets(SheetName).Range.Columns(8))
End Function

并像标准公式一样使用它...

=SumSheets(A1)

将返回A1中命名的工作表中H列的总和

或者作为变体,您可以将其与UDF一起使用。您可以将其粘贴到与UDF相同的模块中,但无需键入公式。而是在列中选择一个单元格并运行此宏。 公式会自动添加。

Sub FillRangeWithSumSheets()
    Dim n As Name: Dim s As String: s = "SumSheetsRange"
    With ActiveWorkbook
        For Each n In .Names
            If n.Name = s Then
                n.Delete
                Exit For
            End If`
        Next
        Set n = .Names.Add(s, "=OFFSET($A1,0," & ActiveCell.Column - 1 & ",COUNTA(Sheet1!$A:$A),1)")
        n.Visible = 1
        Range(s).Formula = "=SumSheets(A1)"
    End With
End Sub