「excel vba iferror関数」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
Excel VBA(Visual Basic for Applications)から、IFERROR関数を使った数式をセルに入力するためには、どのようなコードを書けばいいのかを探している方による検索でしょうか。
「"」ダブルクォートを入力するには
「excel vba iferror ""でエラーが」
という検索キーワードは、何に困っていたのかが明確です。
IFERROR関数の第2引数・エラーの場合の値に、空白文字列を指定しようと「"」(ダブルクォーテーション)を2個書いたのでしょう。
そのようなプロシージャを実行すると、
「実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。」
という実行時エラーが発生します。
「excel vba iferror ""でエラーが」
という検索をなさった方は、その解決策を探していらしたのでしょう。
「"」を入力したい場合は、VBAのコード上では「""」のように2個書いてあげる必要があります。
ということは、「""」とダブルクォーテーション2個をセル内に入力したい場合は、VBAのコード上では「""""」のようにダブルクォーテーションを4個書く必要があります。
Range.FormulaプロパティでIFERROR関数を入力するサンプルマクロ
ということを踏まえて、IFERROR関数を使った数式をセルに入力するマクロは以下のとおりです。
Range("C1:C10").Formula = _
"=IFERROR(A1/B1, """")"
上記のマクロを実行すると、
C1セルに「=IFERROR(A1/B1, "")」
C2セルに「=IFERROR(A2/B2, "")」
といった、相対参照の数式がC10セルまで入力されます。
代入文の左辺のRangeオブジェクトを指定するオブジェクト式は、勿論さまざまな書き方ができます。
Rangeプロパティの引数を2つ使う、
Range("C1", "C10").Formula =
でもOKですし、
Range(Cells(1, 1), Cells(10, 1)).Formula =
のように、RangeプロパティにCellsプロパティを組み合わせてもOKです。
Range.FormulaR1C1プロパティでIFERROR関数を入力するサンプルマクロ
上記のようなRangeオブジェクトのFormulaプロパティを使うオブジェクト式を理解しやすいと感じる方が多いと思いますが、Range.FormulaR1C1プロパティを使ったマクロも一応ご紹介しておきます。
Range("C1:C10").FormulaR1C1 = _
"=IFERROR(R[0]C[-2]/R[0]C[-1], """")"
先ほどのマクロでは代入文の右辺で指定しているIFERROR関数の第1引数が「A1/B1」でしたが、R1C1形式ですので「R[0]C[-2]/R[0]C[-1]」となっています。
IFERROR関数を入力するセルから見て、
行は同じですから、行(Row)を表す「R」の後ろに [0] を、
R[0]C[-2]/R[0]C[-1]
列(Column)を表す「C」の後ろに2つ左隣を表す [-2] と、
R[0]C[-2]/R[0]C[-1]
1つ左隣を表す [-1] を、
R[0]C[-2]/R[0]C[-1]
それぞれ書いています。
マクロ記録機能を使うと代入文の右辺は
"=IFERROR(RC[-2]/RC[-1], """")"
というコードが作られます。これは上記マクロで使っている、
"=IFERROR(R[0]C[-2]/R[0]C[-1], """")"
という書き方の「R」の後ろの [0] を省略した記述です。
R1C1形式の書き方に慣れていない方の場合は [0] を書いておくほうが理解しやすいのではないかと思います。
Home » Excel VBA Rangeオブジェクト » セル数式 » VBAからIFERROR関数を入力する