我正在创建一个搜索功能,允许用户在数据库中同时搜索最多3个不同的属性(prop1,2和3),并通过将搜索到的道具的结果放入VBA中,在VBA中创建了这个子数组。但是,现在我有多达3个阵列,我需要整合数组,以便只在结果中显示数组中重复的数据。是否有任何建议如何1)只查看用户正在搜索的属性的数组和2)只将重复的数据带入最终数组,以便我可以在结果范围内显示它?任何帮助是极大的赞赏!谢谢!
答案 0 :(得分:0)
假设您的条目直接来自数据库,因此对于一个属性是唯一的,我可以考虑采用以下步骤来实现简单的解决方案:
根据有关事件的知识,创建最终数组(此处称为结果)
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
要检查一些样本,我将其添加到代码中。它只是将数组 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 只保存在观看元素时出现的累积数。