По просьбе пользователя я переписал этот вопрос с дополнительной информацией и попытался прояснить его насколько возможно.Удалить дубликаты из массива VBA с условием
У меня есть код, который читает диапазон в массив. Выполняются многие вычисления. Полученный массив содержит идентификатор и два значения:
ID Seq Value
a 1 100
a 2 150
a 3 200
b 1 10
b 2 10
b 3 10
Тем не менее, шаг вычисления использует Redim Preserve
так что я должен хранить массив в качестве TestArray(1 To 3, 1 To 6)
.
Мне нужно отфильтровать массив для дубликатов идентификаторов.
Если нет дубликата, мне нужно сохранить ID, seq и значение.
Если есть дубликат ID, мне нужно сохранить идентификатор, seq и значение, где значение является максимальным значением для данного идентификатора.
Если есть дубликат ID и существует несколько экземпляров максимального значения, я хочу сохранить идентификатор, дату и значение, где значение является максимальным значением для данного идентификатора, а seq - минимальным значением для данного Я БЫ.
В принципе, для каждого идентификатора я хочу максимальное значение и если существует несколько максимумов, по умолчанию самый ранний порядковый номер.
Это пример кода, который показывает, как структурирован массив и какие результаты мне нужны.
Sub TestArray()
Dim TestArray() As Variant
Dim DesiredResults() As Variant
TestArray = Array(Array("a", "a", "a", "b", "b", "b"), _
Array(1, 2, 3, 1, 2, 3), _
Array(100, 150, 200, 10, 10, 10))
DesiredResults = Array(Array("a", "b"), Array(3, 1), Array(200, 10))
End Sub
Есть ли способ перебрать массив и найти дубликаты, а затем сравнить их? Я мог бы сделать это легко в SQL, но я борюсь в VBA.
легче было бы проверить на наличие дубликатов, а его до сих пор диапазон в листе –
является то, что вариант ему первым? вот что я имел в виду –
Нет, к сожалению, нет. Я должен вытащить необработанные данные в VBA и сделать много обработки, потому что это недостоверный вывод базы данных, который я не могу контролировать. –