所以,我试着编写一个代码来循环遍历一个数组并找到该元素是否在另一个数组中,那么我正在尝试使用它们,因为我是VBA的新手,一些代码我写了我自己,其中一些我从这里借来的(如下面这个功能)
为了更清楚(如下所示 - 链接到屏幕截图),我循环遍历列数据并查看每个元素(在每个单元格中)是否在我的列表左侧。如果是,则应将其提取到数据列旁边。但到目前为止我写的只是提取一个元素。我不知道我应该在哪里添加一些可以在下面的屏幕上工作的条件。
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
感谢您的任何建议。
答案 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
这会在找到匹配项时增加列数,并在您开始使用新单词检查时将其重置为开头