No.3です。
補足を読みました。
最初の質問とはサンプルがかなり異なるようですが・・・
いずれにしてもSheet1のH列データは最後が「色」になっているという前提です。
尚、色の前のスペースは半角でも全角でも対応できるようにしています。
そして、Sheet3を作業用のSheetとして使用していますので、
最低3Sheetあり、Sheet3は全く使用していないSheetにしてください。
標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。
Sub Sample2()
Dim i As Long, k As Long, str As String, lastRow As Long, c As Range
Dim wS2 As Worksheet, wS3 As Worksheet
Set wS2 = Worksheets("Sheet2")
Set wS3 = Worksheets("Sheet3")
Application.ScreenUpdating = False
With Worksheets("Sheet1")
lastRow = wS2.Cells(Rows.Count, "H").End(xlUp).Row
If lastRow > 1 Then
Range(wS2.Cells(2, "H"), wS2.Cells(lastRow, "H")).ClearContents
Range(wS2.Cells(2, "V"), wS2.Cells(lastRow, "V")).ClearContents
End If
.Range("H:H").Replace what:=" ", replacement:=" ", lookat:=xlPart
For i = 2 To .Cells(Rows.Count, "H").End(xlUp).Row
If InStr(.Cells(i, "H"), " ") > 0 Then
str = Left(.Cells(i, "H"), InStrRev(.Cells(i, "H"), " ") - 1)
Set c = wS3.Range("A:A").Find(what:=str, LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
wS3.Cells(Rows.Count, "A").End(xlUp).Offset(1) = str
End If
End If
Next i
For k = 2 To wS3.Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To .Cells(Rows.Count, "H").End(xlUp).Row
If InStr(.Cells(i, "H"), wS3.Cells(k, "A")) > 0 Then
If wS3.Cells(k, "B") = "" Then
wS3.Cells(k, "B") = Trim(Replace(.Cells(i, "H"), wS3.Cells(k, "A"), ""))
Else
wS3.Cells(k, "B") = wS3.Cells(k, "B") & " " & Trim(Replace(.Cells(i, "H"), wS3.Cells(k, "A"), ""))
End If
End If
Next i
Next k
End With
lastRow = wS3.Cells(Rows.Count, "A").End(xlUp).Row
Range(wS3.Cells(2, "A"), wS3.Cells(lastRow, "A")).Copy wS2.Range("H2")
Range(wS3.Cells(2, "B"), wS3.Cells(lastRow, "B")).Copy wS2.Range("V2")
wS2.Columns.AutoFit
wS3.Cells.Clear
Application.ScreenUpdating = True
End Sub
今度はどうでしょうか?m(_ _)m
お礼
どうもありがとうございます。 最後に色の選択肢を付けているデータは、うまく行きました。 選択肢の無いデータも混在しているのですが、それは手作業で除いてからマクロを実行しようと思います。 おかげで随分楽になります。 大変助かりました。どうもありがとうございました。