【Excel】IFSの段階判定をXLOOKUPの近似一致で置き換える|VLOOKUP(TRUE)との違いも

Excel・業務効率化

私は仕事で、金額や重さによって段階的に値を決めるときに、XLOOKUPの近似一致を使っています。以前は、手形の印紙代を求めるのに使っていました。今は、宅配便の運賃表から、重さと都道府県で請求する運賃を出すのに、職場の人に使ってもらっています。

「○○以上ならA、△△以上ならB」のような判定は、IFやIFSでも書けます。ただ、基準を表にしてXLOOKUPで探すと、式が短くなり、基準を変えるときも表を書き換えるだけで済みます。

この記事では、テストの点数を例に、IFS・XLOOKUP・VLOOKUPの書き方を比べます。あわせて、領収書の印紙税のように「○○円以下」で区切られた表の探し方も紹介します。

例:テストの点数で評価を付ける

B列の点数に、次の基準で評価を付けます。

  • 90点以上:S
  • 80点以上:A
  • 65点以上:B
  • 65点未満:C

IFSで書く場合

=IFS(B2>=90,"S",B2>=80,"A",B2>=65,"B",TRUE,"C")

この書き方では、基準の点数が式の中に入っています。基準を変えるときは、式を書き直して、下の行までコピーし直す必要があります。段階が増えると、式も長くなります。

基準を表にする

まず、基準を表にします。点数の列には、「この点数以上」の値を入れます。

点数(以上)評価
0C
65B
80A
90S

この表がE2:F5にあるとして、式を書いていきます。

XLOOKUPで書く場合

=XLOOKUP(B2,$E$2:$E$5,$F$2:$F$5,"",-1)

5つ目の引数「-1」は、「一致する値がなければ、次に小さい値で探す」という指定です。

例えば72点なら、72以下で一番大きい「65」が見つかり、評価は「B」になります。65点ちょうどは「B」、64点は「C」、90点は「S」です。

基準を変えたいときは、表の数字を書き換えるだけで済みます。式はそのままです。

VLOOKUPで書く場合

同じことは、VLOOKUPの近似一致(TRUE)でもできます。

=VLOOKUP(B2,$E$2:$F$5,2,TRUE)

ただし、VLOOKUPの近似一致は、表を点数の小さい順(昇順)に並べておく必要があります。並んでいないと、エラーにならずに間違った評価を返すことがあります。

XLOOKUPの「-1」は、表が並んでいなくても正しく探せます。

点数が空欄のときは「C」になる

点数が空欄のセルは0として扱われるので、XLOOKUPでもIFSでも「C」になります。未受験の人がいる表では、受けていない人に「C」が付いてしまいます。

この場合は、IFで先に空欄かどうかを判定します。

=IF(B2="","",XLOOKUP(B2,$E$2:$E$5,$F$2:$F$5,"",-1))

B2が空欄なら何も表示せず、点数が入っているときだけ評価を探します。

「○○以下」で区切る表は「1」を使う

領収書の印紙税のように、「100万円以下は200円」と上限で区切られている表もあります。売上代金の受取書の税額は、次のとおりです(1,000万円以下の部分を抜粋)。

記載金額税額
5万円未満非課税
5万円以上100万円以下200円
100万円を超え200万円以下400円
200万円を超え300万円以下600円
300万円を超え500万円以下1,000円
500万円を超え1,000万円以下2,000円

出典:国税庁「No.7105 金銭又は有価証券の受取書、領収書」。営業に関しない受取書は非課税になるなど、細かい条件は国税庁のページで確認してください。

この表をExcelで使うときは、金額の列に「この金額以下」の上限を入れます。

金額(以下)印紙税
49,999非課税
1,000,000200
2,000,000400
3,000,000600
5,000,0001,000
10,000,0002,000

「5万円未満」を「49,999」にしているのは、金額が円単位の整数なので「49,999円以下」と同じだからです。

この表がH2:I7にあるとして、B2の金額から印紙税を探します。

=XLOOKUP(B2,$H$2:$H$7,$I$2:$I$7,"表の範囲外",1)

5つ目の引数「1」は、「一致する値がなければ、次に大きい値で探す」という指定です。

例えば50,000円なら、次に大きい「1,000,000」が見つかり、印紙税は200円です。100万円ちょうどは200円、100万1円は400円です。1,000万円を超える金額は表にないので、「表の範囲外」と表示されます。

VLOOKUPの近似一致は「次に小さい値」しか探せないので、上限で区切った表はそのままでは使えません。下限(0、50,000、1,000,001…)で表を作り直せば使えますが、「100万円を超え」を「1,000,001」に置き換える必要があり、国税庁の表と見比べにくくなります。XLOOKUPなら、元の表の区切り方に合わせて「-1」と「1」を使い分けられます。

まとめ

  • 段階の判定は、基準を表にしてXLOOKUPで探すと、式が短くなり、基準の変更も表だけで済む
  • 「○○以上」で区切る表は「-1」、「○○以下」で区切る表は「1」を使う
  • VLOOKUPの近似一致は、表を昇順に並べておく必要がある
  • 空欄は0として扱われるので、必要ならIFで先に判定する

重さと都道府県から運賃を出す宅配便の運賃表は、この近似一致と、XLOOKUPを2回使うクロス表の検索を組み合わせて作れます。運賃表は、別の記事で紹介する予定です。

クロス表の検索は、こちらの記事で紹介しています。

【Excel】XLOOKUPで列番号を指定できないときの代わりの書き方|クロス表はXLOOKUPを2回使う
XLOOKUPには、VLOOKUPのような列番号を指定する引数がありません。VLOOKUPとMATCHでクロス表から取り出していた値を、XLOOKUPを2回使って取り出す方法を紹介します。

XLOOKUPに乗り換えて便利だったことは、こちらの記事で紹介しています。

【Excel】XLOOKUPに乗り換えて便利だったこと|IFERROR不要・列がずれない・左の列も取れる
VLOOKUPからXLOOKUPに乗り換えて便利だった使い方を、実務の例で紹介します。IFERRORが要らない、列を増やしてもずれない、左の列や複数の列も取り出せる、縦にも横にも検索できる、という4つの点です。
タイトルとURLをコピーしました