excel公式arrays

嗨,为什么我得到运行时错误13:types不匹配错误,而运行下面的代码

Application.Goto Reference:="R1C1:R232C221" Selection.FormulaArray = "=ROUND(a(),0)" Selection.Replace What:="a()", Replacement:="IF(IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _ "Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _ "Sheet4!A1:HM232+Sheet5!A1:HM232)=2,0,IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _ "Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0,Sheet4!A1:HM232+Sheet5!A1:HM232))", LookAt _ :=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ ReplaceFormat:=False Range("I9").Select 

1)我知道formulaarray应该是R1C1风格…但是A1风格不是必须的,它在A1风格也没有任何问题

  http://msdn.microsoft.com/en-us/library/bb208529.aspx 

2)我发现这种写作方式

  http://www.dailydoseofexcel.com/archives/2005/01/10/entering-long-array-formulas-in-vba/ 

我相信“替代”的说法太长了。 您需要保留该string在255个字符以下。 将更多的公式放入Selection.FormulaArray行,以便replaceless于255个字符。

让我们来分析一下你的replace:

 Replacement:="IF(IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _ "Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _ "Sheet4!A1:HM232+Sheet5!A1:HM232)=2,0,IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _ "Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0,Sheet4!A1:HM232+Sheet5!A1:HM232))" 

(1)更换Sheet4!A1:HM232+Sheet5!A1:HM232X

 Replacement:="IF(IF(X=2,0," & _ "X)+IF(X=2,0," & _ "X)=2,0,IF(X=2,0," & _ "X)+IF(X=2,0,X))" 

(2)将碎片粘合在一起:

 Replacement:="IF(IF(X=2,0,X)+IF(X=2,0,X)=2,0,IF(X=2,0,X)+IF(X=2,0,X))" 

(3)将IF(X=2,0,X)Y

 Replacement:="IF(Y+Y=2,0,Y+Y)" 

(4)一些评价:

  • 如果X是2,则Y是0,结果是0。
  • 如果X是1,Y是1,结果是0。
  • 如果X是别的,Y是X,结果是2 * X。

(5)所以公式相当于:

 Replacement:="IF(OR(X=2,X=1),0,2*X)" 

(6)所以下一步将取代X(步骤1反向)…

我只是给你留下一两个问题:它是如何变得如此混乱? 你有没有听说过“干”(不要重复自己)?