Страницы: 1
RSS
VBA: поиск дубликатов и сравнение по дополнительным свойствам
 
Добрый день!
Нужна помощь в поиске способа решения задачи
Есть таблица в первом столбце которой данные с дубликатами,  во втором и третьем даты которые не дублируются
Пример дубликата
20000007   __________21.06.2014   19:01:43 _________14.08.2014   12:24:25
20000007   __________21.06.2014   19:01:43 _________09.02.2015   10:29:33
20000007   __________1.06.2015 15:07:00
Надо определить  "старые" дубликаты, сравнивая дату сначала по второму столбцу, если они совпадают то по третьему.

Мне кроме как перебор каждой ячейки и поиск ее всех дубликатов с последующей записью их (всей строки) в массив и сравнению в массиве (временной таблицей на отдельном листе) ничего не приходит. Массивы для меня темный лес.
Может есть другие способы менее замороченные?

Либо как вариант каждому найденному дубликату присвоить переменную и потом оперировать с ними обращаясь для сравнения к нужным ячейкам через Offset.
Но я не представляю как присвоить каждое найденное значение новой переменной, а не перезаписывать старую.
В итоге должно получиться
переменная1_1
переменная1_2
переменная2_1
переменная2_2
переменнаяN_1
переменнаяN_2
потом будет найдена максимальное значение среди переменная*_1, а если если они равны то среди  переменная*_2
Код
With Range("a2:a15")
        Set c = .Find(cel, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            переменная1_1  = c.offset (0,1)
            переменная1_2  = c.offset (0,2)
          Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
Изменено: jfd - 16.07.2015 13:26:14
 
задача для словаря - упорядоченный тип данных(пара: ключ- объект) со встроенной проверкой на уникальность ключа
заносите данные в словарь, используя первый столбец в качестве ключа. объект будет массивом из двух элементов - второй и третий столбцы
как только находится дубликат ключа, проверяете даты, если новый элемент более новый, то замещаете даты в словаре на новый

как-то так
Живи и дай жить..
 
Слэн,спасибо буду пробовать
 
С помощью SQL запроса. Файл должен находиться в папке C:\1\
Неизлечимых болезней нет, есть неизлечимые люди.
 
TheBestOfTheBest, "а куда в нее керосин заливают"?
 
На таблице - правой кнопкой- Обновить
Неизлечимых болезней нет, есть неизлечимые люди.
 
TheBestOfTheBest,спасибо
 
Цитата
Слэн написал:
задача для словаря - упорядоченный тип данных(пара: ключ- объект) со встроенной проверкой на уникальность ключа
заносите данные в словарь, используя первый столбец в качестве ключа. объект будет массивом из двух элементов - второй и третий столбцы
как только находится дубликат ключа, проверяете даты, если новый элемент более новый, то замещаете даты в словаре на новый
можно немного поподробней?
я представляю так. создаем словарь:
циклом по ячейкам с ключем, заполняем словарь,
при этом внутри цикла каждый раз создаем массив с объектом из двух смежных ключу ячеек
если ключ совпадает то еще один вложенный цикл сравнивает массивы и записывает самый свежий (тут вопрос, как сравнить объект словаря с массивом еще не записанным в словарь?)
и делает что то в исходной таблице, например вычеркивает "старый" ключ
так?
Страницы: 1
Читают тему
Наверх