使用总行查找 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
我有一个 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