VBA在许多不同的单元格中使用单元格引用执行excel公式

我有一个+ 40Mb的Excel工作簿。 原因是使用30列和20000行范围的公式的几张纸。 我想VBA来计算这些单元,而不是600000公式。

我需要的是一个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)" 

…列A行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的新手,不知道从哪里开始。

提前多了!

鉴于你所要求的,我认为你更容易的解决scheme将仍然让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 ,这个引用对于每一个移动的列都增加一行(换句话说,Column A将引用G3 ,B列将引用G4等),并将该公式放在单元格A2

接下来,将其复制到整个范围

最后你将公式转换成值。

希望这是有道理的/做的伎俩!