gpt4 book ai didi

vba - 如何使用 Excel VBA 在表格内水平复制公式?

转载 作者:行者123 更新时间:2023-12-02 22:26:35 26 4
gpt4 key购买 nike

所以我的数据看起来像这样

tables in excel

前两个表对第三个表中的某些数据进行平均。

我正在尝试编写一个宏来向每个表添加一个额外的列,并同时复制前一列中的公式。添加新列进展顺利,但复制给我带来了问题。

这是我到目前为止所拥有的:

 Sub What()

Dim m As Integer
Dim n As Integer
Dim TableName As String
Dim i As Integer
Dim x As Integer
Dim LastRow As Integer

For i = 1 to 12
TableName = "Table" & i

With ActiveSheet.ListObjects(TableName)

.ListColumns.Add

n = .ListColumns.Count
m = n - 1

'this is filling in the first row, with the column number (needed for formulas in the real data)
.DataBodyRange(1, n).Value = n
.DataBodyRange(1, n).NumberFormat = "General"

LastRow = .ListRows.Count

'this is where I'm trying to copy the formula over to the right
For x = 2 To LastRow
.DataBodyRange(x, n) = .DataBodyRange(x, m).Formula
Next x

End With

Next i

End Sub

这样做的问题是它直接复制公式,因此表 A1 的新 F 列仍然对表 A3 中 E 列的值进行平均。

在我现在的代码之前,我尝试过自动填充(如下所示:

Range("K4").Select
Selection.AutoFill Destination:=Range("K4:L4"), Type:=xlFillDefault

)

但我不需要它来引用一个范围,我需要它来引用一个表格单元格,就像ActiveSheet.ListObjects("Table1").DataBodyRange(3, 2) 。我天真地尝试将其作为目的地

ActiveSheet.ListObjects("Table1").ListColumns.Add
ActiveSheet.ListObjects("Table1").DataBodyRange(1, 2).Select
Selection.AutoFill Destination:=ActiveSheet.ListObjects("Table1").DataBodyRange(1, 3), Type:=xlFillDefault

并被告知

Run-time error '1004': AutoFill method of Range class failed

我在谷歌上搜索到的所有资源都涉及在列中填充公式,但由于我的数据的方向,我需要它水平复制,而不是垂直复制,而且我还没有找到任何相关内容。有人可以帮我解决这个问题吗?

非常感谢~

最佳答案

  • Destination 应包含起始单元格/范围和目标单元格/范围。两者
  • 自动填充也可以一次性完成,而不是从第二行到最后一行的当前循环。
  • 无需使用SelectSelection

像这样的东西演示了这个概念 - 根据需要进行修改:

Option Explicit

Sub AutoFillRight()
Dim myTbl As ListObject: Set myTbl = Sheet1.ListObjects("Table1")
Dim sourceRng As Range, destRng As Range
Dim lastRow As Long, lastCol As Long

With myTbl
.ListColumns.Add

lastRow = .ListRows.Count
lastCol = .ListColumns.Count

If lastRow > 1 Then
Set sourceRng = Range(.DataBodyRange(2, lastCol - 1), .DataBodyRange(lastRow, lastCol - 1))
Set destRng = Range(.DataBodyRange(2, lastCol - 1), .DataBodyRange(lastRow, lastCol))

sourceRng.AutoFill Destination:=destRng, Type:=xlFillDefault
End If
End With
End Sub

关于vba - 如何使用 Excel VBA 在表格内水平复制公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52524912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com