繁体   English   中英

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

[英]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列将引用G4G4 ),然后将该公式放入单元格A2

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

最后,将公式转换为值。

希望这有道理/能解决问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM