Excel VBA 質問スレッド №2083 (解決済)
ローデータ 並び替えて集計
投稿者 : hk 投稿日時 : 2025/02/16(Sun) 19:49:26 OS : 未指定 EXCEL : 未指定
ローデータから並び替えて別シートに表示させたい時にどのようなマクロを使用するのが良いか質問です。
例えば、以下の様なローデータがあります。
商品コード 商品名 メーカー名 カテゴリー
111111 おいしいチョコ お菓子メーカーA チョコレート
111112 ぽてち お菓子メーカーB ポテチ
111113 キャンディ1 お菓子メーカーA 飴
111114 キャンディ! お菓子メーカーB 飴
111115 おいしいグミ お菓子メーカーC グミ
111116 ちょこ お菓子メーカーC チョコレート
このようなデータをカテゴリーを軸に、かつメーカー名ごとに並び替えて別シートに表示させるにはどうすればよいでしょうか。
まとめて集計するにはSUMIFやXLOOKUPでできますが、単品ごとに以下のように並び替えを行いたいイメージです。
カテゴリー メーカー名 商品コード 商品名
チョコレート お菓子メーカーA 111111 おいしいチョコ
チョコレート お菓子メーカーA 111111 おいしいチョコ2
チョコレート お菓子メーカーB 111111 おいしいチョコ3
チョコレート お菓子メーカーB 111111 おいしいチョコ4
飴 お菓子メーカーA 111113 キャンディ1
飴 お菓子メーカーA 111114 キャンディ!
尚、ローデータの行数が都度変わる場合にも対応可能にしたいです。
大雑把な質問で恐縮ですが、回答いただけますと幸いです。
ローデータから並び替えて別シートに表示させたい時にどのようなマクロを使用するのが良いか質問です。
例えば、以下の様なローデータがあります。
商品コード 商品名 メーカー名 カテゴリー
111111 おいしいチョコ お菓子メーカーA チョコレート
111112 ぽてち お菓子メーカーB ポテチ
111113 キャンディ1 お菓子メーカーA 飴
111114 キャンディ! お菓子メーカーB 飴
111115 おいしいグミ お菓子メーカーC グミ
111116 ちょこ お菓子メーカーC チョコレート
このようなデータをカテゴリーを軸に、かつメーカー名ごとに並び替えて別シートに表示させるにはどうすればよいでしょうか。
まとめて集計するにはSUMIFやXLOOKUPでできますが、単品ごとに以下のように並び替えを行いたいイメージです。
カテゴリー メーカー名 商品コード 商品名
チョコレート お菓子メーカーA 111111 おいしいチョコ
チョコレート お菓子メーカーA 111111 おいしいチョコ2
チョコレート お菓子メーカーB 111111 おいしいチョコ3
チョコレート お菓子メーカーB 111111 おいしいチョコ4
飴 お菓子メーカーA 111113 キャンディ1
飴 お菓子メーカーA 111114 キャンディ!
尚、ローデータの行数が都度変わる場合にも対応可能にしたいです。
大雑把な質問で恐縮ですが、回答いただけますと幸いです。
スポンサーリンク
[返信 1] Re : ローデータ 並び替えて集計
投稿者 : てらてら 投稿日時 : 2025/02/16(Sun) 21:16:55
こんにちは。
シート上でデータを選択して、「データ」>「並び替え」で、1つ目の項目を指定してから、2つ目の項目を追加して指定すれば可能です。
プログラムコードが欲しければ、マクロの記録で手順通り行えば出てきます。
出てきたコードを汎用的にするのはスキル次第です。
こんにちは。
シート上でデータを選択して、「データ」>「並び替え」で、1つ目の項目を指定してから、2つ目の項目を追加して指定すれば可能です。
プログラムコードが欲しければ、マクロの記録で手順通り行えば出てきます。
出てきたコードを汎用的にするのはスキル次第です。
[返信 2] Re : ローデータ 並び替えて集計
投稿者 : ピロリ 投稿日時 : 2025/02/17(Mon) 09:22:01
別シートに列を入れ換えたローデータ表を作ってから、別シートを第1優先キー「カテゴリー」,第2優先キー「メーカー名」で
ソーティングしてはいかがでしょう。
(1)ローデータを別シートへ「カテゴリー」(A列),「メーカー名」(B列),「商品コード」(C列),「商品名」(D列)の順にコピー
(2)別シートを第1優先キー:「カテゴリー」(A列),第2優先キー:「メーカー名」(B列)で昇順ソート
って感じです。
不明点は、<vba 列のコピー 別シート> <vba sortオブジェクト 複数条件> で検索すると良いでしょう。
別シートに列を入れ換えたローデータ表を作ってから、別シートを第1優先キー「カテゴリー」,第2優先キー「メーカー名」で
ソーティングしてはいかがでしょう。
(1)ローデータを別シートへ「カテゴリー」(A列),「メーカー名」(B列),「商品コード」(C列),「商品名」(D列)の順にコピー
(2)別シートを第1優先キー:「カテゴリー」(A列),第2優先キー:「メーカー名」(B列)で昇順ソート
って感じです。
不明点は、<vba 列のコピー 別シート> <vba sortオブジェクト 複数条件> で検索すると良いでしょう。
[返信 3] Re : ローデータ 並び替えて集計
投稿者 : 俺 投稿日時 : 2025/02/18(Tue) 10:40:11
関数でやるなら(ただし手持ちのExcelで以下の関数が使えるなら)、こんなのも。
=LET(x,MAX((A:A<>"")*ROW(A:A)),SORTBY(CHOOSE({1,2,3,4},D2:INDEX(D:D,x),C2:INDEX(C:C,x),A2:INDEX(A:A,x),B2:INDEX(B:B,x)),D2:INDEX(D:D,x),1,C2:INDEX(C:C,x),1,A2:INDEX(A:A,x),1,B2:INDEX(B:B,x),1))
関数でやるなら(ただし手持ちのExcelで以下の関数が使えるなら)、こんなのも。
=LET(x,MAX((A:A<>"")*ROW(A:A)),SORTBY(CHOOSE({1,2,3,4},D2:INDEX(D:D,x),C2:INDEX(C:C,x),A2:INDEX(A:A,x),B2:INDEX(B:B,x)),D2:INDEX(D:D,x),1,C2:INDEX(C:C,x),1,A2:INDEX(A:A,x),1,B2:INDEX(B:B,x),1))
[返信 4] Re : ローデータ 並び替えて集計
投稿者 : 俺 投稿日時 : 2025/02/18(Tue) 15:16:37
もう少し短くできるので、こっちで。
=LET(x,MAX((A:A<>"")*ROW(A:A)),a,INDEX(A:A,x),b,INDEX(B:B,x),c,INDEX(C:C,x),d,INDEX(D:D,x),SORTBY(CHOOSE({1,2,3,4},D2:d,C2:c,A2:a,B2:b),D2:d,1,C2:c,1,A2:a,1,B2:b,1))
もう少し短くできるので、こっちで。
=LET(x,MAX((A:A<>"")*ROW(A:A)),a,INDEX(A:A,x),b,INDEX(B:B,x),c,INDEX(C:C,x),d,INDEX(D:D,x),SORTBY(CHOOSE({1,2,3,4},D2:d,C2:c,A2:a,B2:b),D2:d,1,C2:c,1,A2:a,1,B2:b,1))
[返信 5] Re : ローデータ 並び替えて集計
投稿者 : hk 投稿日時 : 2025/02/22(Sat) 14:30:56
回答いただきありがとうございました。
並び替えの優先や関数でも対応できることがわかりました。
色々と試してみます。
回答いただきありがとうございました。
並び替えの優先や関数でも対応できることがわかりました。
色々と試してみます。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-07-05 18:03:08 )