【问题标题】:Excel VBA Last Row / Column Script?Excel VBA最后一行/列脚本?
【发布时间】:2022-10-24 16:53:19
【问题描述】:

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

我想总是在最后一列数据之外选择一列,然后用从第 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)

我收到语法错误。 Range 类的 AutoFill 方法失败了,所以我知道是那条线。

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

【问题讨论】:

  • 提示:Debug.Print LastColumn & "4" & ":" & LastColumn & LastRow 并检查立即窗口中的输出。
  • @BigBen 我看到 304:3035。所以我明白为什么这是错误的。如何将数字变成字母?我可以看到它只是将它们组合成巨大的字母。最后一列是 30,最后一行是 35。

标签: excel vba


【解决方案1】:

在此处使用Cells 并避免使用ActiveCellSelect/Selection 更容易。也无需使用AutoFill,因为您可以一步将公式写入多单元格区域。

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

【讨论】:

    【解决方案2】:

    也许是这样的?

    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 变量用于获取数据透视表列的总计单元格。
    rg 变量用于获取将要填充公式的范围。

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

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

    【讨论】:

      猜你喜欢
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多