🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

ExcelのAND & OR関数 — 条件を正しく組み合わせる(そしてExcelがショートサーキットしない理由)

|

ExcelのAND & OR関数 — 条件を正しく組み合わせる(そしてExcelがショートサーキットしない理由)

要点ANDOR は複数の TRUE/FALSE 判定を受け取り、1つの 結論を返します。AND(…)すべての判定が通ったときだけ TRUEOR(…)少なくとも1つ通れば TRUE。これら自身は何も決めません——役目は IF、条件付き書式のルール、フィルターの第1引数へ 判定を渡すことです。別々の IF を包むのではなく、テストのに入れます: =IF(AND(B2>=60, C2="Yes"), "Pass", "Fail")。人がハマる点が2つ。セルに素の =AND(...) を書くと TRUE という文字が表示されるだけ、そして Excel には ショートサーキットがない——すべての引数を評価するので、AND(A2<>0, B2/A2>1) は依然として #DIV/0! を投げうる。全バージョンで動作します。

=IF(AND(B2>=60, C2="Yes"), "Pass", "Fail")   ' 両方が真でなければならない
=IF(OR(B2>=90, C2="VIP"), "Priority", "Normal")   ' どちらか一方で十分

ANDOR は Excel でいちばん基本的な関数に見えますし、単独で見ればそのとおり です。けれど、これらにまつわる実務のバグはほぼすべて、たった1つの誤解から生まれます ——人はこれらを判断を下すものとして扱いますが、実際にやっているのは票を数えて 1つの答えを返すことだけなのです。この頭の中の絵さえ正しく持てば、ネスト、迷子の TRUE、突然の #DIV/0! はすべて起こらなくなります。

この記事で学べること

  • 考え方の軸:AND/OR票の集計係であって、判断者ではない
  • なぜ IF の第1引数のに入れるべきで、ネストしたIFを包むのではないのか
  • 「〜の間」を意味するのはどちらで、「どちらか」を意味するのはどちらか——そして人が 取り違える理由
  • 素の数式の意外な結果:セルにただ TRUE と出る
  • プログラマーの罠:Excel はショートサーキットしないので、依然としてエラーを出す
  • 配列の力——列全体をテストする——と、AND/OR踏み込めない場所

考え方の軸:判断者ではなく、票の集計係

ANDOR を、挙手の集計だと思ってください。各引数は1人の投票者で、TRUE なら 手を挙げ、FALSE なら手を下ろしたまま。AND は「全員一致か?」を報告します—— 誰も手を下ろしていないときだけ TRUEOR は「誰か1人でも?」を報告します—— 少なくとも1つ手が挙がっていれば TRUE

=AND(B2>=60, C2="Yes", D2<100)   ' 3つすべてが通ったときだけ TRUE
=OR(B2>=90, C2="VIP")            ' どちらか一方が通れば TRUE

これが関数のすべてです。条件でいっぱいの部屋を受け取り、1つTRUE/FALSE に 畳み込む。結果を選んだり、ラベルを表示したり、アクションを起こしたりはしません—— 自分の唯一の結論を、頼んできた相手に手渡すだけです。この絵を持てば、次のルールは 自明になります:AND/OR が結論しか生まないのなら、それを使う何かが別に必要だと。

第1のルール:IFのテストの中に住む、周りではない

人がまず手を伸ばしがちなのは、ネストしたIFの塔です。けれど本当に必要だったのは、 単一の IF の中に入った1つの AND でした。

' ネストのピラミッド — 動くが、読みにくく編集しにくい
=IF(B2>=60, IF(C2="Yes", "Pass", "Fail"), "Fail")

' テストの中の AND — きれいな分岐点ひとつ
=IF(AND(B2>=60, C2="Yes"), "Pass", "Fail")

