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:HM232
至X
:
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反向)…
我只是给你留下一两个问题:它是如何变得如此混乱? 你有没有听说过“干”(不要重复自己)?