IF関数を使うときは最初に論理式を考え、その後に真の場合と偽の場合を考えるという順序で数式を作ります。そのため、真の場合と偽の場合で共通する部分があっても、それに気が付かず同じ式を2回書いてしまうことがあります。そして、数式が長くなってしまいます。
IF関数の式が長くなるのは、真の場合と偽の場合で分けて考える必要が無い計算も重複して記述することが原因であることが多いのです。スマートな数式を書くには、真の場合と偽の場合で共通する部分を外に出し、条件によって異なる場合だけIF関数で記述するようにします。
そこで、今回は、真の場合と偽の場合で共通する部分を外に出す方法と、ある条件を満たした時だけ計算を追加する方法について出題します。
目次
1.共通する文字列連結を外に出す
問題
今月の獲得ポイントが3000ポイント以上であれば、「来月はゴールド会員となります」と表示し、そうでなければ「来月は通常会員となります」と表示しなさい。
解説
IF関数を挿入します。
セルB1が3000以上のときに、「来月はゴールド会員となります」、そうでなければ「来月は通常会員となります」とします。
これで完成です。
ところで、IF関数はもともと比較演算をした結果であるTRUEとFALSEを別の文字列に置き換えることによって、1つのセルの中で2つの結果を返す関数です。
この場合、ゴールドと通常の部分だけ変えれば良いことが分かります。
「来月は」の部分を削除します。
その代わりに、IF関数の前に「来月は」を連結します。
IF関数の前後に、文字列の連結をすることができます。
「会員となります」の部分を削除します。
その代わりに、IF関数の最後に「会員となります」を連結します。
これで共通する部分のダブりが消えて数式が短くなります。
このように共通部分がある場合は、IF関数の外に出して、切り替える部分だけをIF関数で処理するようにしたほうがよいです。
2.共通する計算を外に出す
問題
商品代金が8000円以上であれば10%引き、それ以外は5%引きにしたい。割引金額をマイナスで求め、合計を求めなさい。
解説
商品代金が8000円以上の場合、商品代金の10%、そうでなければ商品代金の5%を求めます。
ただし、答えをマイナスにしないといけないので、それぞれB1の前にマイナスを付けます。
- =IF(B1>=8000,-B1*10%,-B1*5%)
足し算で合計を求めます。
これで完成です。
ところで、この場合も、-B1と掛け算をするところは共通しています。共通部分は外に出すべきです。
商品代金が8000円以上かどうかを判定して、変わるのは割引率だけです。
-B1をかける部分を削除します。
-B1の部分をIF関数の外に出します。
IF関数の前後に、足し算や掛け算などの演算を追加することができます。
別解
ちなみに、パーセント演算子「%」は100で割る演算なので、これも外に出すことが可能です(参考:【Excel数式】表示形式のパーセントと演算子のパーセントの違いを理解しよう)。
3.西暦下2桁だけを考える
問題
セルA2~A11に、月日を表す3桁または4桁の数値を入力した。1月から3月までの日付であれば2026、それ以外は2025と表示しなさい。
解説
1月から3月までの日付は100台、200台、300台の数値なので、400未満であると言えます(331以下でもよい)。
400未満であれば2026、それ以外は2025とします。
これで完成です。
別解
ところで、2026と2025では2000の部分が共通しています。
そこで、2000の部分を外に出して、26と25だけをIF関数の中に残すといったことも可能です。
4.年月日を8桁の数値で表す
問題
セルA4~A13に、月日を表す3桁または4桁の数値を入力した。1月から3月までの日付であればセルA1の値に1を足し、それ以外はセルA1に入力した年で、8桁の年月日を表す数値を求めなさい。
解説
400未満の数値であれば、セルA1の値に1を足し、そうでなければセルA1のままとします。セルA1は絶対参照です。
これで年を求めることができました。
この後に月日をつなげるのですが、年を10000倍して、月日を足せばよいです。
この計算は、400未満かどうかとは無関係なので、IF関数の外に記述すればよいです。
これで完成です。
5.条件を満たす場合だけ計算を追加する
(1)足し算・引き算を追加する
問題
注文を受けた個数と、現時点で不足している数を合わせて発注するため、セル範囲B2:B6の合計を求めた。セルD2がマイナスのときに限り、不足分を加算しなさい。
解説
SUM関数を用いて注文数の合計を求めています。
さらに、在庫として不足している分が5個あるので、5個増やして発注しようとしています。
合計の後にIF関数を追加します。
在庫数が0より小さいときに、マイナス在庫数とし、そうでなければ発注を増やさないので0とします。
これで完成です。
在庫があれば加算されません。
別解
このようにマイナスの在庫数を引いても良いです。
元の数値に0を足したり引いたりしても変わりません。
条件を満たす場合だけ足したり引いたりするときは、条件を満たさない場合は、「0」とします。
(2)掛け算・割り算・累乗を追加する
問題
5月と6月の売上金額から伸び率を計算し、7月の売上目標を6月の売上金額と同じとする数式を入力した。
伸び率がプラスだった店舗については、6月からさらに同じ伸び率で増やした金額を目標としなさい。
解説
5月と6月の売上金額から伸び率を求めています。
7月の売上目標は6月を参照しています。
伸び率がマイナスの店舗についてはこれ以上売り上げが下がらないように、前月の売上をそのまま目標としますが、伸び率がプラスの場合はその伸び率のまま売り上げを伸ばすことを目標としたと仮定します。
6月の売上にIF関数を掛けます。伸び率がプラスの場合は、「1+伸び率」を掛け算します。これで6月の売上に対して同じ伸び率で増やすことになります。
そうでなければ1とします。
これで完成です。伸び率がマイナスならば6月の売上のままです。
元の数値に1を掛けたり割ったり累乗にしても変わりません。
条件を満たす場合だけ掛けたり割ったり累乗にしたりするときは、条件を満たさない場合は、「1」または「100%」とします。
(3)文字列連結を追加する
問題
A列の数値を小数点以下切り捨てて、「cm」を連結する数式を入力した。
さらに、小数点以下を切り捨てたものについては「※小数点以下切り捨て」を連結しなさい。
解説
INT関数で小数点以下を切り捨てて、「cm」を連結しています(参考:【Excel】文字列結合、スペース・改行・ダブルクォーテーションの連結)。
さらに、元の数値が小数の場合に限り、さらに文字列を連結しようとしています。IF関数を連結します。
元の数値A1と切り捨てた値INT(A1)を比較して、元の数値のほうが大きければ小数であることが分かります。
- 小数点以下があることの判定 A1>INT(A1)
小数であることを判定します。小数であれば、「※小数点以下切り捨て」を連結しますが、整数であれば何も連結しないので、空白文字列を返します。
これで完成です。
元の文字列に空白文字列を連結しても変わりません。
条件を満たす場合だけ文字列を連結するときは、条件を満たさない場合は、空白を返します。
解説は以上です。
6.動画版はこちら(無料)
この記事は、わえなび実力養成講座「ファンダメンタルExcel13」Program 13-10、13-11-2 のYoutube動画を書き起こして、加筆修正したものです。
- ファンダメンタルExcel 13-10 共通部分を外に出す【わえなび】(ファンダメンタルExcel Program13 IF関数の基本)
- ファンダメンタルExcel 13-11-2 補講 条件を満たす場合だけ計算を追加する【わえなび】(ファンダメンタルExcel Program13 IF関数の基本)