どちらも同じ答えを出しますが、2つ目は言いたいことを正確に述べています——「合格には 両方が真でなければならない」——を1行の読みやすい式で。ここが肝心な分業です: AND/OR条件を計算し、IF結果を計算する。 「両方とも真でなければならない2つのことがある」というだけの理由で IF をネストしている 自分に気づいたら、必要なのはより大きな IF ではなく——第1引数の中の AND です。 同じ組み合わせテストは、そのまま条件付き書式のルールや FILTER の条件にも落とし込めます。IF は不要です。

「〜の間」は AND、「どちらか」は OR(人が取り違えるやつ)

いちばん頻発するロジックエラーは、範囲テストで間違ったつなぎ手に手を伸ばすことです。 「値が10と20のか」は、両方とも成り立たなければならない2つの条件です—— これは OR ではなく AND です。

=IF(AND(A2>=10, A2<=20), "In range", "Out")   ' 正しい — 間
=IF(OR(A2>=10, A2<=20), "In range", "Out")     ' 誤り — 常に TRUE

OR 版は常に TRUE です:どんな数も 10以上 か 20以下 のどちらか(多くは両方) だからです。OR は「これらのいずれかのバケツに属する」——OR(Region="EU", Region="UK") のように、条件が本当に択一のとき——のために取っておきます。手早い 確認法:同じ値に対して2つのテストが逆方向を指しているなら、ほぼ間違いなく AND が欲しいはずです。

素の数式の意外な結果:セルにただ TRUE と出る

セルに単独で =AND(B2>=60, C2="Yes") と打つと、Excel は関数が約束したとおりのことを します——結論、つまり TRUEFALSE という文字そのものを表示するのです。

=AND(B2>=60, C2="Yes")     ' セルには  TRUE  (または FALSE)と表示される

これはバグではありません。関数が設計どおりに働いているだけです。それは判断の ステップを忘れたという合図です。結果の列に生の TRUE が出ているなら、ほぼ確実に 「これを IF(かルール)で包むつもりだったのに、しなかった」という意味です。直し方は AND を変えることではなく——その結論に消費者を与えることです。

プログラマーの罠:Excelはショートサーキットしない

VBA、Python、C から来たなら、AND が最初の FALSE で止まると期待するでしょう—— A2<>0 AND B2/A2>1A20 のとき決して割り算をしないはず、と。Excel は そうは動きません。 ANDOR はまとめる前にすべての引数を評価するので、 割り算はやはり走り、やはりエラーになります。

=IF(AND(A2<>0, B2/A2>1), "OK", "No")   ' A2=0 -> それでも B2/0 を計算 -> #DIV/0!

ここには AndAlso&& のようなガードはありません。危険な計算を守るには、 ネストしなければなりません——外側の IF にガードを置き、危険な部分に決して 到達させないのです。

=IF(A2=0, "No", IF(B2/A2>1, "OK", "No"))   ' A2=0 なら割り算の前に分岐で止まる

これは、ネストが正しくAND が誤りである唯一のケースです。ある引数が、別の 引数が偽のときにエラーを出しうるなら、AND/OR はあなたを守れません——外側の IF (か、最後の手段として IFERROR のラッパー)が 守ります。

配列の力——そして AND/OR がぶつかる壁

どちらの関数も範囲を受け取れて、AND(A2:A100>0)列全体が正であるかを一発で テストします——「すべて有効か?」という単一のチェックのための、本当に便利なのに 見過ごされがちな一手で、今どきの Excel ではスピルします。

けれどここが、その性質が牙を剥く場所でもあります。AND/OR はすべてを1つの 結論に畳み込むので、行ごとのマスクを組み立てるのに使うことはできません。これは 一見もっともらしいですが、間違いです。

=SUMPRODUCT((Region="EU") * AND(Amount>0))   ' 誤り — AND が配列を1つの値に潰す

各行ごとTRUE/FALSE が必要なとき——SUMPRODUCTSUMIFSFILTER の背後にあるエンジンです——は、AND/OR を捨てて、ブール配列に対する算術を代わりに 使います:AND には *、OR には +

=SUMPRODUCT((Region="EU") * (Amount>0), Amount)   ' * = 行ごとの AND
=FILTER(Data, (Region="EU") + (Region="UK"))      ' + = 行ごとの OR

