2014-03-25 43 views
1

我有+ 40兆字節的Excel工作簿。原因是使用30列和20000行範圍內的公式的多個工作表。我想用VBA來計算這些單元而不是600000個公式。VBA執行Excel公式與單元格引用在許多不同的細胞

我需要的是一個VBA腳本來計算如下: A列第2行:

"=IFERROR(IF(MATCH(Sheet1!G3;Sheet2!K3:AE3;0);1;0);0)" 

列一排3:

"=IFERROR(IF(MATCH(Sheet1!G3;Sheet2!K4:AE4;0);1;0);0)" 

... 列一列20000:

"=IFERROR(IF(MATCH(Sheet1!G3;Sheet2!K20001:AE20001;0);1;0);0)" 

列B行2:

"=IFERROR(IF(MATCH(Sheet1!G4;Sheet2!K3:AE3;0);1;0);0)" 

B列第3行:

"=IFERROR(IF(MATCH(Sheet1!G4;Sheet2!K4:AE4;0);1;0);0)" 

... 列B行20000:

"=IFERROR(IF(MATCH(Sheet1!G4;Sheet2!K20001:AE20001;0);1;0);0)" 

等了其他列。

任何人都可以幫忙嗎?我是VBA的新手,不知道從哪裏開始。

許多thanx提前!

+0

第一個問題 - 你爲什麼要移動這VBA?這是由於表單的大小還是計算需要很長時間?因爲如果只是計算需要很長時間,您可能會比完整的VBA解決方案做得更簡單。 –

回答

0

給你請求的是什麼,我想你更容易的解決辦法是仍讓Excel做繁重的,但不能把它作爲Excel公式一旦你完成(即其轉換爲數值)。

既然如此,這應該這樣做:

Sub PutInFormulas() 

    ActiveSheet.Range("A2").Formula = "=IFERROR(IF(MATCH(OFFSET(Sheet1!$G$2;COLUMN();0);Sheet2!$K3:$AE3;0);1;0);0)" 
    ActiveSheet.Range("A2").Copy ActiveSheet.Range("A2:AD20000") 
    ActiveSheet.Range("A2:AD20000").Value = ActiveSheet.Range("A2:AD20000").Value 

End Sub 

基本上,你的第一步是要使它成爲一個公式您可以粘貼下來過,所以你有Offset()引用,增量替換您Sheet1!G3一排爲您移動在每個柱(換句話說,在A列的任何公式將引用G3,B列將引用G4等),並把該公式單元格A2

下一頁您在複製它你整個範圍

最後你的轉換公式的值。

希望這是有道理/做的伎倆!

相關問題