2017-12-06 3 views
0

Also, ich versuche, einen Code zu schreiben, der durch ein Array durchlaufen wird und finde, ob dieses Element in einem anderen Array ist, dann versuche ich mit ihnen zu spielen, wie ich bin Neuling zu VBA, etwas von dem Code, den ich selbst geschrieben habe, und etwas davon, das ich hier entliere (wie diese Funktion unten)Schleife durch ein Array und verschiebe dann einige Elemente

Um klarer zu sein (wie Sie unten sehen können - Link zu einem Screenshot), im Looping durch Spalte Daten und schauen, ob jedes Element (in jeder Zelle) auf meiner Liste auf der linken Seite ist. Wenn ja, sollte es neben der Datenspalte extrahiert werden. Aber was ich bisher geschrieben habe, ist das Extrahieren von nur einem Element. Ich bin nicht sicher, wo ich eine Bedingung hinzufügen sollte, die wie auf dem Bildschirm unten funktionieren würde.

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 

Vielen Dank für alle Vorschläge.

Antwort

1

Das Problem, das Sie haben mit

Cells(i, 4) = partVal 

Dies wird immer das Element steckt es in Spalte D findet, den vorherigen Wert zu überschreiben jedes Mal etwas Neues findet. Sie können dies lösen, indem Sie eine Zählervariable erstellen.

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 

Dies soll die Spaltennummer jederzeit erhöhen, dass es eine Übereinstimmung findet und es zurück zum Start zurück, wenn Sie mit einem neuen Wort beginnen Überprüfung

Verwandte Themen