VBA 論理 Operaトル: Excel VBA の AND、OR、NOT、IF NOT

⚡ スマートサマリー

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

  • 🔗 目的: 論理演算子は、1つのif文の中で複数の条件を評価します。
  • そして Operaトール: 結合するすべての条件が真の場合にのみ、Trueを返します。
  • OR Operaトール: 少なくともいずれかの条件が真の場合に真を返します。
  • 🔄 NOT Operaトール: 結果を反転させ、TrueをFalseに、FalseをTrueに変換します。
  • 📊 真理値表: 単一の参照グリッドには、あらゆる入力組み合わせに対する各演算子の結果が表示されます。
  • 🧮 余分 Operators: Xor、Eqv、およびImpは、排他的条件、同等条件、および暗黙的条件を処理します。
  • ⚠️ 短絡なし: VBAは条件のすべての部分を評価するため、ガードテストはネストされたIfの中に配置する必要があります。

VBA 論理 OperaExcel VBA での AND、OR、NOT の構文:

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ボタンを追加します。

以下の図に示すようにプロパティを設定します。

VBA 論理 Operaトー
VBA 論理 Operaトー

次の表は、変更する必要があるプロパティと更新する必要がある値を示しています。

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は主に古いコードや論理演習で登場するため、実際に記述するよりも、それらを認識することが重要です。

上記のコードを含む Excel をダウンロード

よくあるご質問

実質的な制限はありませんが、3つか4つを超えると可読性が急速に低下します。長い条件式は、分かりやすい名前のブール変数に格納し、代わりにその変数をIf文でテストするようにしてください。

数値に適用した場合、Not は論理反転ではなくビット単位の反転を実行します。Not は比較演算子またはブール変数(例: Not (Qty > 0))にのみ適用し、結果が True または False となるようにしてください。

ロジックは一致しますが、構文が異なります。ワークシートの数式では、AND(A1>0, B1>0) のように関数として呼び出されます。VBA では、代わりに If A1 > 0 And B1 > 0 Then のように条件の間に配置されます。

はい。条件を貼り付けると、AIアシスタントがより分かりやすい括弧で書き換えたり、名前付きブール変数に分割したりします。書き換えた条件は真理値表と照らし合わせて確認してください。誤った簡略化は、気づかないうちに動作を変えてしまう可能性があるからです。

はい。式を入力すると、AIアシスタントがすべての入力組み合わせとその結果を表示し、到達不可能な分岐や誤った位置に配置された括弧などを素早く検出します。