Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2019)
複数列のリストに全て一致する場合にデータ行を並べ替えしたい。
投稿日時: 23/02/24 11:53:22
投稿者: start

いつも勉強させていただいています。
ありがとうございます。
Sheet1に注文データがあります。
Sheet2の基準で並べ替えたいのですが、A,B,C列が完全一致の場合のみ、この基準で並べ替えを行いたいです。完全一致しなければ、削除しないで下に追加したいです。
並べ替え後はSheet3のようになります。
得意ではありませんが、できればVBAで行いたいと考えています。
よろしくお願い致します。
 


	注文データ(並べ替え前)			
				
1	A	B	C	D
2	商品	産地	分類	数量
3	ぶどう	山梨	A	30
4	みかん	愛媛	A	10
5	みかん	愛媛	C	40
6	りんご	青森	A	50
7	みかん	愛媛	A	10
8	みかん	愛媛	B	30
9	ぶどう	山梨	D	60
10	桃	山梨	C	70
11	メロン	愛知	C	30
12	みかん	和歌山	B	20
				
	シート名:	Sheet1		



	並べ替え基準(A,B,C列が全て一致)
    全て一致していない場合は削除しないで下に追加します。								
									
	A	B	C						
1	商品	産地	分類						
2	みかん	愛媛	A						
3	みかん	和歌山	B						
4	りんご	青森	A						
5	くり	山梨	A						
6	ぶどう	山梨	A						
7	みかん	愛媛	B						
									
	シート名:	Sheet2	



	注文データ(並べ替え後)			
				
1	A	B	C	D
2	商品	産地	分類	数量
3	みかん	愛媛	A	10
4	みかん	愛媛	A	10
5	みかん	和歌山	B	20
6	りんご	青森	A	50
7	ぶどう	山梨	A	30
8	みかん	愛媛	B	30
9	みかん	愛媛	C	40
10	ぶどう	山梨	D	60
11	桃	山梨	C	70
12	メロン	愛知	C	30
				
	シート名:	Sheet3

回答
投稿日時: 23/02/24 12:58:45
投稿者: taitani
投稿者のウェブサイトに移動

まずどこまで VBA でやってみたのか、もしくは、関数でやってみたのか提示いただかないと 「作成依頼」になってしまいます。
  
https://www.moug.net/faq/kiyaku.html
禁止事項>コード制作依頼
/// 引用 ///
「●●●を実行するようなマクロを作りたいのですが」「●●●をする方法を教えてください」といった、コード制作依頼ともとれるような質問はおやめください。

投稿日時: 23/02/24 14:45:33
投稿者: start

taitaniさん、はじめまして。
自分で同じような機能のVBAが無いか調べましたが、なかなか無くて、コード無しの質問になってしまいました。
申し訳ありません。
 
 
simpleさん、ご回答ありがとうございます。
元々のVBAは、並べ替えだけでなく、何段階もの作業を自動化したもので、10年以上前に作成された非常に長くて複雑なコードで、誰が作成したかも判らず、説明も記載されていない状態で、いつトラブルが起こるかと不安でした。ブラウザやExcelのバージョンも変わり、結果が合っているかどうかも判らない状況は問題があるため、できるだけ簡単なコードで一から作成し直したいと思っています。
 
Sheet2の並べ替え基準に商品「くり」を入れています。今月は、Sheet1の今月の注文に「くり」が1個も無かったということにして、あえて入れました。(少しでも分かりやすく説明できないかと思い、サンプルを果物にしました。)
 
ソートの考え方を教えていただき、マクロの自動作成であれば、何とかできそうな気がします。
今、手元に同じPC環境が無いので、すぐに試せないのですが、明日から試してみます。
不十分な質問にも関わらず、アドバイスをいただき、本当にありがとうございました。

回答
投稿日時: 23/02/24 18:24:27
投稿者: sk

引用:
得意ではありませんが、できればVBAで行いたいと考えています。

扱おうとされているテーブルと要求されている出力結果から鑑みた限り、
VBA よりも PowerQuery 向きの処理なのではないでしょうか。

回答
投稿日時: 23/02/24 20:30:58
投稿者: simple

ソートする際に、ユーザー定義リストを利用することができます。

1.3つの項目を文字列連結した作業列を、
   元データ(Sheet1)とソート基準(Sheet2)にそれぞれ追加します。
2.ソート基準(の連結文字列)をユーザー定義リストに登録します。
3. そのユーザー定義リストを用いて、Sheet1をソートします。
   マッチしないものは、マッチしてソートされた行のあとに並ぶことになります。
4. ユーザー定義リストを削除します。

概略以上のような考え方で対応できるはずです。
 
ユーザー定義リストの登録と削除については、検索したところ、例えば下記が参考になります。
https://jizilog.com/vba-customlist
トライしてみてはどうですか?

投稿日時: 23/02/24 23:35:12
投稿者: start

skさん、こんばんは。
貴重なアドバイスありがとうございます。
最近まで古いバージョンのExcelを使っていましたので、PowerQueryについて知りませんでした。
データの加工を自動化できる機能なのですね。
時間が掛かるかも知れませんが、ぜひ試させて下さい。
 
 
simpleさん、こんばんは。
御回答いただき、ありがとうございました。
そういう方法もあるのですね。全く思い付きませんでした。
手元に同じPC環境が無いため、教えていただきました方法を今すぐに試すことができないのが非常に残念です。
明日の夕方にPCを使えると思いますので、試してみたいと思います。
本当にありがとうございました。
 

投稿日時: 23/02/28 12:59:11
投稿者: start

simpleさん、こんにちは。
VBAではなく手作業で行ったため、時間は少し掛かりましたが、教えていだだきましたユーザー定義リストを利用する方法で必要な帳票を作成することができました。
本当にありがとうございました。
実際の作業が複雑なためVBAの作成には時間が掛かりそうですが、完成するまでは、手作業を併用しながら、改善していきたいと思います。
今回の質問については解決済みにして、VBAのコード作成段階で解らなくなって時には、また質問させて下さい。
これからもよろしくお願い致します。
 
 
skさん、こんにちは。
PowerQueryについて書籍を購入して勉強を始めました。
アドバイスをいただき、ありがとうございました。
これからもよろしくお願い致します。