オーロラさんの勉強帳

SESの客先常駐勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。

【Excel】SUMIFS関数の使い方 ~指定した複数条件に一致する行データの値を合計する~

本記事ではExcelSUMIFS関数の使い方を説明します。

SUMIFS関数とは。SUMIFS関数の書式

SUMIFS関数は、1つもしくは複数の検索条件に一致した『行』の数値データを合計する関数です。
もう少し詳細に書くと、指定した検索範囲の中で検索条件一致する行を検索し、その行の合計範囲の数値データを合計します。
複数の検索範囲・検索条件を指定する場合は、複数の検索範囲・検索条件に一致する行を検索し、その行の合計範囲の数値データを合計します。

検索条件には比較演算子、ワイルドカードを使うことができます。


SUMIFS関数の書式は以下の通りです。

SUMIFS関数の書式
=SUMIFS(合計範囲, 検索範囲1, 検索条件1[, 検索範囲2, 検索条件2,・・・])

引数合計範囲、検索範囲1、検索条件1は必須です。

SUMIF関数の書式は「=SUMIF(検索範囲, 検索条件, 合計範囲)」とSUMIFS関数と指定する順番が異なることに注意しましょう。
書式に迷うことがあれば、Googleで検索したり、数式バーに=SUMIF(、=SUMIFS(など関数を入力したりして確認しましょう。
f:id:auroralights:20211231002229p:plain


※検索範囲、合計範囲の注意点
検索範囲、合計範囲の開始行、終了行を必ず合わせます。例えば検索範囲が「A1:A10」の場合は合計範囲を「C1:C10」とします。(検索範囲、合計範囲ともに開始が1行目、終了が10行目)
もし、検索範囲「A1:A10」(開始行1:終了行10)、合計範囲「C5:C10」(開始行5:終了行10)のようにずれていると正しい合計値を求めることができません。
f:id:auroralights:20211231135543p:plain


SUMIFS関数の考え方

以下画像では、商品コードがA100かつ担当者コードが1101の数量の合計を『=SUMIFS($D$3:$D$10,$B$3:$B$10,J3,$G$3:$G$10,K3)』求めています。
f:id:auroralights:20211231001120p:plain

検索範囲『$B$3:$B$10』、検索条件『J3』、②検索範囲『$G$3:$G$10』、検索条件『K3』の両方に一致する行の③合計範囲『$D$3:$D$10』の数値データを合計値を返します。


SUMIFS関数の検索条件に使える『比較演算子』・『ワイルドカード』

SUMIF関数の引数の『検索条件』には、以下の比較演算子・ワイルドカードを使うことができます。比較演算子・ワイルドカードを使用する場合は検索条件とあわせて『"(ダブルクォーテーション)』で囲みます。

比較演算子 説明 使用例
= 等しい "=10"
<> 等しくない "<>男"
より大きい ">19"
< より小さい "<20"
>= 以上 ">=20"
<= 以下 ”<=19"

ワイルドカード 説明 検索条件の使用例
* 任意の文字列 "A*"
? 任意の1文字 "?田"


SUMIFS関数使用例

検索範囲・検索条件が1つだけの使用例

以下画像では商品コードがA100の受注金額の合計を『=SUMIFS($F$3:$F$16,$B$3:$B$16,J3)』で求めています。
SUMIFとSUMIFSでの引数の指定順が異なることに注意です。
f:id:auroralights:20220101105530p:plain


検索範囲・検索条件を複数指定した使用例

以下画像では商品コードがA100かつ取引先がAの受注金額の合計を『=SUMIFS($F$3:$F$16,$B$3:$B$16,K3,$G$3:$G$16,L3)』で求めています。
f:id:auroralights:20220101110649p:plain


以下画像では商品コードがA100かつ取引先がAかつ受注日が2022/1/1の受注金額の合計を『=SUMIFS($F$3:$F$16,$B$3:$B$16,K3,$G$3:$G$16,L3,$I$3:$I$16,M3)』で求めています。
f:id:auroralights:20220101112038p:plain

ワイルドカード・比較演算子を指定した使用例

以下画像では商品コードがB10?かつ受注金額が1000以上の受注金額の合計を『=SUMIFS($F$3:$F$16,$B$3:$B$16,K3,$F$3:$F$16,">=1000")』で求めています。
f:id:auroralights:20220101113129p:plain


以下画像では商品コードが*01かつ取引先がAかつ受注日が2022/1/2以降の受注金額の合計を『=SUMIFS($F$3:$F$16,$B$3:$B$16,K3,$G$3:$G$16,L3,$I$3:$I$16,">=2022/1/2")』で求めています。
f:id:auroralights:20220101112502p:plain


検索条件で一意な行を指定して数値データを返す方法 (VLOOKUP的な使い方)

複数の検索範囲、検索条件で特定の1行を指定して、その行の合計範囲の数値データを求める使い方を紹介します。
検索範囲、検索条件で特定の1行を指定できれば、合計するものがないので、その行の合計範囲の数値データをそのまま返します。

以下画像では神戸支店の2022/1/1、2022/1/2、2022/1/3の売上をSUMIFS関数で求めています。
※売上日と支店名の組み合わせで一意になっています。
f:id:auroralights:20220101114703p:plain


神戸支店の2022/1/1の売上
=SUMIFS($D$3:$D$16,$B$3:$B$16,F3,$C$3:$C$16,G3)
神戸支店の2022/1/2の売上
=SUMIFS($D$3:$D$16,$B$3:$B$16,F4,$C$3:$C$16,G4)
神戸支店の2022/1/3の売上
=SUMIFS($D$3:$D$16,$B$3:$B$16,F5,$C$3:$C$16,G5)


以下画像では、左側の表を右側の表にSUMIFS関数で簡単に求めています。
f:id:auroralights:20220101115837p:plain
最初にセルG3に『=SUMIFS($D$3:$D$16,$B$3:$B$16,$F3,$C$3:$C$16,G$2)』を入力して、2022/1/1の大阪支店の売上を求めます。
次にその式をコピーして売上日ごとの各支店の売上を求めます。


SUMIFS関数、MAXIFS関数を使って最新日付の数値データを返す方法

以下画像では売上日、取引先、商品の組み合わせで一意なデータに対して、SUMIFS関数MAXIFS関数を使って、指定した取引先・商品の最新の売上を求めています。
f:id:auroralights:20220102125909p:plain

取引先が「A」かつ商品「みかん」の最新の売上は『=SUMIFS($E$3:$E$16,$B$3:$B$16,MAXIFS($B$3:$B$16,$C$3:$C$16,H3,$D$3:$D$16,I3),$C$3:$C$16,H3,$D$3:$D$16,I3)』で求めています。
ポイントは該当の取引先・商品の最新の売上日をMAXIFS関数で求めているところです。

同じように取引先「B」かつ商品「みかん」の最新売上は『=SUMIFS($E$3:$E$16,$B$3:$B$16,MAXIFS($B$3:$B$16,$C$3:$C$16,H4,$D$3:$D$16,I4),$C$3:$C$16,H4,$D$3:$D$16,I4)』で求めています。


複数の検索範囲・条件で一意な1行になるように指定して、数値データを返す使い方は頻繁に使うことはありませんが、覚えておくと非常に便利です。

【Excel】SUMIF関数の使い方 ~指定した条件に一致する行データの値を合計する~

本記事ではExcelSUMIF関数の使い方を説明します。

SUMIF関数とは。SUMIF関数の書式

SUMIF関数は、検索条件に一致した『行』の数値を合計する関数です。
もう少し詳しく書くと、指定した検索範囲の中で検索条件一致する行を検索し、その行の合計範囲の数値データを合計します。
検索条件には比較演算子、ワイルドカードを使うことができます。


SUMIF関数の書式は以下の通りです。

SUMIF関数の書式
=SUMIF(検索範囲, 検索条件, 合計範囲)

※検索範囲、合計範囲の注意点
検索範囲、合計範囲の開始行、終了行を必ず合わせます。例えば検索範囲が「A1:A10」の場合は合計範囲を「C1:C10」とします。(検索範囲、合計範囲ともに開始が1行目、終了が10行目)
もし、検索範囲「A1:A10」(開始行1:終了行10)、合計範囲「C5:C10」(開始行5:終了行10)のようにずれていると正しい合計値を求めることができません。


以下画像では、SUMIF関数を使って、商品コードがA100の受注金額の合計と、A101の受注金額の合計を求めています。
f:id:auroralights:20211229201345p:plain

商品コードがA100の受注金額の合計は、『=SUMIF($B$3:$B$14,"A100",$F$3:$F$14)』で求めています。
検索範囲『$B$3:$B$14』の中で検索条件『A100』に一致する行に対して、合計範囲『$F$3:$F$14』の値を合計しています。

※商品コードがA101の受注金額の合計は、『=SUMIF($B$3:$B$14,"A101",$F$3:$F$14)』で求めています。

SUMIF関数の考え方は、以下の画像もご参考ください。
(商品コードA100の受注金額の合計を求める例)
f:id:auroralights:20211229202013p:plain


SUMIF関数の検索条件に使える『比較演算子』・『ワイルドカード』

SUMIF関数の引数の『検索条件』には、以下の比較演算子・ワイルドカードを使うことができます。比較演算子・ワイルドカードを使用する場合は検索条件とあわせて『"(ダブルクォーテーション)』で囲みます。

比較演算子 説明 使用例
= 等しい "=10"
<> 等しくない "<>男"
より大きい ">19"
< より小さい "<20"
>= 以上 ">=20"
<= 以下 ”<=19"

ワイルドカード 説明 検索条件の使用例
* 任意の文字列 "A*"
? 任意の1文字 "?田"


SUMIF関数の使用例

担当者ごとの受注金額の合計を求める

以下の画像では、担当者ごとの受注金額の合計を求めています。
f:id:auroralights:20211229204814p:plain
担当者が佐藤の受注金額の合計は、『=SUMIF($G$3:$G$14,J3,$F$3:$F$14)』で求めています。

検索範囲『$G$3:$G$14』で検索条件『J3』に一致する行の合計範囲『$F$3:$F$14』の合計を求めます。
※検索条件は『"佐藤"』としてもいいですが、仕事ではこの例のようにセル参照させる方法をよく使います。


受注日ごとの受注金額の合計を求める (日付を検索条件にする)

以下の画像では、受注日ごとの受注金額の合計を求めています。
f:id:auroralights:20211229211927p:plain
受注日が2022/1/1の受注金額の合計は、『=SUMIF($H$3:$H$14,J3,$F$3:$F$14)』で求めています。

検索条件の日付は、セル参照しない場合は『=SUMIF($H$3:$H$14,"2022/1/1",$F$3:$F$14)』のように書きます。


比較演算子を使った例

以下の画像では比較演算子を使って日付を条件に受注金額の合計を求めています。
f:id:auroralights:20211229212803p:plain

受注日が2022/1/2までの受注金額の合計は『=SUMIF($H$3:$H$14,"<=2022/1/2",$F$3:$F$14)』で求めています。

受注日が2022/1/3以降の受注金額の合計は『=SUMIF($H$3:$H$14,">=2022/1/3",$F$3:$F$14)』で求めています。

受注日が2022/1/1以外の受注金額の合計は『=SUMIF($H$3:$H$14,"<>2022/1/1",$F$3:$F$14)』で求めています。

受注日が2022/1/2~2022/1/4の受注金額の合計は『=SUMIF($H$3:$H$14,">=2022/1/2",$F$3:$F$14)-SUMIF($H$3:$H$14,">2022/1/4",$F$3:$F$14)』で求めています。
受注日が2022/1/2以降の受注金額の合計から受注日が2022/1/5以降の受注金額の合計をマイナス(除算)することで、2022/1/2~2022/1/4の受注金額の合計を求めています。


ワイルドカードを使った例

検索条件にワイルドカードを使った例を紹介します。『*』が任意の文字列、『?』が任意の1文字の文字列となります。
f:id:auroralights:20211230114816p:plain

商品コードが「A」から始まる商品の受注金額の合計は『=SUMIF($B$3:$B$14,"A*",$F$3:$F$14)』で求めています。

商品コードが「B」から始まる商品の受注金額の合計は『=SUMIF($B$3:$B$14,"B*",$F$3:$F$14)』で求めています。

商品コードに「2」を含む商品の受注金額の合計は『=SUMIF($B$3:$B$14,"*2*",$F$3:$F$14)』で求めています。

商品コードが「A○01」の商品の受注金額の合計は『=SUMIF($B$3:$B$14,"A?01",$F$3:$F$14)』で求めています。
※○は任意の1文字です。

商品コードが「○101」の商品の受注金額の合計は『=SUMIF($B$3:$B$14,"?101",$F$3:$F$14)』で求めています。
※○は任意の1文字です。


VLOOKUP関数のように検索した条件に一致する行の数値を返す方法

検索範囲で指定した列の値が一意な値(重複しない値)の場合、VLOOKUP関数のように条件に一致する行の数値データを返すことができます。
※検索範囲の値が一意な値であれば、合計するものがないので合計範囲の数値をそのまま返します。VLOOKUPのように文字列などは返せません。
※複数条件を指定するSUMIFS関数の方が、この方法をより効果的に活用できます。

以下の画像では、検索範囲がB列(日付)で一意な値なので、特定の日付の神戸支店の売り上げを求めています。
f:id:auroralights:20211230115248p:plain

2022/1/3の神戸支店の売り上げは『=SUMIF($B$3:$B$11,G3,$D$3:$D$11)』で求めています。

複数の条件を指定できるSUMIFS関数については、以下記事で紹介していますので、参考にしていただければ幸いです。
auroralights.jp


お読みいただきありがとうございました。

【Excel】COUNTIFS関数の使い方 ~複数の検索条件に一致するデータの件数を数える。データの存在確認、重複確認をする。~

本記事ではExcelCOUNTIFS関数の使用方法を説明します。

以下の記事で紹介したCOUNTIF関数では1つの条件しか指定ができませんが、COUNTIFS関数は複数の条件を指定して、その条件に一致する件数を数えることができます。

auroralights.jp


COUNTIFS関数とは。COUNTIFS関数の書式

COUNTIFS関数は、指定した範囲の中で検索条件に一致するデータの件数を数える関数です。(検索条件に一致するデータがなければ0を返します)

COUNTIF関数1つの条件に一致する件数を数える関数なのに対して、COUNTIFS関数2つ以上の条件に一致する件数を数える関数です。
検索条件には、比較演算子やワイルドカードを使うことができます。

COUNTIFS関数の書式は以下の通りです。

COUNTIFS関数の書式
=COUNTIFS(範囲1,検索条件1,範囲2,検索条件2,...)

範囲1、検索条件1、範囲2、検索条件2は必須となります。範囲3、検索条件3以降は省略可能です。


以下画像では、COUNTIFS関数を使って、住所が兵庫県神戸市の男性、女性の件数を数えています。
f:id:auroralights:20211217212549p:plain

性別が男性かつ住所が兵庫県神戸市のデータ件数は『=COUNTIFS($C$3:$C$17,"男",$E$3:$E$17,"兵庫県神戸市")』で求めています。

範囲1、検索条件1には、『$C$3:$C$17,"男"』、範囲2、検索条件2には『$E$3:$E$17,"兵庫県神戸市"』を指定して、性別が男性かつ住所が兵庫県神戸市のデータ件数を数えています。

性別が女性かつ住所が兵庫県神戸市のデータ件数は『=COUNTIFS($C$3:$C$17,"女",$E$3:$E$17,"兵庫県神戸市")』で数えています。

COUNTIFS関数のセル範囲を指定するポイント

COUNTIFS関数で範囲を指定する際は、以下のポイントを意識します。

  • 範囲1、範囲2...のセル範囲は、検索条件に一致するデータがある1つの列で範囲を指定する (複数の列にまたがる範囲を指定しない)
  • 範囲1、範囲2...のセル範囲は、開始行、終了行をあわせる

f:id:auroralights:20211219160820p:plain

上記画像の場合は、「性別が男性かつ住所が兵庫県神戸市かつ購入回数が10回以上」という3つの範囲、検索条件で件数を数えています。
範囲1~3はそれぞれ、検索条件に一致するデータがある該当の1列を指定しています。
範囲1~3は開始行3、終了行17を指定しており、範囲1「$C$3:$C$17」、範囲2「$E$3:$E$17」、範囲3「$H$3:$H$17」をして指定ます。

複数の検索条件に一致するデータの存在を確認する方法

COUNTIFS関数でデータ群の中に複数の検索対象に一致するデータが存在するかどうかを確認することができます。COUNTIFSで0を返すか、1以上を返すかで存在確認をします。

f:id:auroralights:20211219163437p:plain
上記画像では、セルB3:D17の部品一覧の中にセルF3:H9のデータが何件存在しているかどうかを、COUNTIFS関数を使って数えて、I列に件数を返しています。
I列の数値が0のデータは、部品一覧に存在しないことを表しています。

※部品一覧は、部署コード、部品コード、仕入先コードの組み合わせで一意となります。

セルI3の数式は以下のようになっています。
=COUNTIFS($B$3:$B$17,F3,$C$3:$C$17,G3,$D$3:$D$17,H3)
範囲1「$B$3:$B$17」で検索条件「F3」かつ、範囲2「$C$3:$C$17」で検索条件「G3」かつ、範囲3「$D$3:$D$17」で検索条件「H3」に一致するデータが何件あるかをCOUNTIFS関数で数えています。
I列が「0」の場合はデータが存在いないことを表しています。I列が「1」以上の場合はその数値分のデータが存在することを表しています。


複数の検索条件に一致するデータの重複を確認する方法

COUNTIFS関数で、データ群の中で重複しているデータを探すことができます。COUNTIFS関数は条件を複数指定できるため、複数の条件で一意になるデータが重複しているかどうかを調べることができます。
COUNTIFS関数で2以上の値が返ってきたら重複している状態です。

f:id:auroralights:20211219165231p:plain

上記画像では、部署コード、部品コード、仕入先コードで一意となる部品一覧で、部署コード、部品コード、仕入先コードを組み合わせたデータが、一覧の中で重複しているかどうかを確認しています。

セルE3では以下の数式で、部署コード(B3)、部品コード(C3)、仕入先コード(D3)を組み合わせたデータが部品一覧で重複しているかどうかを調べています。
=COUNTIFS($B$3:$B$25,B3,$C$3:$C$25,C3,$D$3:$D$25,D3)

範囲1「$B$3:$B$25」検索条件1「B3」、範囲2「$C$3:$C$25」、検索条件2「C3」、範囲3「$D$3:$D$25」、検索条件3「D3」に一致するデータの件数を返しています。
E列の値が「0」の場合はそのデータ存在しない。「1」の場合は重複せずに1件のみ存在している。「2」以上の場合はその数値だけ重複していることを表しています。

ポイントは、数式をコピーして利用するので検索範囲を絶対参照、検索対象を相対参照とすることです。

COUNTIFS関数の検索条件に使える『比較演算子』・『ワイルドカード』

COUNTIFS関数の引数の『検索条件』には、以下の比較演算子・ワイルドカードを使うことができます。比較演算子・ワイルドカードを使用する場合は検索条件とあわせて『"(ダブルクォーテーション)』で囲みます。

比較演算子 説明 使用例
= 等しい "=10"
<> 等しくない "<>男"
より大きい ">19"
< より小さい "<20"
>= 以上 ">=20"
<= 以下 ”<=19"

ワイルドカード 説明 検索条件の使用例
* 任意の文字列 "A*"
? 任意の1文字 "?田"

比較演算子、ワイルドカードの使い方については、以下のCOUNTIF関数の記事で説明していますので、ご参照ください。
auroralights.jp