我有一个+ 40Mb的excel工作簿。 Reason是几张使用30列和20000行范围内的公式的工作表。我希望VBA计算这些单元格而不是600000公式。
我需要的是一个VBA脚本来计算以下内容: 第A栏第2行:
"=IFERROR(IF(MATCH(Sheet1!G3;Sheet2!K3:AE3;0);1;0);0)"
第A栏第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的新手,并且不知道从哪里开始。
提前许多人!
答案 0 :(得分: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
基本上,您的第一步是将其设为一个可以粘贴到其中的公式,因此您将Sheet1!G3
替换为Offset()
引用,该引用会为您移动的每列增加一行(In换句话说,A列中的任何公式都会引用G3
,B列会引用G4
等,并将该公式放入单元格A2
接下来,将其复制到整个范围
最后将公式转换为值。
希望这有意义/做到这一点!!