Excel VBA 最后一行/列脚本?

Excel VBA Last Row / Column Script?

我正在尝试为一个程序获取正确的范围,该程序应该在给定的 sheet 上找到总计。我在语法上有点挣扎。

我想始终 select 最后一列之外的一列包含数据,然后使用从第 4 行开始的数据自动填充该列。我这里做错了。

Dim LastColumn As Long
Dim LastRow As Long

LastColumn = ActiveSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
LastRow = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Cells(LastColumn + 1).Select
    ActiveWorkbook.ShowPivotTableFieldList = False
    Selection.Copy
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Percent Total"
    ActiveCell.FormulaR1C1 = "=RC[-1]/R34C[-1]"
    Selection.AutoFill Destination:=Range(LastColumn & "4" & ":" & LastColumn & LastRow)

我遇到语法错误。范围 class 的自动填充方法失败所以我知道是那一行。

这就是我要找的东西。示例中创建了AD列,并填充了简单除法的数据。

Picture of Data

这里使用 Cells 更容易,避免使用 ActiveCellSelect/Selection。此外,无需使用 AutoFill,因为您可以一步将公式写入 multi-cell 范围。

With ActiveSheet
    LastColumn = .Cells.Find("*", _
                     SearchOrder:=xlByColumns, _
                     SearchDirection:=xlPrevious).Column
    LastRow =  .Cells.Find("*", _
                   SearchOrder:=xlByRows, _
                   SearchDirection:=xlPrevious).Row
    .Cells(4, lastColumn + 1).Value = "Percent Total"

    Dim rng As Range
    Set rng = .Range(.Cells(5, lastColumn + 1), .Cells(lastRow, lastColumn + 1))

    rng.FormulaR1C1 = "=RC[-1]/R" & lastRow & "C[-1]"
End With

也许是这样的?

Sub test()
Dim FirstData As Range: Dim div As Range: Dim rg As Range
Set FirstData = Cells(4, Columns.Count).End(xlToLeft).Offset(1, 0)
Set div = FirstData.End(xlDown)
Set rg = Range(FirstData, div.Offset(-1, 0)).Offset(0, 1)
FirstData.Offset(-1, 1).Value = "Percent Total"
rg.Value = "=" & FirstData.Address(0, 0) & "/" & div.Address
End Sub

FirstData 变量是获取“总计”下方的单元格。
div 变量用于获取数据透视表 table 列的总计单元格。
rg 变量是获取要用公式填充的范围。

公式不是使用R1C1,而是单元格地址。

如果您不在数据透视 table 选项中使用“显示列的总计”,则 rg 变量如下所示:Set rg = Range(FirstData, div).Offset(0, 1)