2017-12-06 8 views
0

配列をループするコードを書こうとしていて、その要素が別の配列にあるかどうかを調べるために、初心者から上級者、VBAへの初心者、私が書いたコードの一部、そしてここから借りているもの(以下のこのようなもの)配列をループしていくつかの要素を移動する

さらに明確になるように(スクリーンショットへのリンクを参照)、各セルの各要素が左のリストにあるかどうかを調べます。はいの場合は、データ列の横にそれを抽出する必要があります。しかし、これまでに書いたことは、要素のうちの1つだけを抽出していることです。私は下の画面のように動作するいくつかの条件をどこに追加すべきかわかりません。任意の提案のための

https://ibb.co/kn70jb

Sub Find_other() 

Dim i, j, As Integer 
Dim splitArray() As String 



Set dataSheet = Worksheets("Data") 
maxRow = dataSheet.UsedRange.Rows(dataSheet.UsedRange.Rows.Count).Row 



Range("A2").Select 
List_Array = Range(Selection, Selection.End(xlDown)).Value 



For i = 2 To maxRow 
    fullVal = dataSheet.Cells(i, 3).Value 
    splitArray() = Split(fullVal, "|") 
    For j = 0 To UBound(splitArray) 
     partVal = splitArray(j) 
     If isInArray(partVal, List_Array) = False Then 
     Cells(i, 4) = partVal 
     End If 

    Next j 
Next i 

End Sub 


Function isInArray(ByVal stringToBeFound As String, ByVal arr As Variant) As Boolean 
For Each element In arr 
    If element = stringToBeFound Then 
     isInArray = True 
     Exit Function 
    End If 
Next element 
End Function 

感謝。

答えて

1

あなたが抱えている問題は、これは常に前の値にそれが何か新しいものを発見するたびに上書きされ、列Dにそれを見つけたアイテムを置く

Cells(i, 4) = partVal 

です。これを解決するには、カウンタ変数を作成します。

Dim count As Integer 

For i = 2 To maxRow 
    fullVal = dataSheet.Cells(i, 3).Value 
    splitArray() = Split(fullVal, "|") 
    count = 4 
    For j = 0 To UBound(splitArray) 
     partVal = splitArray(j) 
     If isInArray(partVal, List_Array) = False Then 
      Cells(i, count) = partVal 
      count = count + 1 
     End If 

    Next j 
Next i 

これは、一致が見つかっいつでも列数を増やし、あなたは新しい単語をチェックし始めたときに先頭に戻ってそれをリセットする必要があり

関連する問題