【エクセル時短】は「少しでも早く仕事を終わらせたい!」というビジネスパーソンのみなさんに、Excelの作業効率をアップするワザをお届けする連載です。毎週木曜日更新。
注目・最新の記事一覧
性別や回数などの条件で最大・最小金額を求められる
おかげさまで連載【エクセル時短】は第100回を迎えることができました! 今後ともよろしくお願いいたします。>
Excel 2019特集の最終回となる第5弾では、「MAXIFS」(マックス・イフ・エス)関数と「MINIFS」(ミニマム・イフ・エス)関数を解説します。どちらもExcel 2019とOffice 365版のExcelで利用できる新しい関数です。
Excel 2016以前のバージョンで使える、MAX関数とMIN関数で同じ動作を実現する方法も含めて、違いを確認していきましょう。
MAXIFS関数
MINIFS関数
複数の条件で最大値と最小値を求める
MAXIFSとMINIFSの使い道は、その名前の通りです。「IF」に「S」が付いているので、複数の条件を指定できるというわけです。構文を見てみましょう。
MAXIFS
(最大範囲,条件範囲1,条件1,条件範囲2,条件2,・・・,条件範囲126,条件126)
MINIFS
(最小範囲,条件範囲1,条件1,条件範囲2,条件2,・・・,条件範囲126,条件126)
[最大範囲]と[最小範囲]には、最大値と最小値を求めるセル範囲を指定します。検索の対象とする範囲ですね。どちらも[条件範囲]と[条件]は126まで指定できますが、通常の業務ではあまり意識する必要はないでしょう。[条件]はAND条件として扱われます。
ここでは、あるサービスの男女別の利用回数と利用金額を例に、最大値と最小値を抽出してみましょう。
1MAXIFS関数を入力する
まずはMAXIFS関数を使って『「男性」かつ「利用回数が5回以下」』の最大利用金額を求めます。セルG5には以下の数式を入力します。「5回以下」の条件は、文字列として「"<=5"」と指定します。
=MAXIFS(E3:E32,C3:C32,"男",D3:D32,"<=5")
2複数の条件から最大値を求められた
MAXIFS関数で複数の条件から最大値を求められました。MAXIFS関数で指定する複数の条件は、AND(かつ)条件となります。OR(または)条件を指定したい場合は、MAX関数と組み合わせて以下のように指定します。この場合、『「男性」または「利用回数が5回以下」』の最大利用金額を求められます。
=MAX(MAXIFS(E3:E32,C3:C32,"男"),MAXIFS(E3:E32,D3:D32,"<=5"))
3MINIFS関数を入力する
続けて『「女性」かつ「利用金額が10,000円以上」』の最小利用回数を求めてみます。セルG9に以下の数式を入力します。「10,000以上」の条件は、文字列として「">=10000"」と指定します。
=MINIFS(D3:D32,C3:C32,"女",E3:E32,">=10000")
4複数の条件から最小値を求められた
MINIFS関数で複数の条件から最小値を求められました。MAXIFS関数と同様、OR条件をしたいときは、MIN関数と組み合わせて以下のように指定します。この場合、『「女性」または「利用金額が10,000円以上」』の最小利用回数を求められます。
=MIN(MINIFS(D3:D32,C3:C32,"女"),MINIFS(D3:D32,E3:E32,">=10000"))
旧バージョンではIF関数と組み合わせて配列数式で計算する
今度は旧バージョンでの利用をふまえて、同じ結果を得るための関数式を紹介します。MAXIFS関数はMAX関数とIF関数、MINIFS関数はMIN関数とIF関数を組み合わせればOKです。ただし、IF関数は配列数式で記述します。
「配列」に苦手意識のある方もいると思いますが、難しく考える必要はありません。「条件を掛け合わせる」と考えてください。例えば、MAXIFS関数の代わりになる数式は以下のようになります
=MAX(IF((C3:C32="男")*(D3:D32<=5),E3:E32,""))
IF関数の中身、「(C3:C32="男")*(D3:D32<=5),E3:E32」がいつもと違いますね。これは『[性別]列のセルC3〜C32の値が「男」、かつ、[回数]列のセルD3〜D32の値が「5以下」だったら、[金額]列の値、条件に一致しなければ空白("")を表示する』という意味です。複数のセル範囲を一度に処理したいときは配列数式を使います。
ポイントは2つあります。
- 掛け合わせる条件に使うセル範囲と結果のセル範囲のサイズを合わせる
- 関数式の確定時に[Ctrl]+[Shift]+[Enter]キーを押す
ここでは「C3:C32」「D3:D32」「E3:E32」です。「C2:C32」「D3:D3」「E3:E32」など、セル範囲のサイズがずれていると「#N/A」エラーになってしまいます。
これを忘れると配列数式として認識されずに、「#VALUE!」エラーになってしまいます。
5MAX関数とIF関数の配列数式を組み合わせた関数式を入力する
MAXIFS関数の結果と比較しやすいように、セルG13に以下の数式を入力します。配列数式として入力するので、[Ctrl]+[Shift]+[Enter]キーを押します。
=MAX(IF((C3:C32="男")*(D3:D32<=5),E3:E32,""))
6結果が表示された
MAXIFS関数と同じ結果が表示されました。配列数式として入力すると、関数式の前後に「{ }」が追加されます。 なお、IF関数の条件に一致しない場合は空白("")なのですが、MAX関数を組み合わせた場合の結果は「0」となります。該当する最大値は「0」というわけです。もし「0」を表示したくないなら、もう1つIF関数を組み合わせるといいでしょう。
7MIN関数とIF関数の配列数式を組み合わせた関数式を入力する
今度はMINIFS関数の代わりに、MIN関数とIF関数を組み合わせて以下の数式を入力します。考え方は、MAX関数とIF関数の組み合わせと同じです。配列数式として入力するので、[Ctrl]+[Shift]+[Enter]キーを押します。
=MAX(IF((C3:C32="女")*(D3:D32>=10000),D3:D32,""))
8結果が表示された
MINIFS関数と同じ結果が表示されました。先ほどと同じく、配列数式として入力されたので、関数式の前後に「{ }」が追加されています。
配列数式と比較すると、MAXIFS関数とMINIFS関数は非常にわかりやすい関数ですよね。似たような関数としては、SUMIFS関数やAVERAGEIFS関数、COUNTIFS関数などがあります。あわせて覚えておくと便利ですよ。
なお、ここでは旧バージョンの対応策としてMAXIF関数とMINIF関数+IF関数の配列数式を利用する方法を紹介しましたが、データベース関数のDMAX関数やDMIN関数を利用する方法もあります。関数に慣れている人は、そちらも試してみてください。