VBA公式复制到多个单元格

时间:2019-01-01 03:41:18

标签: arrays excel formula

我知道使用“ .PasteSpecial xlPasteFormulas”或“ range.AutoFill”的方法,但是我试图找到一种使用数组变量的方法。

我要将范围C4:D4中的公式复制到具有多个范围的范围C7:D11中。

C4 = A4+B4
D4 = Average(A4:C4)

所以我制作了这样的vba脚本。

Sub test()
Dim  v
v = Range("C4:D4").FormulaR1C1
Range("C7:D11").FormulaR1C1 = v
End Sub

运行vba后,c7和d7中的公式如我所料。

c7 = a7 + b7
d7 = average(A7:C7)

但是其他单元格的公式很奇怪

c8 = a9 + b9
d8 = average(A9:C9)
c9 = a11 + b11
d9 = average(A11:C11)

以此类推.....

我的问题是: 1.为什么会这样? 2.关于使用数组变量将某些公式复制到多个范围的方法有何建议?

谢谢。

2 个答案:

答案 0 :(得分:1)

似乎您在Excel的{​​{1}}中发现了一个错误。另一方面,如果我们在尼特采摘模式下阅读Range.FormulaR1C1 property (Excel),则在

  

设置多单元格范围的公式会填充   范围与公式。

“公式”也可以理解为“ 一个公式”。从来没有说过我们可以设置一个多单元格范围的多个公式。

因此,唯一的方法似乎分两部分进行:

VBA

这应该比通过剪贴板使用复制/粘贴或使用循环设置公式要快。

答案 1 :(得分:1)

似乎excel在C7:D7中将公式的所选范围增加了1,并从0开始,这就是为什么这些正确显示的原因。

我认为您可以通过以下方法解决此问题:

for x = 7 To 11 
    Cells(x, 3).FormulaR1C1 = Range("C4").FormulaR1C1
    Cells(x, 4).FormulaR1C1 = Range("D4").FormulaR1C1
next x

如果这不起作用,您可以尝试在vba代码中编写公式。

示例:

for x = 7 To 11 
Cells(x, 3).value = Cells(x, 2).value + Cells(x, 1).value
Cells(x, 4).value = (Cells(x, 3).value + Cells(x, 2).value + Cells(x, 1).value)/3
next x