| 
    
     |  | A列〜J列までデータがあります。 A列とB列をKEYにしてC列〜J列の値をまとめて、重複してる文字を消したいと考えています。A列〜I列は文字列でJ列が数値です。C列〜I列はセル内が空欄の場合もあります。
 
 現在は下記のコードでそれぞれシートに分けて列をコピーし(<A列B列C列> <A列B列D列>など)、最後に別シートにコピーしてまとめています。
 これを元データのまま加工する方法を教えて下さい。
 
 A列  |B列  |C列  |D列  |E列  |F列  |G列  |H列  |I列  |J列
 りんご|いちご|かき |みかん|ぶどう|なし |すいか|メロン|ライチ|30
 りんご|いちご|スイカ|みかん|ぶどう|いも |すいか|メロン|ライチ|20
 りんご|もも |スイカ|みかん|ぶどう|いも |すいか|メロン|ライチ|30
 ↓
 りんご|いちご|かき・スイカ|みかん|ぶどう|なし・いも|すいか|メロン|ライチ|50
 りんご|もも |スイカ|みかん|ぶどう|いも |すいか|メロン|ライチ|30
 --------------------------------------------
 Sub test()
 Dim r As Range, LRng As Range, s1, s2, i As Integer
 Dim fAdd As String, flg As Boolean, n As Integer
 
 Application.ScreenUpdating = False '画面ちらつき制御
 
 With ActiveSheet
 
 For Each r In Range("A2", .Range("A" & Rows.count).End(xlUp))
 
 s1 = Array(r.Offset(0, 1).Value)
 s2 = Array(r.Offset(0, 2).Value)
 
 For i = 0 To UBound(s1)
 
 'A列の値E列からを探す
 Set LRng = .Columns("E:E").Find(What:=r, after:=.Range("E1"), LookAt:=xlWhole)
 
 'A列=E列が無かった場合→転機
 If LRng Is Nothing Then
 Set LRng = .Range("E" & Rows.count).End(xlUp).Offset(1, 0)
 LRng.Value = r.Value
 LRng.Offset(0, 1).Value = s1(i)
 LRng.Offset(0, 2).Value = s2(i)
 Else
 'A列=E列があった場合
 fAdd = LRng.Address
 flg = False
 Do
 'B列=F列を確認しマッチした場合の処理
 If LRng.Offset(0, 1).Value = s1(i) Then
 If LRng.Offset(0, 2).Value = "" Then
 LRng.Offset(0, 2).Value = s2(i)
 ElseIf s2(i) <> "" And InStr(1, LRng.Offset(0, 2).Value, s2(i), 1) = 0 Then
 LRng.Offset(0, 2).Value = LRng.Offset(0, 2).Value & "・" & s2(i)
 End If
 flg = True
 Exit Do
 End If
 
 Set LRng = .Columns("E:E").FindNext(LRng)
 
 Loop While Not LRng Is Nothing And LRng.Address <> fAdd
 
 'A列=E列は見つかったが、B列=F列がマッチしない場合の処理
 If Not flg Then
 Set LRng = .Range("E" & Rows.count).End(xlUp).Offset(1, 0)
 LRng.Value = r.Value
 LRng.Offset(0, 1).Value = s1(i)
 LRng.Offset(0, 2).Value = s2(i)
 End If
 
 End If
 
 Next i
 
 Next r
 
 
 End With
 
 End Sub
 
 |  |