2014-03-25 42 views
1

我有+ 40兆字节的Excel工作簿。原因是使用30列和20000行范围内的公式的多个工作表。我想用VBA来计算这些单元而不是600000个公式。VBA执行Excel公式与单元格引用在许多不同的细胞

我需要的是一个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)" 

... 列一列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提前!

+0

第一个问题 - 你为什么要移动这VBA?这是由于表单的大小还是计算需要很长时间?因为如果只是计算需要很长时间,您可能会比完整的VBA解决方案做得更简单。 –

回答

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 

基本上,你的第一步是要使它成为一个公式您可以粘贴下来过,所以你有Offset()引用,增量替换您Sheet1!G3一排为您移动在每个柱(换句话说,在A列的任何公式将引用G3,B列将引用G4等),并把该公式单元格A2

下一页您在复制它你整个范围

最后你的转换公式的值。

希望这是有道理/做的伎俩!

相关问题