使用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 

但是,当我用数组公式replace一些公式时,出现运行时错误1004,说明PasteSpecial method of Range class failed

有没有办法解决?

正如所评论的,你不能改变数组的一部分。 所以试试这个:

 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 

你需要使用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