Здравствуйте. Давно читаю ваш форум, много полезного почерпнул. Спасибо. Но сейчас без совета гуру не обойтись. Есть таблица с данными из 6 столбцов. Нужно раскидать из двух столбцов значения в итоговую таблицу из 4 столбцов, а часть данных нужно удалить, учитывая заданные условия. Одним из условий является уникальность данных в каждом из столбцов. Поэтому я помещаю в соседний дополнительный столбец метку "1 - уникальное" и "2 - неуникальное" для каждого из двух столбцов. Затем проверяю все имеющиеся условия и раскидываю данные из этих двух столбцов в итоговую таблицу. Макрос написал, он работает как надо. Но на большом количестве строк (от 10000) работает очень долго. Всё дело в способе определения уникальности значений. Я сравниваю каждое значение из одного столбца с каждым значением из другого столбца. И наоборот. Поэтому столбцы с метками заполняются очень долго. Использовать ВПР и растянуть до конца значений гораздо быстрее. На вашем форуме я нашёл как можно вставить и протянуть формулу - не помогло: фиксированный диапазон просмотра в ВПР нужно задавать
переменными, т.к. число обрабатываемых строк всегда разное и отличается в обоих столбцах.
Я вставляю формулу так:
Поиск уникальных значений в 1 столбце в сравнении с 6 столбцом, метку поместить в 3 столбец [vba]
Код
Range("C2").Select N = Range("C2").End(xlDown).Row ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-2],Range(Cells(2, 6), Cells(2, N)),1,FALSE)),1,2)"
[/vba] где Range(Cells(2, 6), Cells(2, N)) фиксированный диапазон просмотра из другого столбца N - число строк столбца со значениями (пустых ячеек нет) протягиваю так: [vba]
[/vba] Протянутая формула всегда возвращет значение "1" потому что "RC[-2]" при преобразовано в "A2", а "Range(Cells(2, 6), Cells(2, N))" в "$F$2:$F$115" не преобразовывается
Подскажите, пожалуйста третий путь для написания быстрого макроса. [moder]Обтягивайте коды кнопкой #, а не спойлером. Поправила на первый раз[/moder]
Здравствуйте. Давно читаю ваш форум, много полезного почерпнул. Спасибо. Но сейчас без совета гуру не обойтись. Есть таблица с данными из 6 столбцов. Нужно раскидать из двух столбцов значения в итоговую таблицу из 4 столбцов, а часть данных нужно удалить, учитывая заданные условия. Одним из условий является уникальность данных в каждом из столбцов. Поэтому я помещаю в соседний дополнительный столбец метку "1 - уникальное" и "2 - неуникальное" для каждого из двух столбцов. Затем проверяю все имеющиеся условия и раскидываю данные из этих двух столбцов в итоговую таблицу. Макрос написал, он работает как надо. Но на большом количестве строк (от 10000) работает очень долго. Всё дело в способе определения уникальности значений. Я сравниваю каждое значение из одного столбца с каждым значением из другого столбца. И наоборот. Поэтому столбцы с метками заполняются очень долго. Использовать ВПР и растянуть до конца значений гораздо быстрее. На вашем форуме я нашёл как можно вставить и протянуть формулу - не помогло: фиксированный диапазон просмотра в ВПР нужно задавать
переменными, т.к. число обрабатываемых строк всегда разное и отличается в обоих столбцах.
Я вставляю формулу так:
Поиск уникальных значений в 1 столбце в сравнении с 6 столбцом, метку поместить в 3 столбец [vba]
Код
Range("C2").Select N = Range("C2").End(xlDown).Row ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-2],Range(Cells(2, 6), Cells(2, N)),1,FALSE)),1,2)"
[/vba] где Range(Cells(2, 6), Cells(2, N)) фиксированный диапазон просмотра из другого столбца N - число строк столбца со значениями (пустых ячеек нет) протягиваю так: [vba]
[/vba] Протянутая формула всегда возвращет значение "1" потому что "RC[-2]" при преобразовано в "A2", а "Range(Cells(2, 6), Cells(2, N))" в "$F$2:$F$115" не преобразовывается
Подскажите, пожалуйста третий путь для написания быстрого макроса. [moder]Обтягивайте коды кнопкой #, а не спойлером. Поправила на первый раз[/moder]iddqd
Привет всем участникам Броуновского движения!
Сообщение отредактировал Manyasha - Четверг, 17.03.2016, 12:15
: фиксированный диапазон просмотра в ВПР нужно задавать переменными,
Смотрите небольшой примерчик, как это можно сделать. Не для этого случая, а так, на будущее. [vba]
Код
r1_ = Range("A" & Rows.Count).End(xlUp).Row 'Кол-во строк в столбце А, например, 20 r2_ = Range("F" & Rows.Count).End(xlUp).Row 'Кол-во строк в столбце F, например, 10 'вставляем в G2:G10 формулу =--ЕЧИСЛО(ПОИСКПОЗ(F1;$A$1:$A$20;0)), дающую 1 в случае 'нахождения значения F1 в диапазоне А1:А20 Range("G2:G" & r2_).FormulaR1C1 = "=--ISNUMBER(MATCH(RC[-1],R1C1:R" & r1_ & "C1,0))"
: фиксированный диапазон просмотра в ВПР нужно задавать переменными,
Смотрите небольшой примерчик, как это можно сделать. Не для этого случая, а так, на будущее. [vba]
Код
r1_ = Range("A" & Rows.Count).End(xlUp).Row 'Кол-во строк в столбце А, например, 20 r2_ = Range("F" & Rows.Count).End(xlUp).Row 'Кол-во строк в столбце F, например, 10 'вставляем в G2:G10 формулу =--ЕЧИСЛО(ПОИСКПОЗ(F1;$A$1:$A$20;0)), дающую 1 в случае 'нахождения значения F1 в диапазоне А1:А20 Range("G2:G" & r2_).FormulaR1C1 = "=--ISNUMBER(MATCH(RC[-1],R1C1:R" & r1_ & "C1,0))"
читайте про минусы http://www.excelworld.ru/publ/hacks/tricks/17-1-0-9 Почему я сделал именно 0 и 1? А потому, что так удобно считать количество неуникальных - просто выделить столбец с формулой и посмотреть вниз в строку состояния - там (если Вы не меняли ее стандартное обгалочивание) покажет сумму выделенного (она же является и количеством, у нас же при неуникальности единица).
читайте про минусы http://www.excelworld.ru/publ/hacks/tricks/17-1-0-9 Почему я сделал именно 0 и 1? А потому, что так удобно считать количество неуникальных - просто выделить столбец с формулой и посмотреть вниз в строку состояния - там (если Вы не меняли ее стандартное обгалочивание) покажет сумму выделенного (она же является и количеством, у нас же при неуникальности единица)._Boroda_
Пожалуйста. (Дык рано еще). Я догадался. Только после автозаписи макросы лучше вручную допиливать. Да, так. Не, не возвращается. Включать нужно. Или однократно пересчитывать лист [vba]
Код
Application.Calculate
[/vba]Но потом все равно лучше включить, чтобы не забыть. ----------------- Без Вашего файла (или его куска) помочь сложно. Но по-любому проверять задвоения ПОИСКПОЗом (или ВПРом) - вряд ли лучший выход. А про словари - не гоните лошадей. Какие словари, если Вы еще с Селектами не разобрались?
Пожалуйста. (Дык рано еще). Я догадался. Только после автозаписи макросы лучше вручную допиливать. Да, так. Не, не возвращается. Включать нужно. Или однократно пересчитывать лист [vba]
Код
Application.Calculate
[/vba]Но потом все равно лучше включить, чтобы не забыть. ----------------- Без Вашего файла (или его куска) помочь сложно. Но по-любому проверять задвоения ПОИСКПОЗом (или ВПРом) - вряд ли лучший выход. А про словари - не гоните лошадей. Какие словари, если Вы еще с Селектами не разобрались?_Boroda_