VBA 論理 Operaトル: Excel VBA の AND、OR、NOT、IF NOT
⚡ スマートサマリー
VBA 論理 Opera演算子は、複数の条件を組み合わせて、単一の真偽値を生成します。このページでは、AND、OR、NOT 演算子について、実行可能なコマンド ボタンの例、完全な真理値表、そしてあまり知られていない Xor、Eqv、Imp 演算子を用いて説明します。

Excel VBA 論理 Operaトー
顧客の注文を処理したいとします。そのためには、まず注文された製品が存在するかどうかを確認します。存在する場合は、在庫数が十分かどうかも確認します。このような場合に、論理演算子が役立ちます。論理演算子は、複数の条件を評価するために使用されます。
それぞれの条件は、 比較演算子 そして、真または偽を返します。その後、論理演算子によってこれらの結果が結合され、最終的な答えが導き出されます。
主な Excel VBA 論理演算子 AND、OR、NOT を次の表に示します。
| S / N | Operator | 詳細説明 | 例: | 出力 |
|---|---|---|---|---|
| 1 | そして | AND: 複数の条件を組み合わせるために使用されます。 すべての条件が true の場合、AND は true と評価されます。 いずれかの条件が false の場合、AND は false と評価されます。 | (1 = 1) かつ (0 = 1) ならば | false |
| 2 | OR | OR: 複数の条件を組み合わせるために使用されます。 いずれかの条件が true と評価されると、OR は true を返します。 それらがすべて false の場合、OR は false を返します | (1 = 1) または (5 = 0) の場合 | true |
| 3 | NOT | NOT: これは逆関数のように機能します。 条件が true の場合は false を返し、条件が false の場合は true を返します。 | 0 = 0 でない場合 | false |
上記の3つの説明は、入力と結果の単一のグリッドとして捉えた方が理解しやすいでしょう。
VBA論理の真理値表 Operaトー
真理値表には、入力のあらゆる組み合わせと、各演算子が返す結果が一覧表示されます。一度真理値表を読めば、後で条件式を作成する際に推測に頼る必要がなくなります。
| 条件A | 条件B | AとB | AまたはB | ない |
|---|---|---|---|---|
| ◯ | ◯ | ◯ | ◯ | × |
| ◯ | × | × | ◯ | × |
| × | ◯ | × | ◯ | ◯ |
| × | × | × | × | ◯ |
覚えておくべきパターンが2つあります。 そして 4行のうち1行のみでTrueを生成するため、選択範囲が絞り込まれます。 OR 1行のみでFalseを生成するため、1行の幅が広がります。 NOT 2つの条件ではなく1つの条件を取るため、独自の列が1つあります。
VBA 論理 Operators 例のソース Code
簡単にするために、ハードコードされた数値を比較します。
「挿入オプション」からシートにActiveXボタンを追加します。
以下の図に示すようにプロパティを設定します。

