ID非公開

2021/6/10 17:23

33回答

VBAで重複データをまとめたい

Visual Basic | Excel48閲覧xmlns="http://www.w3.org/2000/svg">250

ベストアンサー

0

ThanksImg質問者からのお礼コメント

大変助かりました。。ありがとうございました。 他の方もご回答いただきありがとうございました。

お礼日時:6/14 15:59

その他の回答(2件)

0

エクセルの機能やシート関数を使って簡潔に Sub Macro1() Dim Tr As Range, Buf As String Set Tr = Range("F2") Range("テーブル1[[#All],[名前]:[コード]]").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("F1"), Unique:=True Do While Tr <> "" Buf = Evaluate("TEXTJOIN("","",,IF(テーブル1[名前]=" & Tr.Address & ",テーブル1[日付],""""))") With Tr.Offset(, 3).Resize(, UBound(Split(Buf, ",")) + 1) .Value = WorksheetFunction.Transpose(Split(Buf, ",")) .NumberFormatLocal = "yyyy/m/d" End With Set Tr = Tr.Offset(1) Loop End Sub

元のデータはテーブル化しています(マクロコード、シート関数で対象セルを見やすなり、範囲を気にせずに作成可能なので) 処理内容: 1.重複削除はフィルターオプションで 2.日付の抽出はTEXTJOIN関数で一旦対象を文字列として結合 3.Split関数で分割して貼り付け 2.3を繰り返し処理

0

とりあえず、E列から書き始める仕様にしましたが、以下で できると思います。 3列で文字をつないで重複しているデータを探し、日付を書き加えました。 Sub test1() Dim Dic, i As Long, buf As String, Keys Dim vv() Dim j As Long Set Dic = CreateObject("Scripting.Dictionary") For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row buf = Cells(i, 1).Value & "," & Cells(i, 2).Value & "," & Cells(i, 3).Value If Not Dic.Exists(buf) Then Dic.Add buf, buf End If Next i ''出力 Keys = Dic.Keys For i = 0 To Dic.Count - 1 cnt = 0 For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(j, 1).Value & "," & Cells(j, 2).Value & "," & Cells(j, 3).Value = Keys(i) Then ReDim Preserve vv(cnt) vv(cnt) = Cells(j, 4) cnt = cnt + 1 End If Next j For j = 1 To 3 + cnt If j <= 3 Then Cells(i + 2, j + 4) = Split(Keys(i), ",")(j - 1) Else Cells(i + 2, j + 4) = vv(j - 4) End If Next j Next i End Sub

ID非公開

質問者2021/6/11 21:55

大変助かりました。 参考にさせていただき、今後は1から自分で書けるよう精進します。