2016-11-28 80 views
0

我连续有几个公式,我想拖动它们。公式很复杂,我没有他们R1C1格式,我不想将它们转换成R1C1,但我想这样做:拖动公式而不拖动

Range(A2:B10).Formula = Range.(A1:B1).Formula

我知道这会给相同公式进入整个范围,我需要一个“拖动效果” - 所以它相对于每一行都有变化,但是没有粘贴的

P.S.我不想复制粘贴的,因为它吃更多的CPU,我想有一些

+1

怎么样'FillDown'方法? –

+0

@ShaiRado谢谢!你知道它是否具有与复制粘贴相同的CPU消耗?我需要的东西是更快... –

+0

从来没有bench-marked这两个与 –

回答

2

定义要用公式填充的范围并使用Range.FillDown

Range("A1:B10").FillDown 

注:范围的第一行(S)必须包括原始的公式

1

一个小小的伎俩:

Sub KopyFormulas() 
    Range("A1:B1").Copy Range("A2:B10") 
End Sub 

将向下复制公式和调整他们作为好 !

+0

谢谢,但不好意思。我知道如何复制粘贴,但我不想使用这种方法,因为它会占用CPU。 –

+0

@SergeyRyabov是的......我明白......不幸的是,它是支持调整活动的复制粘贴。 –

1

对于单个单元格,无需将公式明确地转换为R1C1格式即可使用FormulaR1C1

即使你使用的是标准A1风格引用的,你仍然可以使用

Range("B2:B10").FormulaR1C1 = Range("B1").FormulaR1C1 

,这将有B1向下复制公式的效果。它不会更改默认格式 - 它们仍将以A1格式显示。

对于一个由两个或更多个单元构成的块来说,这似乎存在问题。 (如果需要在一个循环中),你可以通过做这列列:

Range("A2:A10").FormulaR1C1 = Range("A1").FormulaR1C1 
Range("B2:B10").FormulaR1C1 = Range("B1").FormulaR1C1 

不管这是值得冒这个险(相对于简单的.FillDown)是另外一个问题。你可以计时。

顺便说一句 - 我不认为.FillDown是特别低效。你是否做过关闭屏幕更新,将计算设置为手动等通常的优化?

+0

我已经尝试了您的第一个答案的方法,是的,正如您已经注意到的那样,多列公式转移有一些问题。但我也不明白为什么它不起作用。我做了通常的优化,'.FillDown'工作得很好。 –

+0

在多列方法中,“FormulaR1C1”是一个数组而不是简单的字符串。尽管如此,Range(“A2:B10”)。FormulaR1C1 =范围(“A1:B1”)。FormulaR1C1似乎以反直觉的方式扩展该阵列。它不会简单地重复第9行的9次,但在进入一些自动填充逻辑之前似乎这样做了一次,这可能导致意想不到的结果。为什么,我不知道。 –