このような問題を処理する場合、最初にすべての異なるエンティティを含む配列を作成します。次にできることは、InStr(startsearchingposition, String, searchforvalue) を使用することです。InStr メソッドは、検索値の開始位置を文字列で返します。それ以外の場合は、0 または NUll を返します。したがって、レコードがある場合、Instr が返す値は 1 より大きくなります。
Dim myArray(1 to 3) As Variant, i, number_of_element As Integer, y as String
Dim ws As Worksheet: Set ws = ActiveSheet
myArray(1) = "Car"
myArraY(2) = "Bus"
myArraY(3) = "Bike"
'Lets assume that all you data is in column A
For i = 1 To ws.Cells(rows.count, 1).end(xlup).row
y = ws.Cells(i,1).value
number_of_element = 1
For Each element in myArray
If InStr(1, y, element) > 1 Then
ws.cells(i, number_of_element +1).value = y
Exit For
Else
number_of_element = number_of_element + 1
End if
Next
Next i
たぶん、これはあなたの基準を完全には満たしていませんが、少なくともすべての異なるエンティティは今では別れています. 次にできることは、すべてのエンティティのすべての要素を並べ替えて、元に戻すことです。
VBA には、特定の文字列を解析するために使用できる便利なメソッドがいくつかあります。Mid() と InStr() は、私が最もよく使用する 2 つです。