2016-11-28 99 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次,但在進入一些自動填充邏輯之前似乎這樣做了一次,這可能導致意想不到的結果。爲什麼,我不知道。 –