2017-08-02 15 views
0

私は以下のように見えるエクセル内のデータ、行ごとが、列Aのすべての情報何、私が列Bに出力を必要とする個別の列にセルと出力結果内のテキスト

A 
--------------------- 
Yellow Car Small 
--------------------- 
Red Bike Big Big 
--------------------- 
Big Yellow Car 
--------------------- 
Yellow Big Motorbike 

を持っているを見つけます色はC、大きさはC、Dはどのような種類です。

どこから始めますか?

アイブ氏は、各カテゴリ

Colour | Type  | Size 
-------|-----------|------ 
Blue | Car  | Small 
-------|-----------|------ 
Yellow | Bike  | Big 
-------|-----------|------ 
Red | Motorbike | Large 

ためのリストを作ったが、私はイムは、何かが足りないと思います。

答えて

1

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

私は実際にそれを行うには、他の方法を知らない:それはそれをソートする方法を決定するために、対応する配列のに対して、各値をテストします。他の誰かがより良い解決策を持っているなら、分かち合いましょう。

関連する問題