Home » ExcelVBA Rangeオブジェクト » セル数式 » VBAからIF関数を入力する

対象:Excel2007, Excel2010, Excel2013

「vba ワークシート関数を入力する if」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

ワークシート関数のIF関数を使った数式を、

VBAからIF関数を入力する

VBA(Visual Basic for Applications)から、入力するにはどうすればいいのかを探している方による検索でしょうか。

例えば、B1セルに、
「=IF(A1>=80, "合格", "")」
という、A1セルの値が80以上だったときに「合格」、そうでなかったら何も表示しない、という数式を入力する操作を、マクロ記録してみると、
 ActiveCell.FormulaR1C1 = "=IF(RC[-1]>=80, ""合格"","""")"
というコードが作られます。

FormulaR1C1プロパティを使った「RC[-1]>=80」といった数式と、「"」(ダブルクォーテーション)がたくさん並ぶため、プログラミングやVBAに慣れていない方の、投げ出したくなる気持ちもわかります。

[スポンサードリンク]

FomulaR1C1ではなくFormulaでOK

マクロ記録を使うとFormulaR1C1プロパティを使った数式が作成されますが、Formulaプロパティを使った数式でも、まったく問題ないということを、まずは知ってください。

Sub Formulaプロパティを使ってIF関数を入力する()

 Range("B1").Formula = "=IF(A1>=80, ""合格"", """")"

End Sub

上記のようなSubプロシージャで、B1セルに「=IF(A1>=80, "合格", "")」という計算式が入力できます。

代入文の左辺「"=IF(A1>=80, ""合格"", """")"」の中、
「=IF(A1>=80, )」
の部分だけに注目しましょう。

通常ワークシート上にIF関数を入力するときとまったく同じ文字列が並んでいます。

FormulaR1C1プロパティを使った「=IF(RC[-1]>=80, 」といったコードの場合、R1C1形式に慣れていない方にとって難易度は上がってしまいますが、「=IF(A1>=80, )」ならワークシート関数のIF関数を使える方ならば、まったく問題ないはずです。

VBAからダブルクォーテーション1個を入力するにはダブルクォーテーションを2個書く

あとは、代入文の右辺「"=IF(A1>=80, ""合格"", """")"」の後半
「 ""合格"", """")」
に、たくさん並ぶ「"」(ダブルクォーテーション)です。

VBAの中で、「"」ダブルクォーテーション1個を入力するためには、「""」のようにダブルクォーテーションを2個書きます。

IF関数を使った数式
「=IF(A1>=80, "合格", "")」の中の、
第2引数「"合格"」の部分を
  VBAから入力するために、
  「""合格""」
  (ダブルクォーテーション2個 合格 ダブルクォーテーション2個)
第3引数「""」(ダブルクォーテーション2個)の部分を
  VBAから入力するために
  「""""」
  (ダブルクォーテーション4個)
を、それぞれ指定しています。

これが、代入文の右辺の「"=IF(A1>=80, ""合格"", """")"」の後半「 ""合格"", """")」です。

複数のセルにIF関数を使った数式を一括入力する

なお、
B1:B10セルに「=IF(A1>=80, "合格", "")」といった相対参照の数式を一気に入力するには、
 Range("B1:B10").Formula = "=IF(A1>=80, ""合格"", """")"
というコードでOKです。ループを回す必要はありません。

もちろん、代入文の左辺側は、Rangeプロパティの引数を2つ指定する
 Range("B1", "B10").Formula = "=IF(A1>=80, ""合格"", """")"
でもOKです。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » セル数式 » VBAからIF関数を入力する

「セル数式」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.