Я создаю функцию поиска, которая позволяет пользователям одновременно искать до 3 разных свойств в базе данных (prop1,2 и 3), и я создал эту подпрограмму в VBA, поместив результаты для искомой опоры в массив. Однако теперь, когда у меня есть до 3 массивов, мне нужно объединить массивы, чтобы в результатах отображались только те данные, которые дублируются в массивах. Есть ли какие-либо советы о том, как 1) просматривать массивы только для свойств, которые ищет пользователь, и 2) брать только те данные, которые повторяются в окончательный массив, чтобы я мог отображать их в диапазоне результатов? Любая помощь приветствуется! Спасибо!
VBA::объединение массивов
comment
не могли бы вы показать нам часть своего кода и что вы пробовали? возможно, вы могли бы объединить свои массивы до конца вашего кода
- person JMax   schedule 23.06.2011
Ответы (1)
Предполагая, что ваши записи взяты непосредственно из базы данных и, следовательно, уникальны для одного свойства, я могу придумать следующие шаги для простого решения:
- Объединить массивы вместе (prop1, prop2, prop3 > temp)
- Подсчет вхождений для каждого элемента (в этом примере код tempCount)
Основываясь на знаниях о вхождениях, создайте окончательный массив (здесь он называется результат).
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, result и 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 просто содержит совокупное количество вхождений в точке, в которой просматривается элемент.
person
adrianus
schedule
24.06.2011