目標
VBAの比較演算子について基本を復習し発展的な利用ができる
この記事では前回の演算子Part.2に続いて制御構文で利用する比較演算子について書いています。Part.2ではシンプルな条件を例にしていましたが、ここでは、少し変わった条件の書き方について触れてみたいと思います。
比較演算子の復習
条件に利用される演算子の復習
制御構文の条件には『比較演算子』や『単項演算子(論理演算子のNOT)』が頻繁に利用されます。(※条件には演算子が利用されない場合もあります)
条件に用いられる「比較演算」の復習
比較演算子は左辺と右辺を比べる演算子です。具体的には以下の表の太文字の部分が比較演算子となります。
比較演算子 | 比較演算子の意味 |
左辺 = 右辺 | 左辺と右辺の値が等しい |
左辺 > 右辺 | 左辺の値が右辺の値より大きい |
左辺 < 右辺 | 左辺の値が右辺の値より小さい |
左辺 >= 右辺 | 左辺の値が右辺の値以上 |
左辺 <= 右辺 | 左辺の値が右辺の値以下 |
左辺 <> 右辺 | 左辺と右辺の値が等しくない |
条件の発展的な利用方法
条件の発展的な利用方法(比較演算子を利用しない場合あり)
ここでは前回とは違って少し変わった条件の書き方をいくつか考えてみたいと思います。このうち今回の記事では前半4つをプロシージャを作成して確認していきます。残りの4つは次回の記事で作成していきます。
「IsEmpty関数」の利用 IsEmpty関数は指定セルの中が「空」の場合にTrueを返します 記述例:IsEmpty(Range(“B5”)) のように利用します。 →サンプルプロシージャではセルB5が空の場合を条件としています。 |
「Not」と「IsNumeric関数」の利用 IsNumeric関数は引数に指定された値が数値として変換できない場合(数値でない場合)にTrueを返します。 Notは真偽値を反転させる演算子(論理演算子)です。 →サンプルプロシージャではnumBox変数の値が数値として変換できない場合。 |
「IsDatec関数」の利用 IsDatec関数は引数に指定された値が日付の場合にTrueを返します。 →サンプルプロシージャではdateBox変数に入力された値が日付かを確認する。 |
複数選択した連続するセルを条件に利用 複数選択した連続するセルに対して、繰り返しの処理を行う →変数MyRangeをRange型として宣言し、表として認識できるH列で、条件(値が100以上)に合うセルを赤くする。 |
選択したセルを条件に利用 セルが選択された時、値が「空」の場合にTrueを返すWorksheet_SelectionChangeを利用。 ※セル選択時にプロシージャを起動するイベントWorksheet_SelectionChangeを利用します。Worksheet_SelectionChangeの引数にはTarget変数を利用します。これはワークシートが持つイベントプロシージャです。記述は個別のワークシートのプロシージャとして記述します。ここでは「Sheet1」にプロシージャを記述します。 |
MsgBoxが持つボタンの定数を条件に利用 →vbYesとvbNoが押された場合で条件を分ける。 |
FileSystemObjectを利用してフォルダの有無を条件として利用。 FileSystemObjectはOSのファイル管理のプログラムを利用するためのプログラム。 →FileSystemObjectのFolderExistsメソッドを利用して条件を記述。 |
ユーザーフォームのオプションボタンを条件として利用 →OptionButton1.ValueがTrueの場合。 |
条件の書き方としては、次のようになります。一例ではありますが、よく利用する書き方でもあるので、知っておくと便利です。
「IsEmpty関数」の利用 IsEmpty関数は指定セルの中が「空」の場合にTrueを返します 記述例:IsEmpty(Range(“B5”)) のように利用します。 →サンプルプロシージャではセルB5が空の場合を条件としています。 |
'→下のプロシージャではCellsを利用して5行目2列目のB5を指定しています。
Sub UseIsEmpty()
Dim num1 As Integer, num2 As Integer
num1 = 2
num2 = 5
If IsEmpty(Cells(num1, num2)) Then
MsgBox "条件に合っています。"
End If
End Sub
実行結果
実行結果:セルB5に値が入っていない場合TrueとなりIf文のブロックが処理されます。ここでは「条件に合っています。」と表示されます。
「Not」と「IsNumeric関数」の利用 IsNumeric関数は引数に指定された値が数値として変換できない場合(数値でない場合)にTrueを返します。 Notは真偽値を反転させる演算子(論理演算子)です。 →サンプルプロシージャではnumBox変数の値が数値として変換できない場合。 |
Sub UseIsNumeric()
Dim numBox
numBox = InputBox("値を入力して下さい")
If Not IsNumeric(numBox) Then
MsgBox "数値以外です。今回は条件に合いました。"
Else
MsgBox "数字が入力されました。"
End If
End Sub
実行をすると入力ボックスが表示されます。
数値を入力した場合
実行結果:数値以外を入力した場合
「IsDatec関数」の利用 IsDatec関数は引数に指定された値が日付の場合にTrueを返します。 →サンプルプロシージャではdateBox変数に入力された値が日付かを確認する。 |
事前準備としてワークシート「Sheet1」のセルA1に日付を入力します。
日付の入力はCtrl +;(コントロールとセミコロン)で行います。
Sub UseIsDate()
Dim dateBox
dateBox = Range("A1")
If IsDate(dateBox) Then
MsgBox "日付が入力されています。"
Else
MsgBox "日付ではありません。"
End If
End Sub
実行結果:セルA1に日付が入力されている場合
複数選択した連続するセルを条件に利用 複数選択した連続するセルに対して、繰り返しの処理を行う →変数MyRangeをRange型として宣言し、表として認識できるH列で、条件(値が100以上)に合うセルを赤くする。 |
Sub UseForEach()
Dim MyRange As Range
For Each MyRange In Range(Range("H4"), Range("H4").End(xlDown))
If MyRange.Value >= 100 Then
MyRange.Interior.Color = RGB(255, 0, 0)
End If
Next MyRange
End Sub
実行結果
シートは気象庁のデータを利用したものです。地点ごとの雨量について昨日までの観測史上1位の値で100mmを超える降水量についてセルが赤に塗りつぶすようにプログラムを組んでいます。条件は「H列の全てのセル」についてです。
今回は以上です。
残り4つのプロシージャについては次回記事の内容になります。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。