Есть таблица из 3х столбцов, в первом столбце содержатся хэш-суммы файлов, во втором-путь к папке, где лежит файл, в третьем-имя файла. Нужно найти дублирующиеся папки (папки с одинаковыми наборами файлов, т.е. хэш-суммы будут одинаковы, а пути-отличаться), причем этот процесс нужно автоматизировать (вариант "ручками" при помощи сводной не прокатил).
Есть вариант с разделением исходной таблицы на отдельные таблицы(по папкам). Но пока не представляю, как потом сравнивать все папки между собой-папок около 50 штук. Либо, возможно, есть вариант без разделения на таблицы?
Или мб так? Никто же не знает, в каком виде Вам результат нужен. В названии темы - VBA. Вот простой вариант перебора ячеек, но нужно ждать, пока все это обработается, на моем стареньком ноутбуке не меньше 30 - 50 сек. требуется для данных в примере. Наверняка это можно сделать быстрее с применением массивов, но я пока этого не умею (хотя... все равно исходник наверное поочередно перебирать придется, не знаю пока... словари пока для меня - темный лес) Проверьте, если операция одноразовая - то может и устроит. Хотя.... говорят, если строк более 4000 может вообще очень долго думать или вообще зависнуть... Хотя... Может, терпения не хватает... или может, от версии или от железа зависит - не знаю...
_Igor_61 написал: словари пока для меня - темный лес
- есть у меня практически готовый пример кода, скорректировал только вывод (чисто демонстрация перебора содержимого, для задачи не нужно):
Код
Option Explicit
Sub Perebor() ' словарь в словаре
Dim a, i&, t$, Dic As Object, Dic2 As Object
Dim el, col
a = Range("C2", Cells(Rows.Count, "A").End(xlUp)).Value
Set Dic = CreateObject("Scripting.Dictionary")
With Dic
.CompareMode = 1
For i = 1 To UBound(a)
t = a(i, 2)
If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary")
.Item(t).Item(a(i, 1)) = a(i, 3)
Next
End With
For Each el In Dic.keys
Debug.Print "В каталоге " & el
Set Dic2 = Dic.Item(el)
For Each col In Dic2.keys
Debug.Print "С хэшем " & col & " должен быть файл" & Dic2.Item(col)
Next
Debug.Print "Переход в каталог " & el
Next
End Sub
Нужно сюда навесить ещё один словарь, где ключём ставить хэш, а итемом каталог. Далее проверяете свои файлы, вероятно циклом по каталогам, в нём по файлам - берёте хэш проверяемого первого файла, сверяетесь с словарём хэшей - если есть, то извлекаете (в копию) из словаря словарей словарь конкретного каталога с всеми другими хэшами (ключ для поиска берёте из первого словаря, где ключи хэши). и проверяете чтоб все хэши/файлы из конкретного проверяемого каталога были в этом словаре, можно проверить и чтоб не было лишних там и там, в общем смотря что нужно. Ну а если сразу хэш не нашли - можно вероятно брать следующий первый файл следующего каталога. Ну как-то так, не сложно в целом
Hugo,большое спасибо, что помогаете найти дорожку в темном лесу!
Не смогу быстро во всем разобраться (разберусь обязательно, что не пойму - буду спрашивать), но на первый взгляд сразу вопрос: откуда берутся (т.е. когда и как и каким образом) присваиваются значения вот этим зверькам: el и col? А поскольку это не понял, => непонятно, как Dic2 получился, т.к. он на el ссылается...
Сколько же мне еще нужно узнать из всего того, что пока не знаю... хватило бы времени...
На выходе должны быть папки в таком виде, как в прикрепленном файле, то бишь, совпадающие по содержимому папки как бы в сравнении.
Вариант Hugo кажется наиболее подходящим, поэтому попробую поиграть с ним, т.к. словари уже использую в этой программке. Но пока еще можно предлагать варианты:)
Вручную, повторюсь-не вариант, т.к. нужно автоматизировать этот процесс для выполнения его периодически пользователями.