使用VBA复制和粘贴数组公式

时间:2014-08-05 18:43:47

标签: excel excel-vba vba

我有一些连续的公式。我想将它们复制到其余数据的末尾。

使用普通公式时,以下代码有效:

With Sheets("Sheet1")
    Set formRange = Range(.Range("G2"), .Range("O2").End(xlToRight))
    formRange.Copy
    formRange.Resize(Range("D" & Rows.Count).End(xlUp).Row - 1).PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False
    .Range("A1").Select
End With

但是,当我用数组公式替换一些公式时,我得到一个运行时错误1004,表示PasteSpecial method of Range class failed

有什么方法吗?

2 个答案:

答案 0 :(得分:2)

如评论所述,您无法更改数组的一部分。所以试试这个:

Dim formRange As Range, arrForm As String

With Sheets("Sheet1")
    Set formRange = Range(.Range("G2"), _
        .Range("O2").End(xlToRight))
    arrForm = formRange.FormulaArray
    formRange.ClearContents
    formRange.Resize(.Range("D" & _
        .Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm
End With
不过,请注意我在这一行中添加的额外点:

formRange.Resize(.Range("D" & _
    .Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm

我认为您与同一张纸的 D列有关 如果它只是几个范围内的一个数组公式输出,则上述工作 如果每个单元格具有不同的数组公式,那么只需在代码中添加偏移量,如下所示:

With Sheets("Sheet1")
    Set formRange = Range(.Range("G2"), _
        .Range("O2").End(xlToRight))
    formRange.Copy
    formRange.Offset(1, 0).Resize(.Range("D" & _
        .Rows.Count).End(xlUp).Row - 1).PasteSpecial xlPasteFormulas
End With

答案 1 :(得分:1)

您需要使用Range.FormulaArray方法:

With Worksheets("Sheet1")
    Set formRange = Range(.Range("G2"), .Range("O2").End(xlToRight))
    formRange.Copy
    Set newRange = (Range("D" & Rows.Count).End(xlUp).Row - 1)
    newRange.FormulaArray = formRange
    Application.CutCopyMode = False
    .Range("A1").Select
End With