【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 EXCEL
【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要

本ページはプロモーションが含まれています

EXCELで同じ名前、項目ごとに集計する方法を紹介。
関数だけでvbaは不要です。

同じ名前、項目ごとに集計する方法

まずはサンプルシート。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 サンプルシート
サンプルシート

A列に商品、B列に金額が入力されています。
A列の商品別に集計する方法です。

お急ぎの方はコピー&ペーストして下さい

C2に

=INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$31&””,$A$2:$A$31&””,)<>ROW($1:$30))*10000+ROW($2:$31),),ROW(A1)))&””

D2に

=IF(C2=””,””,SUMIF(A:A,C2,B:B))

最後にC2:D2を下にずらっとコピーです。
結果はこちら。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 結果
結果

Yahoo知恵袋を参照しました。

ちょこっと解説

C2に入れた関数式についてちょこっと解説。
少しずつ刻んで見て行きましょう。

MATCH($A:$A&””,$A:$A&””,)

=INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$31&””,$A$2:$A$31&””,)<>ROW($1:$30))*10000+ROW($2:$31),),ROW(A1)))&””

黄色で示した部分です。
こちらは何をしているかというと。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 MATCH関数
MATCH関数

A2:A31の範囲内で同じ項目を探してます。
同じ項目があれば最初にそれが出てきた順番を。
新規の場合は配列内(A2:A31)の順番を返します。
「いす」はA2では配列の1番目に登場しているので1を
A6ではA2で登場した時と同じ1を返しています。

空白のセルであるA10は新規なので配列内の順番である9を返しています。

検索範囲を変更したい場合は$A$2:$A$31の部分を変更して下さい。

ROW(:) / ROW(:)

=INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$31&””,$A$2:$A$31&””,)<>ROW($1:$30))*10000+ROW($2:$31),),ROW(A1)))&””

こちらは簡単。
配列の行番号を返します。
D2から下に入力しました。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 ROW関数
ROW関数

1から順番に増えてます。

もうひとつROW関数。

=INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$31&””,$A$2:$A$31&””,)<>ROW($1:$30))*10000+ROW($2:$31),),ROW(A1)))&””

E2から下に入力。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 ROW関数2
ROW関数2

こんどは2行目からなので2から増えていますね。

こちらも$1:$30、$2:$31の範囲を使用に合わせて変更して下さい。

INDEX((MATCH($A:$A&””,$A:$A&””,)<>ROW(:))*10000+ROW(:),)

=INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$31&””,$A$2:$A$31&””,)<>ROW($1:$30))*10000+ROW($2:$31),),ROW(A1)))&””

上で解説した部分との合わせ技になってきました。
こちらの黄色塗りした部分をF2に入力した結果です。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 INDEX関数
INDEX関数

(MATCH($A$2:$A$31&””,$A$2:$A$31&””,)<>ROW($1:$30))
の部分で解説1と解説2の計算結果を比較しています。
C列,D列が異なる値かどうかの比較です。

INDEX((MATCH($A$2:$A$31&””,$A$2:$A$31&””,)<>ROW($1:$30))*10000+ROW($2:$31),)

の計算でC列とD列が同じ値の場合は行番号を。
異なる値の場合は10000をプラスした形になってます。
10000をプラスしたというのは比較結果が正なら1、偽なら0。
1と0に対しての*10000なので10000か0のいずれかです。

項目数が10000個以上ある時は「*10000」の桁を増やしてください。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 比較
比較

SMALL(INDEX((MATCH($A:$A&””,$A:$A&””,)<>ROW(:))*10000+ROW(:),),ROW(A1))

=INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$31&””,$A$2:$A$31&””,)<>ROW($1:$30))*10000+ROW($2:$31),),ROW(A1)))&””

SMALL関数です。
これは解説3の計算結果を
小さいから順に並べ替えています。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 SMALL関数
SMALL関数

INDEX(A:A,SMALL(INDEX((MATCH($A:$A&””,$A:$A&””,)<>ROW(:))*10000+ROW(:),),ROW(A1)))&””

C列解説の最後です。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 C列最後
C列最後

A列の中から解説4で計算した行番号の項目を表示しています。

Excelの魔術師へ! さいしょの一歩

D列での集計

いよいよ最後。
D列での集計です。

C列に表示されている項目と同じ項目の合計をSUMIFで計算しています。

【EXCEL】同じ名前、項目ごとに集計する方法 vbaは不要 D列での集計
D列での集計

ほかにもいろいろ書いてます
↓ 下記からご覧ください
サイトマップ
ブックマークして頂けると嬉しいです
よろしくお願いいたします

コメント

タイトルとURLをコピーしました