条件式の考え方
上へ エクセル実践塾2016 条件式の考え方 条件付き書式 関数 エクセル実践塾2013 エクセル実践塾2010 質問の投函 塾長の部屋

 

特集「条件式(論理式)の考え方」

 

 

要望の多い「条件付き書式」のなかでも、つまづきやすい“条件式”について解説します。

条件式(論理式)は、条件付き書式のみならず、IF関数でも核となるものなので、両者を使用する際にはその理解が欠かせません。 本記事がその助けになれば幸いです。

本記事に対する質問や要望などは、気軽にお寄せください。個別の回答は行いませんが、適時この特集記事「条件式(論理式)の考え方」に反映させていきます。

なお、本記事では、最新版であるエクセル2010での解説を中心としますが、旧バージョンによる解説も必要に応じて行います。

 

 

 

 

 

 

1 論理値 TRUE=1、FALSE=0

条件式(論理式)が評価された結果であるTRUE(真)とFALSE(偽)は、論理値の1と0として扱うことができます

1.1 論理値は、加算できる

論理値を加算すれば、条件に合致する度合いを、段階的に評価することができます

【条件付き書式での使用例】目標達成月数で色分けする

あとから設定した条件付き書式のほうが上に表示されて優先適用されるので、値の大から小、もしくは小から大へと順に設定していきます

【IF関数での使用例】目標達成月数の多い人にメッセージを表示する

SUMPRODUCT関数で論理値を加算する条件式にすれば、一定の月数以上の目標達成者にだけメッセージを表示することができます

1.2 論理値を乗算し、AND条件として使う

論理値の乗算では、1(TRUE)のみであるときにだけ、1(TRUE)となります

【条件付き書式での使用例】すべての月で目標を達成した者だけを強調表示する

PRODUCTとINDEXの関数を組み合わせることで、シンプルなAND条件式にできます

【IF関数での使用例】すべての月で目標を達成した者だけにメッセージを表示する

 

 

2 “日付”はシリアル値の整数部、“時間”はシリアル値の小数部

日時の実体は「1900/1/0 0:00」を0とするシリアル値であり、その整数部が年月日を、小数部が時分秒を表します

2.1 日数はシリアル値の減算で求める

シリアル値の1は1日に相当するので、日付の減算ではその間の日数が求められます

【条件付き書式での使用例】特定の日を含む、前後3日間を強調する

比較する日付との差を絶対値で求めて、それがシリアル値3以内となるものを、条件付き書式の条件式とします

【条件付き書式での使用例】A列の同一データ間で、B列で前後30日間に該当する日付を調べる

シリアル値で使われていない桁で、A列のデータを識別し、2つのデータをまとめたもので前後30日を判定します

2.2 シリアル値の小数部で表される“時間”は、計算過程で誤差を生じやすい

無限小数を含む小数の計算では、その過程によっては誤差を生じてしまうので、シリアル値の小数部で行われる時間の計算は、それを加味したうえで行う必要があります

【条件付き書式での使用例】前後1時間で重複するスケジュールをチェックする

すべての日付+時刻と減算を行い、その差が1時間以内になるものを数えます

 

 

3 文字列の有無は検索関数で、重複は対象部分を抜き出して比較

検索することで文字列の有無を、対象となる部分を抜き出して比較することで重複を調べることができます

3.1 エラー回避のためのISNUMBER関数と組み合わせたFIND関数で検索することにより、特定の文字列が含まれているかどうかを調べる

特定の文字列がセルに含まれているかどうかはFIND関数で調べられますが、含まれていない場合にはエラーとなるので、ISNUMBER関数でそれを回避します

【条件付き書式での使用例】関東地方の一都六県に住む人を強調する

あらかじめ一都六県のセルに名前を付けておき、ISNUMBER関数+FIND関数で各セルの検索を行います

3.2 LEFT関数で対象部分を抜き出して比較し、重複しているかどうかを調べる

セル単位での重複はCOUNTIF関数で調べ、一部や複数セルの重複はLEFT関数などで対象部分を抜き出して「=」で比較します

【条件付き書式での使用例】名字と住所の重複を調べて、名前変換ミスの疑いのある人を強調する

便宜上、LEN関数で名前の頭2文字を抜き出し、「&」で郵便番号とつないだもので、各行と全体を比較します

【IF関数での使用例】名字と住所の重複を調べて、名前変換ミスの疑いをメッセージ表示で注意する

 

 

 

 

4 空白セルは0扱い

値も数式も入力されていない“真”の空白セルは、空白セルであると同時に、数値の0としても認識されます

4.1 「空白セル」と「0」、「見た目の空白セル」を区別する

空白セルには2種類あり、“真”の空白セルは0としても扱われます

【条件付き書式での使用例】値が空欄でない項目を強調する

ISBLANK関数を使えば、セルが空欄であるか否かを調べることができます

【条件付き書式での使用例】空欄の含まれる行を強調する

複数のセルを同じ条件で評価する場合には、SUMPRODUCT関数が便利です

【条件付き書式での使用例】0の入力されているセルを強調する

空白セルは0扱いなので、それを除くための条件が必要です

【IF関数での使用例】対象セルが空白セルもしくは0の場合に、計算結果を表示しない

対象セル同士を乗算し、その結果が0となる場合に計算結果を表示しないIF関数式にします

 

 

 

5 上位や下位の判定

対象となる数値データが、全体のどのあたりに位置するのかを判定する場合には、LARGEやSMALL、RANK、PERCENTRANKなどの関数を使います

