Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6520 / 13644 ツリー ←次へ | 前へ→

【44767】VBAでこのようなデータの並び替え いちこ 06/11/30(木) 22:25 質問[未読]
【44774】Re:VBAでこのようなデータの並び替え ponpon 06/12/1(金) 0:10 発言[未読]
【44776】Re:VBAでこのようなデータの並び替え いちこ 06/12/1(金) 0:27 お礼[未読]

【44767】VBAでこのようなデータの並び替え
質問  いちこ  - 06/11/30(木) 22:25 -

引用なし
パスワード
   はじめまして。
エクセルでデータを作っているのですが、
このような場合の並べ替えをVBAでできますでしょうか?

   A   B   C   D 
1 100-A  赤  101-B  青
2 101-B  青  104-E  黒
3 102-C  黄  105-F  緑 
4 103-D  白  106-G  紫 
5 104-E  黒 
6 105-F  緑 
7 106-G  紫 


このような表があり、
AとBの列は通し番号のついたデータがあり、
CとDには飛び番号でデータがあります。
これを、


   A   B   C   D 
1 100-A  赤
2 101-B  青  101-B  青 
3 102-C  黄 
4 103-D  白 
5 104-E  黒  104-E  黒 
6 105-F  緑  105-F  緑 
7 106-G  紫  106-G  紫 


このように、
ABのデータに合わせてCDを並べ替えしたいのですが、
どのようにすれば良いのでしょうか?
教えていただけましたらお願いします。

【44774】Re:VBAでこのようなデータの並び替え
発言  ponpon  - 06/12/1(金) 0:10 -

引用なし
パスワード
   C列D列には重複はないのでしょうか?

重複がないのであれば、こんな感じで出来ると思います。

Sub test()
  Dim myDic As Object
  Dim r As Range, rr As Range
  
  Application.ScreenUpdating = False
  With Sheets("Sheet1")
    Set myDic = CreateObject("Scripting.Dictionary")
    For Each r In .Range("C1", .Range("C65536").End(xlUp))
      myDic(r.Value) = r.Offset(, 1).Value
    Next
    .Range("C:D").ClearContents
    For Each rr In .Range("A1", .Range("A65536").End(xlUp))
      For Each mykey In myDic.Keys
        If rr.Value = mykey Then
          rr.Offset(, 2).Value = mykey
          rr.Offset(, 3).Value = myDic(mykey)
        End If
      Next
    Next
  End With
  Application.ScreenUpdating = True
End Sub

【44776】Re:VBAでこのようなデータの並び替え
お礼  いちこ  - 06/12/1(金) 0:27 -

引用なし
パスワード
   ponponさん、早速のご回答ありがとうございます。
教えていただいたマクロでうまくデータを並び替えすることができました。
どうもありがとうございました。

6520 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free