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
更容易,避免使用 ActiveCell
和 Select/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)
我正在尝试为一个程序获取正确的范围,该程序应该在给定的 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
更容易,避免使用 ActiveCell
和 Select/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)