【问题标题】:Excel VBA to Select Rows Down That Include BlanksExcel VBA 向下选择包含空白的行
【发布时间】:2022-06-10 20:16:44
【问题描述】:

我正在尝试创建一个宏来将单元格复制到表格的整个列中,希望在这些公式被更改或替换时充当“刷新”。

我在同一张工作表中有多个表格,因此我无法选择表格名称,因为它们会不断变化。

我在想的是有一个带有关键字的底行,VBA 可以向下选择该关键字,直到他们点击关键字并选择这些单元格来复制公式。

问题是我有多个表,它们都有关键字的底行。

当我录制宏时,我必须多次按 Control+Shift+Down 来解决丢失的行,我想这并非总是如此。这就是这个宏让我害怕的地方,因为有时一个表没有丢失的数据,所以 xlDown 函数会选择比它应该选择的更多的数据。

这是我记录的:

Sub Macro9()
'
' Macro9 Macro
'

'
    ActiveCell.Offset(3, 2).Range("A1").Select
    Range(Selection, Selection.End(xlToLeft)).Select
    Selection.Copy
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Paste
End Sub

这是我尝试恢复公式的列的示例:



我希望填写“总价”下方的公式,直到找到“总价”一词。请注意,如果工作表的其他地方没有数据,则公式会被隐藏。

此工作表上有多个表格,因此必须在同一张工作表的不同部分工作。

【问题讨论】:

  • 您的“表格”是实际的表格/列表对象,还是只是常规范围?如果将它们转换为 ListObjects,您可能会发现它们更易于管理。
  • 它们是实际的表格。
  • 表格有一个 DataBodyRange 属性,它返回表格数据的范围 - 您可以使用它来确定要填充的范围

标签: excel vba


【解决方案1】:

如果你有实际的表/列表对象,那么你可以这样做:

Sub FillDownFormulas()

    Dim lo As ListObject, col As Range
    
    For Each lo In ActiveSheet.ListObjects
        For Each col In lo.DataBodyRange.Columns
            If col.Cells(1).HasFormula Then         'first cell in column has a formula?
                col.Formula = col.Cells(1).Formula  'fill formula to rest of column
            End If
        Next col  'next column
    Next lo       'next table

End Sub

【讨论】:

    【解决方案2】:

    最简单的方法之一(对于通常不使用 VBA 的人)是获取表中最后一行的编号。您可以通过计算表中的值或使用您自己的代码通过使用始终填充的列来做到这一点,例如:

    last_row = Range("B2").end(xldown).row
    

    使用 last_row 值,您可以在范围内填充公式,例如:

    Range("C2").value = 'Your Formula here     
    Range("C2").AutoFill Destination:=Range("C2:C" & last_row)
    

    您可以对所需的每一列执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多