VBA ::整合数组

时间:2011-06-23 12:00:40

标签: arrays vba consolidation

我正在创建一个搜索功能,允许用户在数据库中同时搜索最多3个不同的属性(prop1,2和3),并通过将搜索到的道具的结果放入VBA中,在VBA中创建了这个子数组。但是,现在我有多达3个阵列,我需要整合数组,以便只在结果中显示数组中重复的数据。是否有任何建议如何1)只查看用户正在搜索的属性的数组和2)只将重复的数据带入最终数组,以便我可以在结果范围内显示它?任何帮助是极大的赞赏!谢谢!

1 个答案:

答案 0 :(得分:0)

假设您的条目直接来自数据库,因此对于一个属性是唯一的,我可以考虑采用以下步骤来实现简单的解决方案:

  1. 合并数组( prop1 prop2 prop3 > temp
  2. 计算每个元素的出现次数(在此示例中为代码 tempCount
  3. 根据有关事件的知识,创建最终数组(此处称为结果

    Dim prop1() As Variant
    Dim prop2() As Variant
    Dim prop3() As Variant
    Dim temp() As Variant
    Dim tempCount() As Integer
    Dim result() As Variant
    
    ReDim temp(UBound(prop1) + UBound(prop2) + UBound(prop3) + 1)
    
    'merge arrays
    Dim i As Integer
    On Error Resume Next
        For i = 0 To UBound(temp)
        temp(i * 3) = prop1(i)
        temp(i * 3 + 1) = prop2(i)
        temp(i * 3 + 2) = prop3(i)
    Next i
    
    'count occurences
    ReDim tempCount(UBound(temp) + 1)
    Dim j As Integer
    For i = 0 To UBound(temp)
    tempCount(i) = 1
    For j = 0 To i - 1
    
    'comparison of elements
        If temp(i) = temp(j) Then
        tempCount(i) = tempCount(i) + 1
        End If
    Next j
    Next i
    
    ReDim result(UBound(temp) + 1)
    
    'if an element occurs 3 times, add it to result
    Dim count As Integer
    count = 0
    For i = 0 To UBound(tempCount)
        If tempCount(i) = 3 Then
            result(count) = temp(i)
            count = count + 1
        End If
    Next i
    
  4. 要检查一些样本,我将其添加到代码中。它只是将数组 temp 结果 tempCount 打印到A,B和C列。

    'some sample arrays
    prop1 = Array("a", "b", "c", "d", "e")
    prop2 = Array("b", "c", "f")
    prop3 = Array("b", "c", "d", "g")
    
    'some sample Output
    
    'temp
    Cells(1, 1).Value = "temp:"
    For i = 0 To UBound(temp)
        Cells(i + 2, 1).Value = temp(i)
    Next i
    
    'result
    Cells(1, 2).Value = "result:"
    For i = 0 To UBound(result)
        Cells(i + 2, 2).Value = result(i)
    Next i
    
    'count:
    Cells(1, 3).Value = "count:"
    For i = 0 To UBound(tempCount)
        Cells(i + 2, 3).Value = tempCount(i)
    Next i
    

    注意: tempCount 只保存在观看元素时出现的累积数