01-VBA

演算子|Excel VBA (Part.3)【比較演算子】条件の発展的な利用(前編)

目標

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つのプロシージャについては次回記事の内容になります。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
01-VBA

演算子|Excel VBA (Part.1)【算術演算子・代入演算子】| 現役エンジニア&プログラミングスクール講師

2022年10月24日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の イベント編(Part.1)3つのプロシージャ /引数のByVal(値渡し)とByRef(参照渡し)| 現役エンジニア&プログラミングスクール講師

2022年12月29日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

クラスの利用方法|Excel VBA (Part.1) | 現役エンジニア&プログラミングスクール講師

2023年2月17日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

制御構文|Excel VBA (Part.10)【Do Loop】実用的なプログラム編 | 現役エンジニア&プログラミングスクール講師

2022年12月2日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

制御構文|Excel VBA (Part.8)【For Each In Next】| 現役エンジニア&プログラミングスクール講師

2022年11月29日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の「オブジェクト活用」(Part.4)【ブック活用編】| 現役エンジニア&プログラミングスクール講師

2022年12月17日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site