循环遍历数组,然后移动一些元素

时间:2017-12-06 12:58:22

标签: vba excel-vba excel

所以,我试着编写一个代码来循环遍历一个数组并找到该元素是否在另一个数组中,那么我正在尝试使用它们,因为我是VBA的新手,一些代码我写了我自己,其中一些我从这里借来的(如下面这个功能)

为了更清楚(如下所示 - 链接到屏幕截图),我循环遍历列数据并查看每个元素(在每个单元格中)是否在我的列表左侧。如果是,则应将其提取到数据列旁边。但到目前为止我写的只是提取一个元素。我不知道我应该在哪里添加一些可以在下面的屏幕上工作的条件。

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 个答案:

答案 0 :(得分:1)

你遇到的问题是

Cells(i, 4) = partVal

这将始终将它找到的项目放入D列,每次找到新内容时都会覆盖之前的值。你可以通过制作一个计数器变量来解决这个问题。

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

这会在找到匹配项时增加列数,并在您开始使用新单词检查时将其重置为开头