使用总行查找 table 中的最后一个单元格列

Find the last cell column in table with Total Row

我有一个 table,其中包含 header 行、数据 body 和总计行。 我想在数据 body 的最后一列(在本例中)中找到最后一行,并且我想获得总计行的值。

我可以通过这个VBA

得到最后一行和最后一列的值(135)
Sub Target()

Dim ws1 As Worksheet
Set ws1 = Worksheets("Nordics")
Dim ams As Long
Dim Target As Variant
ans = ws1.ListObjects("TableNordics").DataBodyRange.Rows.Count

Target = ws1.ListObjects("TableNordics").DataBodyRange(ans, 8).Value

End Sub

但是,我无法为总计行找到类似的东西(请注意,消息框只是为了查看该值是否有效

Sub Table_Lastrow()

Dim ams As Long
ans = ActiveSheet.ListObjects("TableNordics").TotalsRowRange.Value
MsgBox "Last row in Table is  " & ans
End Sub

当我让它工作时,我想将工作表和 Table 名称更改为可变的,例如。我将在单元格 A1 和 A2 中输入名称,我已经为第一个公式尝试了一些方法,但我无法让它工作。

您只需要引用最后一列中的单元格,可以使用 .ListColumns.Count:

Dim tbl As ListObject
Set tbl = ws1.ListObjects("TableNordics")

With tbl
    ans = .TotalsRowRange.Cells(.ListColumns.Count).Value
End With

您可以使用 ListObject.TotalsRowRange 属性 访问总计行值。您需要确保 ListObject.ShowTotals = True 以确保避免可能的 Object variable or With block variable not set error.

我个人会使用 WorksheetFunction.Subtotal(参见 TargetAverage())到 return 值。这样,如果 TotalsRowRange 公式发生变化,您就不必更新代码。

Public Function wsNordics() As Worksheet
    Set wsNordics = ThisWorkbook.Worksheets("Nordics")
End Function

Public Function TableNordics() As ListObject
    Set TableNordics = wsNordics.ListObjects("TableNordics")
End Function

Public Function TargetAverage() As Double
    With TableNordics.ListColumns("Target")
        TargetAverage = WorksheetFunction.Subtotal(101, .DataBodyRange)
    End With
End Function

Public Function TableNordicsTargetAverage() As Double
    With TableNordics
        .ShowTotals = True
        With .TotalsRowRange
            TableNordicsTargetAverage = .Cells(, .Columns.Count)
        End With
    End With
End Function