Доброго времени суток! Вроде внимательно перерыл сайт, а вот не смог все же определиться как решить подобную проблему.. Она немного близкая с одной из тем этого форума, http://www.planetaexcel.ru/forum.php?thread_id=27346 но видимо только на первый взгляд.
Суть сложности - как НАЙТИ и перечислить в столбец ячейки разных столбцов, находящиеся в той же строке, что и упоминаемое уникальное значение ?! То есть метод от обратного... Звучит мудрено слишком. Попытался изложить проблему в файле... Помогите, пожалуйста, решить данную задачу! Уже какой день думаю, над тем как найти "конец клубка"..
Приспособил сортировку от nerv. Только вот такие данные сортировать - оно совсем иначе получается. В общем, смотрите сами, доделывайте. Ну и там ещё один хвост был - подправил (на работу не влияло, но неэстетично как-то... :) )
Если на больших объёмах напрягает скорость выгрузки (т.к. сейчас выгрузка "поячеешно"), то можно выгрузку сделать через массив. Хотя сперва нужно отключить обновление экрана и может быть пересчёт - я как всегда забыл эту рутину... :( Задать массив на 5 столбцов, в высоту с исходный (или отдельным блоком посчитать, сколько будет нужно строк), выгрузить в него, в конце его выгрузить на лист.
чрезмерно больших объемов не намечается. Скорость выполнения вполне приемлемая.
Что касается сортировки данных, то целесообразно применить первичную сортировку данных по алфавиту по столбцу уникальных названий, т.е. В:В листа УНИК .
Затем, было бы удобно иметь перечисление номеров (столбец D) по порядку в пределах одного уникального названия(столбец В). Третичная сортировка - сортировка названия(столбец Е) в рамках номера (Столбец D) ну и последняя сортировка - сортировка метода (столбец F) в рамках заголовка "Название" (столбец Е)
Это самый оптимальный способ отображения данных
Конечно, если у Вас будет возможность это реализовать, или хотя бы привести пример первичной сортировки, с небольшими пояснениями алгоритма выполнения в макросе, буду ОЧЕНЬ ВАМ благодарен. На таком примере можно будет попробовать остальные этапы реализовать самому.
Так ведь одна сортировка уже есть. Сделайте аналогично сортировку данных других словарей перед выгрузкой. На примере особо сортировку не проверить, разве что на
М4 М5М
Код скорректируйте так:
Dim x&, y&, Z&, w&, arr(), arr1(), arr2()
...
With Sheets("уник")
For Each el1 In stDic.keys x = w + 1 .Cells(x, 2) = el1 .Cells(x, 3) = stDicCnt.Item(el1) arr = stDic.Item(el1).keys LiteSort arr For Each el2 In arr y = w + 1 .Cells(y, 4) = el2 arr1 = nrDic.Item(el2).keys LiteSort arr1 For Each el3 In arr1 Z = w + 1 .Cells(Z, 5) = el3 arr2 = nazDic.Item(el3).keys LiteSort arr2 For Each el4 In arr2 w = w + 1 .Cells(w, 6) = el4 Next Next Next Next
Hugo, похоже все таки без Вашей помощи не обойтись..
не могу сообразить, как корректно внести запись сортировки исходных уникальных данных перед выгрузкой. Как я понимаю, по методу пузырьковой сортировки, все начинается со сверки ячеек в строках по столбцу В листа Исходный. Затем после верного расположения строк по столбцу В, аналогичная сортировка переходит на столбец С и далее на D
В принципе - если рассортировать правильно исходные данные (прямо на листе средствами XL), то тогда сортировка при выгрузке результата не нужна, т.к. данные в словарях будут лежать в порядке поступления. т.е. уже сортированные. Проверил - вроде да.
К большому сожалению, не всегда получается идти по наиболее очевидному пути..
Уровень подготовленности рядового пользователя, низок. Должным образом выполнить первоначальную сортировку без ошибок, вряд ли удасться.. А сам процесс этой первоначальной сортировки достаточно трудоемкий, сам знаю, и не всегда проходит корректно. В связи с этим хотелось бы все же поручить это действие макросу для уверенно правильного результата ..
Если возможно, помогите пожалуйста, с выполнением данной задачи.
Вы последний код смотрели (в текстовом файле)? http://www.planetaexcel.ru/docs/forum_upload/post_363808.txt Там уже добавил сортировку на выходе. Другое дело, что сортируются данные не совсем так, как хочется видеть - ну уж такие это данные. Измените формат данных - тогда будет сортировать правильно. Результат идентичен тому, что позже на скрине - а там код работал без сортировки, но на предварительно сортированных данных на листе (просто выделил диапазон, отсортировал по трём столбцам - можно это записать рекордером и добавить в код). В общем, есть два варианта кода - один требует добавить сортировку входящих данных, второй сортирует на выходе. Результат одинаков. Но данные для сортировки не годятся!
anvg, спасибо конечно за предложение.., но попытки внедрить Ваш макрос из примера в реальную форму безуспешен. То Compiler error: User-defined type not defined пришлось обходить, затем ошибку 3021. В результате, возникает сообщение с отсутствующим кодом ошибки..
Так и хочется применить выражение : "Дальше в лес - больше дров !"
С Макросом предложенным Hugo, куда проще разобраться во внедрении.
Hugo, Вы упомянули "... просто выделил диапазон, отсортировал по трём столбцам - можно это записать рекордером и добавить в код", так что попробую пойти по этому пути.