现在可能有好几个数组,比如arr1(),arr2(),arr3()等,怎样查找出他们共同拥有的字符串呢,然后放到一个数组中去?

解决方案 »

  1.   

    遍历数组
    可以配合dictionary对象,方便
      

  2.   

    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
      

  3.   

    如果数据不是特别多的话,估计用dictionary对象比较好处理。
      

  4.   

    利用 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 中就是三个数组共有的了。