VBA技術解説
ブール型(Boolean)のis変数・フラグについて

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2024-04-05 最終更新日:2024-04-05

ブール型(Boolean)のis変数・フラグについて


ブール型(Boolean)は、データ型の一種で真偽値(真理値、True/False)を保存するデータ型です。
真(True)と偽(False)の2つの値をだけを保存できるデータ型です。


プログラミングにおいてはIfステートメントで真偽判定して処理を分岐しますが、
この真偽判定の結果を入れておく変数のデータ型がブール型(Boolean)になります。

ブール型(Boolean)変数は、状態を表すという意味で「is変数」と呼んだり、
オン/オフの意味で「フラグ」と呼んだりもします。


ブール型(Boolean)について

VBAでの変数とデータ型の基本については以下を参照してください。
第12回.変数宣言のDimとデータ型|VBA入門
・データ型 ・変数の使い方 ・変数名の規則 ・良く使われる変数名 ・自動型変換、暗黙の型変換 ・変数宣言の必要性 ・Dim変数宣言のまとめ

他のデータ型(数値や文字列"true")をブール型に変換するにはCBool関数を使います。
CBool関数|VBA関数
・CBool関数 ・CBool関数の使用例 ・ブール型 (Boolean)について ・CBool関数の参考 ・データ型変換関数一覧

ブール型(Boolean)は真偽値(True/False)の2つの値(だけ)をとるデータ型です。
・真か偽か
・TrueかFalseか
・正か否か
・良いか悪いか
・オンかオフか
・1か0か
このような2つの状態の結果を入れておく変数のデータ型としてBooleanがあります。
主な使い方としては、ブール型変数に判定結果を入れておき、その後にIfステートメントで処理を分岐させるために使用します。
以下は真偽値について書いたサイト内の記事です。
論理積(And)論理和(Or)と真(True)偽(False)の判定|VBA技術解説
・Trueとは何か、Falseとは何か ・論理積(And) ・論理和(Or) ・Ifステートメントにおける真偽の判定 ・例.指定のフルパスがフォルダかの判定
条件式のいろいろな書き方:TrueとFalseの判定とは|VBA技術解説
If条件式の書き方で、VBAプログラムは大きく様相が変わってきます、VBAを習い始めは、比較演算子で比較した結果が 正しければTrue、間違っていればFalse という事で理解するはずです。しかし、いろいろなサンプルコードを見ていると、「あれっ」比較演算子が無い… というようなIfステートメントやSelectCas…

ブール型(Boolean)変数は、状態を表すという意味で、
is変数
と呼んだりします。
isのバリエーションとして、
has,can等々も使われます。
また、オン/オフの意味で、
フラグ
と呼ぶこともあります。

関数・メソッドではブール値を返す関数は、
is○○
という名前が使われています。
IS関数(対象をチェックし、結果に応じてTRUE,FALSE)|エクセル入門
・IS関数の一覧 ・IS関数の書式 ・IS関数の応用例

VBA関数名 機能
IsArray関数 変数が配列かどうかを示すブール型(Boolean)の値を返します。
IsDate関数 式が日付であるかを示すブール型(Boolean)の値を返します。
IsEmpty関数 変数が初期化されているかどうかを示すブール型(Boolean)の値を返します。
IsError関数 式がエラー値かどうかを示すBoolean値を返します。
IsMissing関数 オプション(Optional)のVariant引数がプロシージャに渡されたかどうかを示すブール型(Boolean)の値を返します。
IsNull関数 式に無効なデータ(Null)が含まれていないかどうかを示すブール型(Boolean)の値を返します。
IsNumeric関数 式を数値として評価できるかどうかを示すブール型(Boolean)の値を返します。
IsObject関数 識別子がオブジェクト変数を表しているかどうかを示すBoolean値を返します。


ブール型(Boolean)のis変数・フラグの使い方

Inputボックスで入力された値が、
「数値で10以上かつ20未満」
であるかどうかを判定した結果をメッセージボックスで表示します。
第23回.メッセージボックス(MsgBox)|VBA入門
・MsgBox関数の構文 ・名前付き引数 ・MsgBox関数のbuttonsの定数 ・MsgBox関数の戻り値の定数 ・MsgBox関数の例文 ・MsgBoxの使い道
第24回.インプットボックス(InputBox)|VBA入門
・InputBox関数の構文 ・名前付き引数 ・InputBox関数の例文
以下に、何通りもの書き方を紹介します。
VBAコード自体は難しいものはありませんので詳しい解説はしません。
簡単なコメント程度の説明のみ記載しています。
実際の使用例のVBAコードを読んで使い方を学んでください。
ただし掲載しているVBAコードは、あくまでいろいろな書き方の紹介として掲載しているものです。
決してこのVBAコードが推奨の書き方ということではありません。
むしろ、勉強の例題として回りくどい書き方のほうが多くなっています。
VBA学習の手助けとして、より多くのVBAコードを読んでもらえれば良いと思います。

「数値で10以上かつ20未満」の判定

Sub sample1()
  Dim v
  Dim is10以上 As Boolean
  Dim is20未満 As Boolean
  Dim is10以上20未満 As Boolean
  v = InputBox("数値を入力してください。")
  If IsNumeric(v) Then
    If v >= 10 Then
      is10以上 = True
    Else
      is10以上 = False
    End If
    If v < 20 Then
      is20未満 = True
    Else
      is20未満 = False
    End If
    If is10以上 = True And is20未満 = True Then
      is10以上20未満 = True
    Else
      is10以上20未満 = False
    End If
    MsgBox "数値で10以上かつ20未満?" & vbLf & is10以上20未満
  Else
    MsgBox "非数値"
  End If
