下移公式的功能

Function to shift down formulas

我在随机的第一行有几个公式 table。我正在尝试向下移动/将它们复制到下面的多行。部分公式被复制,部分留空

原版Table

我尝试调整大小,但它不适用于 table。

调整大小 Table - headers 被复制,公式被删除。

Sheets(destinationSheet).Rows(startrow + 1 & ":" & startrow + 2).Insert Shift:=xlDown

公式在某些列中被复制,而对于其他列,我得到空白单元格。

我还尝试了不同的代码(在每一行的循环中):

ActiveSheet.Rows(.HeaderRowRange.Row + .ListRows.Count + 1).FillDown '1st example
ActiveSheet.Rows(.HeaderRowRange.Row + .ListRows.Count + 1).Insert '2nd example

.Resize (ActiveSheet.Range(.HeaderRowRange(1, 1), Cells(.HeaderRowRange.Row + .ListRows.Count + 1, .ListColumns.Count + 1)))

第一个示例为所有列正确复制了公式,但覆盖了下面的行(不会每次都创建新行)。
第二个示例在 table 中创建一个新行,但仅复制部分公式。

新样本table比较

也许然后尝试这样的事情:

更快的方法是:

Range("A1:A10").Formula = "=C1+B1"

慢一些..

Range("A1").Formula = "=C1+B1" 'Replace by your formula
Range("A1").Copy
Range("A1:A10").Pastespecial(XlPasteall)

您也可以使用 FillDown :

Range("A1").Formula = "=C1+B1"
Range("A1:A10").FillDown

注意 :更快的方法是第一个命题,因为它会使用公式自动填充(FillDown)范围。

编辑 在你的情况下,这将完美地工作:

ActiveSheet.ListObjects("Tableau1").DataBodyRange.FillDown

通过您的选项卡名称更改 Tableau1.. 这里 DataBodyRange 用于 select 您的 table 数据。

编辑 2 不使用 DataBodyRange

Sub SelectTableBody()
    Dim rTableData As Range

    With ThisWorkbook.Worksheets(1)
        Set rTableData = .ListObjects("Table1").DataBodyRange
        Set rTableData = rTableData.Offset(0, 1) _
          .Resize(, rTableData.Columns.Count - 2)
    End With

    rTableData.FillDown
End Sub