ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
VBAのIf文で複数条件を指定するには、条件をAnd(かつ)・Or(または)・Not(否定)の論理演算子でつないで If 条件1 And 条件2 Then のように書く。AndはすべてのTrueでTrue、OrはどれかがTrueでTrue、Notは真偽を反転させる。複数行で書く場合は最後に End If を付ける。
| この記事の要点 |
|---|
|
VBAのIf文の基本
VBAのIf文は「条件がTrue(真)のときに処理を実行する」構文である。1行で書く形式と、複数行で書く形式(ブロックIf)がある。複数の条件を扱う場合は、可読性の高い複数行形式が基本となる。
|
If 条件 Then ' 条件がTrueのときの処理 End If |
このとき「条件」には、比較演算子を使った式(例:x >= 10)を書く。VBAの主な比較演算子は次のとおり。等しいかどうかの比較は =(イコール1つ)である点に注意したい。
| 演算子 | 意味 | 例 |
|---|---|---|
| = | 等しい | x = 10 |
| <> | 等しくない | x <> 10 |
| > / < | より大きい / より小さい | x > 10 |
| >= / <= | 以上 / 以下 | x >= 10 |
And(かつ):すべての条件を満たすとき
And は、左右の条件が両方ともTrueのときだけ全体がTrueになる演算子である。「点数が80以上、かつ100以下」のように、複数の条件を同時に満たすかを判定したいときに使う。
|
Dim score As Long score = Range("A1").Value
If score >= 80 And score <= 100 Then MsgBox "合格(80〜100点)" End If |
この例では、A1の値が80以上で、なおかつ100以下のときだけメッセージが表示される。どちらか一方でも満たさなければ全体はFalseとなり、処理は実行されない。
Or(または):いずれかの条件を満たすとき
Or は、左右の条件のどちらか一方でもTrueなら全体がTrueになる演算子である。「土曜日、または日曜日」のように、複数の条件のいずれかに当てはまるかを判定したいときに使う。
|
Dim day As String day = Range("B1").Value
If day = "土" Or day = "日" Then MsgBox "休日です" End If |
B1が「土」または「日」のいずれかであれば、メッセージが表示される。両方を満たす必要はない。
Not(否定):条件を満たさないとき
Not は、条件の真偽を反転させる演算子である。Not 条件 は「条件がFalseのとき」にTrueとなる。「セルが空白でないとき」のように、ある状態の否定を判定したいときに使う。
|
If Not IsEmpty(Range("C1").Value) Then MsgBox "C1に入力があります" End If |
この例では IsEmpty が「空白ならTrue」を返すため、Not を付けることで「空白でないとき」を判定している。
組み合わせと優先順位:括弧で明示する
AndとOrを混在させると、評価順によって結果が変わる。VBAでは And が Or より先に評価される(Andの方が優先順位が高い)。意図しない結果を避けるため、括弧で評価の順序を明示するのが安全である。
|
' 「会員」かつ「(東京 または 大阪)」 If isMember = True And (area = "東京" Or area = "大阪") Then MsgBox "対象者です" End If |
括弧を付けない isMember = True And area = "東京" Or area = "大阪" は、Andが先に評価されるため「(会員かつ東京)または大阪」という別の意味になってしまう。条件が増えるほど括弧で意図を明確にしておくとよい。
ElseIfで複数のパターンに分岐する
3つ以上の条件で処理を分けたいときは、ElseIf を使う。上から順に条件を判定し、最初にTrueになったブロックだけが実行される。どれにも当てはまらない場合は Else が実行される。
|
Dim score As Long score = Range("A1").Value
If score >= 80 Then MsgBox "A評価" ElseIf score >= 60 Then MsgBox "B評価" Else MsgBox "C評価" End If |
上から評価されるため、最初の score >= 80 がTrueなら「A評価」だけが実行され、以降のElseIf・Elseは評価されない。範囲を区切る条件では、判定の順序を意識して並べる。
他言語(&& / ||)との違い
C系(C/C++/Java/JavaScriptなど)の言語では、論理積に &&、論理和に || を使うが、VBAではこれらは使えない。VBAでは英単語の And・Or・Not を使う。&(アンパサンド1つ)はVBAでは文字列連結の演算子であり、論理演算子ではない点も混同しやすいので注意したい。
| 意味 | VBA | C系言語 |
|---|---|---|
| かつ | And | && |
| または | Or | || |
| 否定 | Not | ! |
落とし穴:ここに注意
| 注意点 | 内容 |
|---|---|
| 短絡評価されない | VBAのAnd・Orはショートカット(短絡)評価をしない。一部の言語では && の左がFalseなら右を評価しないが、VBAは左右の条件を常に両方とも評価する。たとえば If Not obj Is Nothing And obj.Value > 0 Then のように書いても、左がFalseでも右の obj.Value が評価されエラーになり得る。こうした場合はIfをネスト(入れ子)にして段階的に判定する。 |
| 等価比較は = | VBAの「等しいか」の比較は =(イコール1つ)。C系の == は使えない。代入と比較で同じ = を使う点に慣れる必要がある。 |
| End If の付け忘れ | 複数行(ブロック)形式のIfには、必ず End If が必要。付け忘れるとコンパイルエラーになる。なお1行で完結させる場合(If x > 0 Then MsgBox "OK")はEnd If不要だが、複数条件では複数行形式が読みやすい。 |
| 条件の省略不可 | If x = 1 Or 2 Then のような書き方はできない。各条件を If x = 1 Or x = 2 Then のように、それぞれ完全な比較式で書く必要がある。 |
よくある質問(FAQ)
Q. AndとOrはいくつでもつなげられますか?
A. つなげられる。If a > 0 And b > 0 And c > 0 Then のように複数のAnd・Orを連結できる。ただしAndとOrを混在させるときは、前述のとおり括弧で評価順を明示すると安全である。
Q. 「○以上△以下」をまとめて書けますか?
A. VBAには 10 <= x <= 20 のような連続した範囲指定の構文はない。If x >= 10 And x <= 20 Then のように、Andで2つの条件をつないで書く。
Q. 短絡評価が必要な場合はどうすればよいですか?
A. VBAのAnd/Orは短絡しないため、「左がFalse/Nothingのときは右を評価したくない」場合はIf文をネスト(入れ子)にする。たとえば If Not obj Is Nothing Then で外側を判定し、その内側でさらに If obj.Value > 0 Then と判定すれば、安全に段階評価できる。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- マクロとボタンの紐づけ方法
- 開発タブの表示
- モジュールの名前変更方法
- エラー一覧
- シートのコピー
- デバッグで一行ずつ実行する方法
- 変数宣言時のSETありなしの違い
- if文で複数条件を指定する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?