Excel formula excel公式数组

Excel formula excel公式数组,excel-formula,excel-2007,excel,vba,Excel Formula,Excel 2007,Excel,Vba,嗨,为什么会出现运行时错误13:类型不匹配错误 在运行以下代码时 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

嗨,为什么会出现运行时错误13:类型不匹配错误 在运行以下代码时

 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/

我认为“替换”的论据太长了。您需要将该字符串保持在255个字符以下。将更多公式放入Selection.FormulaArray行中,以使替换内容少于255个字符。

我认为“替换”参数太长。您需要将该字符串保持在255个字符以下。将更多公式放入Selection.FormulaArray行,使替换内容少于255个字符。

让我们分析一下您的替换内容:

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) 如果(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相反)


我只想留给你们一两个问题:它怎么会变得如此混乱?你听说过“干”(不要重复你自己)吗?

让我们分析一下你的替代品:

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) 如果(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相反)

我只想留给你们一两个问题:它怎么会变得如此混乱?你听说过“干”(不要重复你自己)吗