我知道使用“ .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.关于使用数组变量将某些公式复制到多个范围的方法有何建议?
谢谢。
答案 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