Есть 2 столбца 1) столбец А в нем диапозон значений от 100.000 до 999.999 (всего порядка 850.000 значений), 2) столбец в нём тоже диапозон значений от 100.000 до 999.999 ( всего порядка 80.000) нужно вывести повторяющиеся значения в столбец B
Пробовал 2 решения но все они не привели к результату т.к. затрачивается много времени на обработку, поэтому даже дождаться не удалось....вот одно из них
[vba]
Код
Sub Find_Matches() Dim CompareRange As Variant, x As Variant, y As Variant ' Назначьте переменной CompareRange диапазон, с которым ' нужно сравнить выделенный диапазон. Set CompareRange = Range("C1:C100000") ' Примечание. Если диапазон ячеек, с которыми нужно сравнить выделенные ячейки, ' относится к другой книге или другому листу, используйте приведенный ниже синтаксис. ' Set CompareRange = Workbooks("Book2"). _ ' Worksheets("Sheet2").Range("C1:C100000") ' ' В следующем цикле каждая выделенная ячейка сравнивается ' с каждой ячейкой из диапазона CompareRange. For Each x In Selection For Each y In CompareRange If x = y Then x.Offset(0, 1) = x Next y Next x End Sub
[/vba] КАК МОЖНО УСКОРИТЬ РАБОТУ, КАК БЫСТРО ВЫПОЛНИТЬ МОЮ ЗАДАЧУ. КТО знает или сталкивался подскажите пожалуйста...!! [admin] Оформляйте коды тегами![/admin]
Есть 2 столбца 1) столбец А в нем диапозон значений от 100.000 до 999.999 (всего порядка 850.000 значений), 2) столбец в нём тоже диапозон значений от 100.000 до 999.999 ( всего порядка 80.000) нужно вывести повторяющиеся значения в столбец B
Пробовал 2 решения но все они не привели к результату т.к. затрачивается много времени на обработку, поэтому даже дождаться не удалось....вот одно из них
[vba]
Код
Sub Find_Matches() Dim CompareRange As Variant, x As Variant, y As Variant ' Назначьте переменной CompareRange диапазон, с которым ' нужно сравнить выделенный диапазон. Set CompareRange = Range("C1:C100000") ' Примечание. Если диапазон ячеек, с которыми нужно сравнить выделенные ячейки, ' относится к другой книге или другому листу, используйте приведенный ниже синтаксис. ' Set CompareRange = Workbooks("Book2"). _ ' Worksheets("Sheet2").Range("C1:C100000") ' ' В следующем цикле каждая выделенная ячейка сравнивается ' с каждой ячейкой из диапазона CompareRange. For Each x In Selection For Each y In CompareRange If x = y Then x.Offset(0, 1) = x Next y Next x End Sub
[/vba] КАК МОЖНО УСКОРИТЬ РАБОТУ, КАК БЫСТРО ВЫПОЛНИТЬ МОЮ ЗАДАЧУ. КТО знает или сталкивался подскажите пожалуйста...!! [admin] Оформляйте коды тегами![/admin]Дмитрий87
Фрагмент правил форума Рекомендации по составлению примера - Обычно, чтобы понять и помочь - достаточно таблицы на 10-20 строк. - Но при этом старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу. - Если файл содержит конфиденциальную информацию - просто замените Ваши данные на нейтральные. - Максимальный размер файла ограничен размером в 100 Кб.
Фрагмент правил форума Рекомендации по составлению примера - Обычно, чтобы понять и помочь - достаточно таблицы на 10-20 строк. - Но при этом старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу. - Если файл содержит конфиденциальную информацию - просто замените Ваши данные на нейтральные. - Максимальный размер файла ограничен размером в 100 Кб.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Сообщение отредактировал AlexM - Среда, 20.02.2013, 12:45
1. Не использовать операции с Variant 2. Загнать диапазон поиска в целочисленный массив 3. Не искать в пустых ячейках (конец массива определяется по 1ой пустой ячейке)
1. Не использовать операции с Variant 2. Загнать диапазон поиска в целочисленный массив 3. Не искать в пустых ячейках (конец массива определяется по 1ой пустой ячейке)Формуляр
Есть 2 столбца 1) столбец А в нем диапозон от 100.000 до 999.999 (а 850.000 значений), 2) столбец в нём диапозон от 100.000 до 999.999 ( 80.000) нужно вывести повторяющиеся значения в столбец B
а в примере а=96.000 зап с=803.000 зап
не могу понять --где что искать
Есть 2 столбца 1) столбец А в нем диапозон от 100.000 до 999.999 (а 850.000 значений), 2) столбец в нём диапозон от 100.000 до 999.999 ( 80.000) нужно вывести повторяющиеся значения в столбец B
shanemac51, искать нужно повторы в столбцах A и С , (по поводу кол-ва -, в примере можно поменять местами столбцы A и С (или в описаниии вопроса , но суть вопроса не поменяется
shanemac51, искать нужно повторы в столбцах A и С , (по поводу кол-ва -, в примере можно поменять местами столбцы A и С (или в описаниии вопроса , но суть вопроса не поменяетсяДмитрий87
SELECT `Дмитрий87$`.A FROM `Дмитрий87$` `Дмитрий87$`, `Дмитрий87$` `Дмитрий87$_1` WHERE `Дмитрий87$`.A = `Дмитрий87$_1`.C AND ((`Дмитрий87$`.A Is Not Null))
[/vba]
Ещё проще задача решается через SQL-запрос
[vba]
Код
SELECT `Дмитрий87$`.A FROM `Дмитрий87$` `Дмитрий87$`, `Дмитрий87$` `Дмитрий87$_1` WHERE `Дмитрий87$`.A = `Дмитрий87$_1`.C AND ((`Дмитрий87$`.A Is Not Null))
Формуляр, если есть возможность сделать, autoSQL в xlsx по 2007, т.к. по факту мне нужно обработать почти 1.000.000 строк, я пробывал переделать под 2007, не получилось
Формуляр, если есть возможность сделать, autoSQL в xlsx по 2007, т.к. по факту мне нужно обработать почти 1.000.000 строк, я пробывал переделать под 2007, не получилосьДмитрий87
Тогда есть резон загнать всё в Access. Там c SQL никаких проблем, а в Эксельке постоянно кикие-нибудь сюрпризы, поскольку обращается он, как я понимаю, ко всяким внешним драйверам и сервисам, а у них в каждой системе свои причуды.
Цитата (Дмитрий87)
пробывал переделать под 2007, не получилось
Что именно не получилось?
Цитата (Дмитрий87)
по факту мне нужно обработать почти 1.000.000
Тогда есть резон загнать всё в Access. Там c SQL никаких проблем, а в Эксельке постоянно кикие-нибудь сюрпризы, поскольку обращается он, как я понимаю, ко всяким внешним драйверам и сервисам, а у них в каждой системе свои причуды. Формуляр
Не понял. Повторы вообще - в двух столбцах, или повторы одного в другом? т.е имеем: 1; 2; 2; 3 и 1; 3; 3; 5; 5 что выводим- 1 и 3, или 1, 2, 3 и 5?
Цитата (Дмитрий87)
нужно вывести повторяющиеся значения в столбец B
Не понял. Повторы вообще - в двух столбцах, или повторы одного в другом? т.е имеем: 1; 2; 2; 3 и 1; 3; 3; 5; 5 что выводим- 1 и 3, или 1, 2, 3 и 5?Michael_S
Сообщение отредактировал Michael_S - Среда, 20.02.2013, 17:06
Формуляр, огромное спасибо за то что помогаешь, но честно сказать я не силён в excel, а Access вообще 1 2 раза открывал...поэтому вот по факту файл http://zal***il.ru/34278005 (убрать звёздочки) , в котором необходимо найти совпадения и вывести в отельный столбец....если есть возможность и время....
Формуляр, огромное спасибо за то что помогаешь, но честно сказать я не силён в excel, а Access вообще 1 2 раза открывал...поэтому вот по факту файл http://zal***il.ru/34278005 (убрать звёздочки) , в котором необходимо найти совпадения и вывести в отельный столбец....если есть возможность и время....Дмитрий87
Michael_S, повторы одного в другом, повторов в одном столбце там быть не должно т.к. я их удалил до этого с помощью функции - удалить дубликаты
Michael_S, повторы одного в другом, повторов в одном столбце там быть не должно т.к. я их удалил до этого с помощью функции - удалить дубликатыДмитрий87
А вот из чисто спортивного интереса - сколько у Вас будет работать вот такой макрос? [vba]
Код
Sub Find_Matches() Dim CompareRange, x As Range, n, tt tt = Timer Application.ScreenUpdating = 0 Application.Calculation = xlCalculationManual Set CompareRange = Range("C1:C" & Range("C1:C" & Rows.Count).End(xlUp).Row) On Error Resume Next For Each x In Selection n = CompareRange.Find(What:=x) 'e = Err.Number If Err.Number = 0 Then x.Offset(0, 1) = x.Value Err.Number = 0 Next x On Error GoTo 0 Application.ScreenUpdating = 1 Application.Calculation = xlCalculationAutomatic tt = Timer - tt MsgBox "Все" & Chr(10) & "Время работы - " & Format(tt / 24 / 60 / 60, "hh\ч mm\м ss\с") End Sub
[/vba]
А вот из чисто спортивного интереса - сколько у Вас будет работать вот такой макрос? [vba]
Код
Sub Find_Matches() Dim CompareRange, x As Range, n, tt tt = Timer Application.ScreenUpdating = 0 Application.Calculation = xlCalculationManual Set CompareRange = Range("C1:C" & Range("C1:C" & Rows.Count).End(xlUp).Row) On Error Resume Next For Each x In Selection n = CompareRange.Find(What:=x) 'e = Err.Number If Err.Number = 0 Then x.Offset(0, 1) = x.Value Err.Number = 0 Next x On Error GoTo 0 Application.ScreenUpdating = 1 Application.Calculation = xlCalculationAutomatic tt = Timer - tt MsgBox "Все" & Chr(10) & "Время работы - " & Format(tt / 24 / 60 / 60, "hh\ч mm\м ss\с") End Sub