End Sub

かなり回りくどい書き方になっています。
数値判定部分が邪魔なので、まずはここの書き方を変えてみます。

Sub sample2()
  Dim v
  Dim is10以上 As Boolean
  Dim is20未満 As Boolean
  Dim is10以上20未満 As Boolean
  v = InputBox("数値を入力してください。")
  If Not IsNumeric(v) Then
    MsgBox "非数値"
    Exit Sub
  End If
  If v >= 10 Then
    is10以上 = True
  Else
    is10以上 = False
  End If
  If v < 20 Then
    is20未満 = True
  Else
    is20未満 = False
  End If
  If is10以上 = True And is20未満 = True Then
    is10以上20未満 = True
  Else
    is10以上20未満 = False
  End If
  MsgBox "数値で10以上かつ20未満?" & vbLf & is10以上20未満
End Sub

ネストが減ったので少し見やすくなった気もします。
では、10以上20未満の判定の書き方を変えてみましょう。

Sub sample3()
  Dim v
  Dim is10以上 As Boolean
  Dim is20未満 As Boolean
  Dim is10以上20未満 As Boolean
  v = InputBox("数値を入力してください。")
  If Not IsNumeric(v) Then
    MsgBox "非数値"
    Exit Sub
  End If
  is10以上 = (v >= 10)
  is20未満 = (v < 20)
  is10以上20未満 = (is10以上 And is20未満 )
  MsgBox "数値で10以上かつ20未満?" & vbLf & is10以上20未満
End Sub

だいぶすっきりしました。
もう一段階まとめてしまいましょう。

Sub sample4()
  Dim v
  Dim is10以上20未満 As Boolean
  v = InputBox("数値を入力してください。")
  If Not IsNumeric(v) Then
    MsgBox "非数値"
    Exit Sub
  End If
  is10以上20未満 = (v >= 10 And v < 20)
  MsgBox "数値で10以上かつ20未満?" & vbLf & is10以上20未満
End Sub

論理式をまとめるときの参考としては、以下を読んでください。
論理積(And)論理和(Or)と真(True)偽(False)の判定|VBA技術解説
・Trueとは何か、Falseとは何か ・論理積(And) ・論理和(Or) ・Ifステートメントにおける真偽の判定 ・例.指定のフルパスがフォルダかの判定
ここまでくると、数値判定だけを先に行う必要もなさそうですね。

Sub sample5()
  Dim v
  Dim is10以上20未満 As Boolean
  v = InputBox("数値を入力してください。")
  is10以上20未満 = (IsNumeric(v) And v >= 10 And v < 20)
  MsgBox "数値で10以上かつ20未満?" & vbLf & is10以上20未満
End Sub

ただし、非数値による例外エラーがでる判定がある場合は、先のように数値判定を別途先に行っておくようにしてください。

ブール型(Boolean)変数の書き方はIfの書き方ということになります。
そしてIfの書き方は、プログラミングそのものになります。
どのような書き方がよいかはケースバイケースです。
その時々でより良い書き方ができるようになるために、
いろいろな書き方ができるようになっておきましょう。


サイト内の参考ページ

実は奥が深いIfステートメント
プログラムと言うものは、条件により処理を分ける。これにつきます。つまり、この条件が一番問題となります。そして、その記述をするものが、Ifステートメントになります。IFステートメントの基本 まずはIFステートメントの基本を確認しましょう。
論理積(And)論理和(Or)と真(True)偽(False)の判定
・Trueとは何か、Falseとは何か ・論理積(And) ・論理和(Or) ・Ifステートメントにおける真偽の判定 ・例.指定のフルパスがフォルダかの判定
条件式のいろいろな書き方:TrueとFalseの判定とは
If条件式の書き方で、VBAプログラムは大きく様相が変わってきます、VBAを習い始めは、比較演算子で比較した結果が 正しければTrue、間違っていればFalse という事で理解するはずです。しかし、いろいろなサンプルコードを見ていると、「あれっ」比較演算子が無い… というようなIfステートメントやSelectCas…
変数とプロシージャーの命名について
VBAを習い始めると、「変数」について学びます、変数に付ける名前を変数名と呼び、若干の規則はあるが、好きな名前を付けて良いと教わります。好きな名前って…ケイコ、ハルカ、アツコ… まあ、それでも良いけど、入れるデータが分かるような名前がよいですね、わかり易い名前を付けましょう。
複数条件判定を行う時のコツ
・全ての条件を満たしている時 ・どれか一つでも条件を満たしている時 ・全ての条件を満たしていない時 ・条件判定に関連する記事




同じテーマ「マクロVBA技術解説」の記事

VBAでの括弧()の使い方、括弧が必要な場合
VBAにおけるピリオドとカンマとスペースの使い方
変数とプロシージャーの命名について
文字列置換の基本と応用(Replace)
データクレンジングと名寄せ
ForとIfのネストこそがVBAの要点
For Next の使い方いろいろ
複数条件判定を行う時のコツ
ブール型(Boolean)のis変数・フラグについて
VBAのセキュリティリスクについて


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