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

时间:2014-03-25 14:13:25

标签: excel vba formula

我有一个+ 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的新手,并且不知道从哪里开始。

提前许多人!

1 个答案:

答案 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

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

最后将公式转换为值。

希望这有意义/做到这一点!!