次の表は、変更する必要があるプロパティと更新する必要がある値を示しています。
| S / N | 管理 | プロパティ | 値 |
|---|---|---|---|
| 1 | コマンドボタン1 | 名前 | ボタンAND |
| キャプション | そして Operator (1 = 1) および (0 = 0) | ||
| 2 | コマンドボタン2 | 名前 | btnOR |
| キャプション | OR Operator (1 = 1) または (5 = 0) | ||
| 3 | コマンドボタン3 | 名前 | そうではない |
| キャプション | NOT Operator Not (0 = 0) |
btnAND_Clickに次のコードを追加します
Private Sub btnAND_Click() If (1 = 1) And (0 = 0) Then MsgBox "AND evaluated to TRUE", vbOKOnly, "AND operator" Else MsgBox "AND evaluated to FALSE", vbOKOnly, "AND operator" End If End Sub
VBA の場合 AND Operaタ
- 「もし (1 = 1) そして (0 = 0) ならば」 if ステートメントは AND 論理演算子を使用して 1 つの条件 (1 = 0) および (0 = XNUMX) を組み合わせます。両方の条件が true の場合、「Else」キーワードの上のコードが実行されます。両方の条件が true でない場合は、「Else」キーワードの下のコードが実行されます。
ここでは両方の条件が満たされているため、ボタンをクリックすると「AND は TRUE と評価されました」と表示されます。
btnOR_Clickに次のコードを追加します
Private Sub btnOR_Click() If (1 = 1) Or (5 = 0) Then MsgBox "OR evaluated to TRUE", vbOKOnly, "OR operator" Else MsgBox "OR evaluated to FALSE", vbOKOnly, "OR operator" End If End Sub
VBA If OR Operaタ
- 「もし (1 = 1) または (5 = 0) ならば」 if文は、論理演算子ORを使用して2つの条件(1 = 1、または5 = 0)を組み合わせます。いずれかの条件が真の場合、elseキーワードの上のコードが実行されます。両方の条件が偽の場合、elseキーワードの下のコードが実行されます。
最初の条件は真で、2番目の条件は偽なので、ORは依然として真を返し、メッセージは「ORは真と評価されました」と表示されます。
btnNOT_Clickに次のコードを追加します
Private Sub btnNOT_Click() If Not (0 = 0) Then MsgBox "NOT evaluated to TRUE", vbOKOnly, "NOT operator" Else MsgBox "NOT evaluated to FALSE", vbOKOnly, "NOT operator" End If End Sub
VBA でない場合 Operaタ
- 「そうでない場合 (0 = 0)」 VBAのIf Not関数は、論理演算子NOTを使用してif文の条件の結果を否定します。内側の条件(0 = 0)は真なので、NOTによって偽となり、「Else」キーワードの下にあるコードが実行されます。内側の条件が偽だった場合、NOTによって真となり、「Else」の上にあるコードが代わりに実行されます。
これら3つのボタンはそれぞれ固定値をテストします。実際の条件はワークシートから読み取られ、両方の演算子ファミリーが組み合わされます。
論理式と比較式を組み合わせる方法 Operaトー
本番環境で使用されるマクロは、ハードコードされた数値をテストすることはほとんどありません。値を読み込み、比較し、それらの比較結果をまとめて一つの判断を下します。以下のマクロは、商品が存在し、数量が十分であり、かつ顧客アカウントが保留状態でない場合にのみ注文を承認します。
Sub ApproveOrder() Dim QtyOnHand As Long Dim QtyOrdered As Long Dim OnHold As Boolean QtyOnHand = Sheet1.Range("B2").Value QtyOrdered = Sheet1.Range("B3").Value OnHold = Sheet1.Range("B4").Value ' All three parts must hold for the order to pass If (QtyOrdered > 0) And (QtyOnHand >= QtyOrdered) And Not OnHold Then Sheet1.Range("B5").Value = "Approved" Else Sheet1.Range("B5").Value = "On hold" End If End Sub
複合条件を読みやすく正確に保つための3つのルール。
- すべての比較を括弧で囲む: VBA は論理演算子より先に比較演算子を評価しますが、括弧はグループをping 症状が悪化した際に、間違いを未然に防ぐためにも、症状を明確にしておくことが重要です。
- And の優先順位が Or より優先されることに注意してください。 AまたはBとC は次のように読みます Aまたは(BとC)もしあなたが言いたかったのなら (AまたはB)かつC括弧は必須です。
- ブール値には「not」を適用しますが、数値には適用しません。 保留中ではありません 自然な読み方。避ける 5ではありませんなぜなら、Not は数値に対してビット演算を実行し、False ではなく -6 を返すからです。
⚠️ 警告: VBA はショートサーキットしません。 (ws が Nothing の場合) または (ws.Name が “Data”) の場合、最初の条件が真の場合でも、2 番目の条件が実行されるため、実行時エラー 91 が発生します。このようなガードをネストされた If 文に分割します。
Xor、Eqv、およびImp OperaVBA の tors
AND、OR、NOTは日常的なほとんどの条件をカバーしますが、VBAにはさらに3つの論理演算子があり、場合によってはIf文のネストよりもはるかに明確にルールを表現できます。
| Operator | の場合に True を返します | 例: | 出力 |
|---|---|---|---|
| Xor | 2つの条件のうち、どちらか一方だけが真であり、両方が真となることはない。 | (1 = 1) XOR (5 = 0) | ◯ |
| 等価 | どちらの条件も同じ値、つまり両方とも真か両方とも偽です。 | (1 = 1) 等価 (2 = 2) | ◯ |
| インプ | 最初の条件は2番目の条件を暗示します。True Imp False のみが偽です。 | (1 = 1) Imp (5 = 0) | × |
XORは3つの中で最も実用的です。「割引は従業員またはロイヤルティ会員に適用されるが、両方に該当する人には適用されない」といったルールに適しています。EqvとImpは主に古いコードや論理演習で登場するため、実際に記述するよりも、それらを認識することが重要です。
