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
接下来,将其复制到整个范围
最后你将公式转换成值。
希望这是有道理的/做的伎俩!