VBAは色が何で、車両が何か、サイズが何であるかを知らないので、これはちょっと複雑です。残念ながら、あなたが本当にそれを行うことができる唯一の方法は、あなたがそれを導くことができたためにあらかじめ設定された配列への値を置くことである:
Sub splititup()
Dim myarray() As String
For i = 1 To 4 'or use lastrow for a dynamic range
myarray = Split(Range("A" & i).Value, " ")
Range("B" & i).Value = myarray(0)
Range("C" & i).Value = myarray(1)
Range("D" & i).Value = myarray(2)
Next i
Dim mycolors() As Variant, myvehicles() As Variant, mysizes() As Variant
mycolors = Array("Red", "Yellow", "Blue", "Green", "Orange", "Purple")
mysizes = Array("Small", "Medium", "Large", "Big")
myvehicles = Array("Boat", "Car", "Bike", "Motorbike", "Truck")
'color, size, type
Dim Value1 As String, Value2 As String, Value3 As String
For i = 1 To 4
Value1 = Range("B" & i).Value
Value2 = Range("C" & i).Value
Value3 = Range("D" & i).Value
If Not IsInArray(Value1, mycolors) Then
If IsInArray(Value1, mysizes) Then
Range("C" & i).Value = Value1
Else
Range("D" & i).Value = Value1
End If
Else
Range("B" & i).Value = Value1
End If
If Not IsInArray(Value2, mycolors) Then
If IsInArray(Value2, mysizes) Then
Range("C" & i).Value = Value2
Else
Range("D" & i).Value = Value2
End If
Else
Range("B" & i).Value = Value2
End If
If Not IsInArray(Value3, mycolors) Then
If IsInArray(Value3, mysizes) Then
Range("C" & i).Value = Value3
Else
Range("D" & i).Value = Value3
End If
Else
Range("B" & i).Value = Value3
End If
Next i
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
これは、列B、C & DにA列から値を分割します
![Before&After](https://i.stack.imgur.com/UiHDP.png)
私は実際にそれを行うには、他の方法を知らない:それはそれをソートする方法を決定するために、対応する配列のに対して、各値をテストします。他の誰かがより良い解決策を持っているなら、分かち合いましょう。