思考酒後

自分に入ってきた情報を定着、深化するために文章化

MENU

関数IFにおけるネスト(入れ子)回避方法【Excel】


追記:2017年7月1日、より簡単な関数:IFSを追記。

 

関数:IFの新しい使い方を知ったので紹介します。

関数IFにおいてネスト(入れ子)を回避することができるようです。

そもそもネスト(入れ子)とは

=IF(A1=1,1,(IF(A1=2,2,IF(A1=3,3,IF(A1=4,4,10))))))っていう状態の事を指します。

 

図にすると関数IFだけで下図のような条件分岐をさせたい場合にネスト(入れ子)が発生してしまします。 

f:id:masa_mn:20170201124542j:plain

ネストを多用するとかなり間違えがちなので(あと、考えるのが面倒)、対策を考えました。ただし、別表は作成したくないのでVLOOKUPを使わないという条件です。

 

例がこんな感じです。

数式IFの間を「&」で繋ぐことでネスト回避ができるようです。

f:id:masa_mn:20170701110648p:plain

 

 

比較してみた。

ネストする場合:

IF(D8=300,0.82,IF(D8=350,0.76,IF(D8=400,0.73,IF(D8>400,0.72,""))))

 

ネストしない場合:

IF(D8=300,0.82,"")&IF(D8=350,0.96,"")&IF(D8=400,0.73,"")&IF(D8>400,0.72,"")

正確性すっきり感が圧倒的に差が出る結果となりました。

 

 

追記(2017/07/01)

追記です。関数IFSを知ったので書いておきます。IFSのほうがよりカンタンです

 

IFSとは

IFと基本的な機能は同じですがネスト回避がしやすい式の構成となっています。

IFは一つの条件に対し、TRUEの場合とFALSEの場合を設定しますが、IFSは複数条件を設定するのが前提でその条件がTRUEの場合を設定するという違いがあります。

 

=IFS(第一条件,第一条件がTRUEの場合の処理,第二条件,第二条件がTRUEの場合の処理,三条件,第三条件がTRUEの場合の処理,第四条件,第条件がTRUEの場合の処理,…第127条件まで)

 

 

具体例

FG行に =IFS(D8=300,0.82,D8=350,0.96,D8=400,0.73,D8>400,0.72) という式を入力しています。

すると対象条件に応じた入力結果となります。

f:id:masa_mn:20170701110120p:plain

 

 

Microsoftのページです。

support.office.com

 

注意点

IFSはExcel2016からしか使うことができません。2013以前では使うことができないようです。

しかし、2013でIFSを使いたい人向けにマクロで関数を定義している記事がありました。

https://www.excelspeedup.com/ifs/

 

まとめ

比較するとIFSを使うと式が最も短くなるのでやはりIFSの方が使い勝手が良さそうです。

 

IFネストする場合:

IF(D8=300,0.82,IF(D8=350,0.76,IF(D8=400,0.73,IF(D8>400,0.72,""))))

 

IFネストしない場合:

IF(D8=300,0.82,"")&IF(D8=350,0.96,"")&IF(D8=400,0.73,"")&IF(D8>400,0.72,"")

 

IFSネストしない場合:

IFS(D8=300,0.82,D8=350,0.96,D8=400,0.73,D8>400,0.72)

 

 

▼かなりの良書です。累計部数17万部という激売れしている商品です。初心者から上級者まで幅広く楽しめる一冊です。