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      キャンディ!


尚、ローデータの行数が都度変わる場合にも対応可能にしたいです。
大雑把な質問で恐縮ですが、回答いただけますと幸いです。

スポンサーリンク
[返信 1] Re : ローデータ 並び替えて集計
投稿者 : てらてら     投稿日時 : 2025/02/16(Sun) 21:16:55
こんにちは。

シート上でデータを選択して、「データ」>「並び替え」で、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オブジェクト 複数条件> で検索すると良いでしょう。

[返信 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))

[返信 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))

[返信 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 )
タイトルとURLをコピーしました