
[英]Excel VBA: Using .Cells() to dynamically reference cell in cell formula
[英]VBA Execute excel formula with cell reference in many different cells
我有一个+ 40Mb的Excel工作簿。 原因是几张工作表使用的公式超过30列和20000行。 我希望VBA代替600000公式来计算这些单元格。
我需要一个VBA脚本来计算以下内容:列A行2:
"=IFERROR(IF(MATCH(Sheet1!G3;Sheet2!K3:AE3;0);1;0);0)"
第三列:
"=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的新手,不知道从哪里开始。
提前很多thanx!
根据您的要求,我认为您更简单的解决方案是仍然让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
, G4
),然后将该公式放入单元格A2
接下来,将其复制到整个范围
最后,将公式转换为值。
希望这有道理/能解决问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.