覚え方:条件の集合について1つの答えが欲しいなら AND/OR行ごとに1つずつ 答えが欲しいなら */+。この2つを混同するのが、「配列数式が単一の数値を返して しまう」という質問の半分の元凶です。

大文字小文字を無視する意外な点、IFと同じ

AND/OR の中の比較は Excel のいつもの = を使い、これは大文字小文字を無視 します——C2="yes""Yes""YES""yes" のどれにも同じように一致します。 たいていは助かりますが、ときには困ります。大文字小文字を区別するテスト(IDid のようなコードの照合)なら、比較を EXACT で 包みます。

=IF(AND(EXACT(C2,"Yes"), B2>=60), "Pass", "Fail")   ' "Yes" だけ、"yes" ではない

判断:AND/OR か、ネストしたIFか、+/* マスクか

3つの形、1つの判断です。

  • IF の中の AND/OR — 「N個の条件、1つの結果」の既定。読みやすく、編集しやすく、 ほとんどすべてで正しい。
  • ネストしたIFのテストが、のテストが偽のときにエラーを出しうる場合 (ショートサーキットのケース)、あるいは分岐が本当に別々の問いを尋ねる場合だけ。
  • ブール配列への + / *SUMPRODUCTSUMIFSFILTER、スピル結果へ渡す ために、行ごとの結論が必要なとき。

腕の見せどころは関数を暗記することではありません——問題の形から、この3つのうち今 自分が手にしているのがどれなのかを見抜くことです。

ExcelMaster の使いどころ

ビジネスルールは文として届きます——まだ承認されていない、EUかUKの、1,000ドル超の 注文にフラグを立てる——AND と OR が入り混じって、逆さまに組みやすい代物です。 ExcelMaster はその一文を正しい構造に変えます:フラグが1つ欲しいなら IF の中の AND/OR、同じロジックで SUMIFSFILTER を駆動しなければならないなら */+ の配列マスク。あなたは条件を平易な言葉で述べるだけ。「常に TRUE」や迷子の #DIV/0! を静かに返さない形を、こちらが選びます。

よくある質問

ExcelのANDとORの違いは?

ANDすべての条件が真のときだけ TRUE を返し、OR少なくとも1つが真の とき TRUE を返します。「これらがすべて成り立たなければならない」(「XとYの間」を 含む)には AND、「これらのどれか1つで十分」には OR を使います。

ExcelでANDをIFと一緒に使うには?

ANDIF の第1引数に入れます:=IF(AND(B2>=60, C2="Yes"), "Pass", "Fail")AND が1つの TRUE/FALSE の結論を生み、IF がそれを2つの結果に変えます。条件 ごとに別々の IF をネストしてはいけません。

AND の数式がただ TRUE か FALSE と表示されるのはなぜ?

それが AND の返すすべて——結論——だからです。その結論に対して動く何かで包むのを 忘れています。IF の中に入れる(=IF(AND(...), "Yes", "No"))か、条件付き書式や データ入力規則のルールとして使ってください。

ExcelのAND関数は他の言語のようにショートサーキットする?

しません。Excel はすべての引数を評価するので、AND(A2<>0, B2/A2>1)A20 でも依然として A2 で割り、#DIV/0! を生みます。危険な計算を守るには、AND に 頼らず外側の IF の中にネストします。

行ごとの条件で AND と OR を組み合わせるには?

IF の中ならネストできます——AND(x, OR(y, z))。けれど(SUMPRODUCTSUMIFSFILTER のために)各行の結果が必要なときは、ブール配列に算術を使います:AND には *、OR には +。例:(Region="EU") * (Amount>0)

検証環境

検証環境: Excel 365(Windows 11)— 最終確認 2026-07-04。

関連ガイド: ExcelのIF関数 · ExcelのIFS & SWITCH関数 · ExcelのIFERROR関数 · ExcelのSUMPRODUCT関数 · ExcelのFILTER関数