Option ExplicitPrivate Sub Command1_Click() Dim arr1, arr2, arr3 Dim s1 As String, s2 As String, s3 As String Dim a() As String Dim i, k arr1 = Array("M", "P", "N", "G") arr2 = Array("K", "M", "G") arr3 = Array("M", "L", "S", "G", "K") s1 = "|" & Join(arr1, "|") & "|" s2 = "|" & Join(arr2, "|") & "|" For i = 0 To UBound(arr3) s3 = "|" & arr3(i) & "|" MsgBox s3 If InStr(s1, s3) > 0 And InStr(s2, s3) > 0 Then ReDim Preserve a(k) a(k) = arr3(i) Debug.Print a(k) k = k + 1 End If Next End Sub
如果数据不是特别多的话,估计用dictionary对象比较好处理。
利用 ListBox 如下:Private Declare Function SendMessagebyString Lib _ "user32" Alias "SendMessageA" (ByVal hWND As Long, _ ByVal wMsg As Long, ByVal wParam As Long, _ ByVal lParam As String) As LongPrivate Const LB_FINDSTRINGEXACT = &H1A2 '在 ListBox 中精确查找Private Sub Command1_Click() Dim i As Long, n As Long '首先把 arr1 放入列表 For i = Lbound(arr1) To Ubound(arr1) List1.AddItem arr1(i) Next i '在列表中查找 arr2 的元素 For i = Lbound(arr2) To Ubound(arr2) n = SendMessagebyString(List1.hWnd, LB_FINDSTRINGEXACT, -1, arr2(i)) If n > -1 Then List1.ItemData(n) = List1.ItemData(n) + 1 Next i '在列表中查找 arr3 的元素 For i = Lbound(arr3) To Ubound(arr3) n = SendMessagebyString(List1.hWnd, LB_FINDSTRINGEXACT, -1, arr3(i)) If n > -1 Then List1.ItemData(n) = List1.ItemData(n) + 1 Next i '删除非共用的 For i = List1.ListCount - 1 To 0 Step -1 If List1.ItemData(i) < 2 Then List1.RemoveItem i Next i End SubListBox 中就是三个数组共有的了。
可以配合dictionary对象,方便
Dim arr1, arr2, arr3
Dim s1 As String, s2 As String, s3 As String
Dim a() As String
Dim i, k
arr1 = Array("M", "P", "N", "G")
arr2 = Array("K", "M", "G")
arr3 = Array("M", "L", "S", "G", "K")
s1 = "|" & Join(arr1, "|") & "|"
s2 = "|" & Join(arr2, "|") & "|"
For i = 0 To UBound(arr3)
s3 = "|" & arr3(i) & "|"
MsgBox s3
If InStr(s1, s3) > 0 And InStr(s2, s3) > 0 Then
ReDim Preserve a(k)
a(k) = arr3(i)
Debug.Print a(k)
k = k + 1
End If
Next
End Sub
"user32" Alias "SendMessageA" (ByVal hWND As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As String) As LongPrivate Const LB_FINDSTRINGEXACT = &H1A2 '在 ListBox 中精确查找Private Sub Command1_Click()
Dim i As Long, n As Long '首先把 arr1 放入列表
For i = Lbound(arr1) To Ubound(arr1)
List1.AddItem arr1(i)
Next i '在列表中查找 arr2 的元素
For i = Lbound(arr2) To Ubound(arr2)
n = SendMessagebyString(List1.hWnd, LB_FINDSTRINGEXACT, -1, arr2(i))
If n > -1 Then List1.ItemData(n) = List1.ItemData(n) + 1
Next i '在列表中查找 arr3 的元素
For i = Lbound(arr3) To Ubound(arr3)
n = SendMessagebyString(List1.hWnd, LB_FINDSTRINGEXACT, -1, arr3(i))
If n > -1 Then List1.ItemData(n) = List1.ItemData(n) + 1
Next i '删除非共用的
For i = List1.ListCount - 1 To 0 Step -1
If List1.ItemData(i) < 2 Then List1.RemoveItem i
Next i
End SubListBox 中就是三个数组共有的了。