0

こんにちは、なぜランタイム エラー 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/
4

2 に答える 2

4

交換品を分析しましょう:

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を逆に)...

質問を1つか2つ残しておきます。どうしてこんなに面倒になったのですか?「DRY」(Do n't Repeat Yourself)について聞いたことがありますか?

于 2009-06-30T23:54:50.077 に答える
0

「交換」の議論は長すぎると思います。その文字列を 255 文字未満に保つ必要があります。置換が 255 文字未満になるように、式を Selection.FormulaArray 行に追加します。

于 2009-06-30T00:39:54.673 に答える