5.1 「上から数えて○番目以内」を判定するときには、LARGE関数やRANK関数を使う

LARGE関数では上から○番目の値を求められ、RANK関数では上から○番目かがわかります

【条件付き書式での使用例】直近2カ月の営業成績のいずれかが上位5位以内の人を強調する

RANK関数での判定結果を加算することで、1度でも上位5位以内に入った人がわかります

【条件付き書式での使用例】過去半年で上位5位以内が3ヵ月以上ある人を強調する

別シートで各月の判定を行い、条件付き書式でそれらを加算します

5.2 「下から数えて○番目以内」を判定するときには、SMALL関数の使用や、RANK関数で引数「順序」の指定を行う

SMALL関数では下から○番目の値を求められ、引数「順序」を指定したRANK関数では下から○番目かがわかります

【条件付き書式での使用例】直近2カ月の営業成績がいずれも下位5位以内の人を強調する

RANK関数での判定結果を乗算することで、両方で下位5位以内だった人がわかります

【条件付き書式での使用例】過去半年で下位5位以内が3ヵ月以上ある人を強調する

別シートで各月の判定を行い、条件付き書式でそれらを加算します

5.3 「上位(下位)○%以内」を判定するときには、PERCENTRANK関数を使う

PERCENTRANK関数では、順位がパーセンテージで表されます

【条件付き書式での使用例】先月の営業成績が上位30%以内に含まれる人を強調する

PERCENTRANK関数を使って、70%以上に該当する人を判定します

【条件付き書式での使用例】過去半年間の営業成績が上位30%以内に含まれる人を強調する

別シートで半年分の営業成績を合計し、条件付き書式でPERCENTRANK関数による判定を行います

 

 

 

6 行番号や列番号を使った条件式(論理式)

行番号の取得にはROW関数を、列番号の取得にはCOLUMN関数を使います

6.1 ROW関数を使えば、行番号を数値で取得できる

ROW関数は、ISEVENやISODDの関数と組み合わせることで、そのセルが偶数行なのか奇数行なのかを判定できます

【条件付き書式での使用例】表内の各行を交互に2色で塗りつぶす

あらかじめ表全体を塗りつぶしておけば、条件付き書式でISEVEN関数による偶数行の塗りつぶしを設定するだけで済みます

【条件付き書式での使用例】表内の各行を3色で順に塗りつぶす

MOD関数を使って3で除算した余りが、条件付き書式での判定条件となります

【IF関数での使用例】同じ数字が2つずつ並ぶ、変則的な連番を入力する

偶数行で始まるか、奇数行で始まるか、に応じて、ISEVENとISODDの関数を使い分けます

【IF関数での使用例】別のシートに入力してあるデータを、隔行で表示しなおす

INDIRECT関数を使って、偶数行もしくは奇数行にのみデータが表示されるようにします

6.2 COLUMN関数を使えば、列番号を数値で取得できる

行番号を取得するROW関数と組み合わせて使うこともできます

【条件付き書式での使用例】表内の各列を交互に2色で塗りつぶす

あらかじめ表全体を塗りつぶしておけば、条件付き書式でISEVEN関数による偶数列の塗りつぶしを設定するだけで済みます

【条件付き書式での使用例】市松模様(チェック柄)に表を修飾する

行番号と列番号を足したもので、条件式(論理式)としての判定を行います

【条件付き書式での使用例】対戦表で不要な同一対戦枠を黒く塗りつぶす

行番号と列番号を比較して、同一である場合のみ黒く塗りつぶされるようにします

 

 

 

7 曜日や祝祭日、休業日の判定

曜日はWEEKDAY関数で数値化し、祝祭日や休業日はリストと日付を照合します

7.1 WEEKDAY関数を使えば、日付に該当する曜日を数値で得られる

日付のシリアル値は、WEEKDAY関数で曜日を表わす数値に変えられます

【条件付き書式での使用例】日曜日を赤色で、土曜日を青色で表示する

日付の入力されているセルをWEEKDAY関数で参照し、その値を書式適用の条件にします

7.2 COUNTIF関数を使って、祝祭日や休業日のリストと、日付を照合する

あらかじめ祝祭日や休業日のリストを用意し、COUNTIF関数で日付との照合を行います

【条件付き書式での使用例】祝祭日を黄色で塗りつぶす

祝祭日の年月日を別表として用意し、COUNTIF関数で日付との照合を行い、それを塗りつぶしの条件とします

【条件付き書式での使用例】休業日を赤色で塗りつぶす

休業日の年月日を別表として用意し、COUNTIF関数で日付との照合を行い、それを塗りつぶしの条件とします

 

 

【注意】ブックファイルを開き直したときに、条件付き書式が勝手に削除されてしまう場合

「Excel 97-2003 ブック」形式でファイル保存した場合、それをExcel 2010で開いても互換モードとなってしまうので、次回起動時に条件式が勝手に削除されてしまうことがあります。これは、2003以前のExcelの条件付き書式に制限があるためです。

Excel 2010/2007本来のブック形式でファイル保存した場合には、次回起動時にも条件付き書式が勝手に削除されてしまうことはありません。

 

 

 

意見や要望などはこちらから

このページに関する意見や要望などは、下のメールフォームからお願いします。個別の回答は行いませんが、適時この特集記事「条件式(論理式)の考え方」に反映させていきます。

Powered by NINJA TOOLS