VBAで、A列、B列の値を取得して、以下のC列、D列の様に出力したいと考えております。
- A列の名前の重複を1つにして、C列に出力する
- B列の値の重複は1つにして、D列に横に並べて出力する
A | B | C | D |
---|---|---|---|
鈴木 | 123 | 鈴木 | 123, 456 |
鈴木 | 456 | 加藤 | 789 |
鈴木 | 456 | 佐藤 | 100 |
加藤 | 789 | ||
加藤 | 789 | ||
佐藤 | 100 |
ネットで調べながら重複は1つにすることはできました。
ただ、B列の値を横に並べて出力することができません。
以下が私が書いた重複を1つにまとめるまでできたコードですが、私のコードを変更していただいても、
もしくは他に良いコードの書き方などありましたら、ご教示お願い致します。
VBA
1Sub teratail() 2 3 Dim Dic, i As Integer, name As String 4 Dim order_number As Long 5 Set Dic = CreateObject("Scripting.Dictionary") 'Key(キー)とItem(データ)をセットで格納して、リストなどを作成するときに使用。Pythonでいうところのたぶん辞書型 6 7 On Error Resume Next 8 9 For i = 1 To 10 10 11 name = Cells(i, 1).Value '荷受人の列の名前を1つずつ取得 12 order_number = Cells(i, 2).Value '注文番号を1つずつ取得 13 14 Dic.Add name, order_number ' Dicに追加していく 15 16 Next i 17 18 ' 出力 19 For i = 0 To Dic.Count - 1 20 mykeys = Dic.Keys 21 myItems = Dic.Items 22 Range("C" & i + 1).Value = mykeys(i) 23 Range("D" & i + 1).Value = myItems(i) 24 25 'オブジェクトを開放する 26 Set Dic = Nothing 27 28 Next i 29 30End Sub
⇒ コードの出力結果
A | B | C | D |
---|---|---|---|
鈴木 | 123 | 鈴木 | 123 |
鈴木 | 456 | 加藤 | 789 |
鈴木 | 456 | 佐藤 | 100 |
加藤 | 789 | ||
加藤 | 789 | ||
佐藤 | 100 |
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/08 14:34