Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как ускорить работу макроса или по другому решить проблему? - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Как ускорить работу макроса или по другому решить проблему?
Дмитрий87 Дата: Среда, 20.02.2013, 11:28 | Сообщение № 1
Группа: Гости
Есть 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
Дата добавления - 20.02.2013 в 11:28
Дмитрий87 Дата: Среда, 20.02.2013, 11:33 | Сообщение № 2
Группа: Гости
p/s/ 2 столбец - это столбец С
 
Ответить
Сообщениеp/s/ 2 столбец - это столбец С

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 11:33
Дмитрий87 Дата: Среда, 20.02.2013, 12:00 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

ПРИМЕР - http://zal***il.ru/34278005 (убрать звёздочки)
 
Ответить
СообщениеПРИМЕР - http://zal***il.ru/34278005 (убрать звёздочки)

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 12:00
Дмитрий87 Дата: Среда, 20.02.2013, 12:26 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Урезать не получиться т.к пропадёт смысл примера,- в большом кол-ве значений и не факт что будут повторные значения в вырезанном диапозоне.
 
Ответить
СообщениеУрезать не получиться т.к пропадёт смысл примера,- в большом кол-ве значений и не факт что будут повторные значения в вырезанном диапозоне.

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 12:26
AlexM Дата: Среда, 20.02.2013, 12:43 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Фрагмент правил форума
Рекомендации по составлению примера
- Обычно, чтобы понять и помочь - достаточно таблицы на 10-20 строк.
- Но при этом старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу.
- Если файл содержит конфиденциальную информацию - просто замените Ваши данные на нейтральные.
- Максимальный размер файла ограничен размером в 100 Кб.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Среда, 20.02.2013, 12:45
 
Ответить
СообщениеФрагмент правил форума
Рекомендации по составлению примера
- Обычно, чтобы понять и помочь - достаточно таблицы на 10-20 строк.
- Но при этом старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу.
- Если файл содержит конфиденциальную информацию - просто замените Ваши данные на нейтральные.
- Максимальный размер файла ограничен размером в 100 Кб.

Автор - AlexM
Дата добавления - 20.02.2013 в 12:43
Дмитрий87 Дата: Среда, 20.02.2013, 12:57 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Вот пример, урезанный, но чтобы понять его работоспособность или нет, в любом случает придётся переделывать у себя под оригинал.
К сообщению приложен файл: __.xlsx (35.7 Kb)
 
Ответить
СообщениеВот пример, урезанный, но чтобы понять его работоспособность или нет, в любом случает придётся переделывать у себя под оригинал.

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 12:57
Формуляр Дата: Среда, 20.02.2013, 13:55 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
1. Не использовать операции с Variant
2. Загнать диапазон поиска в целочисленный массив
3. Не искать в пустых ячейках (конец массива определяется по 1ой пустой ячейке)
К сообщению приложен файл: 3555937.zip (32.0 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Среда, 20.02.2013, 13:57
 
Ответить
Сообщение1. Не использовать операции с Variant
2. Загнать диапазон поиска в целочисленный массив
3. Не искать в пустых ячейках (конец массива определяется по 1ой пустой ячейке)

Автор - Формуляр
Дата добавления - 20.02.2013 в 13:55
shanemac51 Дата: Среда, 20.02.2013, 14:12 | Сообщение № 8
Группа: Проверенные
Ранг: Новичок
Сообщений: 33
Репутация: 4 ±
Замечаний: 0% ±

Есть 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

а в примере а=96.000 зап
с=803.000 зап

не могу понять --где что искать

Автор - shanemac51
Дата добавления - 20.02.2013 в 14:12
Дмитрий87 Дата: Среда, 20.02.2013, 14:25 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

shanemac51, искать нужно повторы в столбцах A и С , (по поводу кол-ва -, в примере можно поменять местами столбцы A и С (или в описаниии вопроса , но суть вопроса не поменяется
 
Ответить
Сообщениеshanemac51, искать нужно повторы в столбцах A и С , (по поводу кол-ва -, в примере можно поменять местами столбцы A и С (или в описаниии вопроса , но суть вопроса не поменяется

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 14:25
Дмитрий87 Дата: Среда, 20.02.2013, 14:30 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Формуляр, может я что-то не догоняю, но вылазит ошибка "400" при запуске макроса
 
Ответить
СообщениеФормуляр, может я что-то не догоняю, но вылазит ошибка "400" при запуске макроса

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 14:30
Формуляр Дата: Среда, 20.02.2013, 14:39 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Ещё проще задача решается через SQL-запрос

[vba]
Код
SELECT `Дмитрий87$`.A
FROM `Дмитрий87$` `Дмитрий87$`, `Дмитрий87$` `Дмитрий87$_1`
WHERE `Дмитрий87$`.A = `Дмитрий87$_1`.C AND ((`Дмитрий87$`.A Is Not Null))
[/vba]
К сообщению приложен файл: AutoSQL.zip (45.8 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Среда, 20.02.2013, 14:50
 
Ответить
СообщениеЕщё проще задача решается через SQL-запрос

[vba]
Код
SELECT `Дмитрий87$`.A
FROM `Дмитрий87$` `Дмитрий87$`, `Дмитрий87$` `Дмитрий87$_1`
WHERE `Дмитрий87$`.A = `Дмитрий87$_1`.C AND ((`Дмитрий87$`.A Is Not Null))
[/vba]

Автор - Формуляр
Дата добавления - 20.02.2013 в 14:39
Формуляр Дата: Среда, 20.02.2013, 14:49 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Цитата (Дмитрий87)
Формуляр, может я что-то не догоняю, но вылазит ошибка "400" при запуске макроса

Возможно, это из-за того, что макрос в книжке был.
Перенёс в модуль.
К сообщению приложен файл: 9823587.zip (34.9 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
Сообщение
Цитата (Дмитрий87)
Формуляр, может я что-то не догоняю, но вылазит ошибка "400" при запуске макроса

Возможно, это из-за того, что макрос в книжке был.
Перенёс в модуль.

Автор - Формуляр
Дата добавления - 20.02.2013 в 14:49
Дмитрий87 Дата: Среда, 20.02.2013, 16:08 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Формуляр, если есть возможность сделать, autoSQL в xlsx по 2007, т.к. по факту мне нужно обработать почти 1.000.000 строк, я пробывал переделать под 2007, не получилось
 
Ответить
СообщениеФормуляр, если есть возможность сделать, autoSQL в xlsx по 2007, т.к. по факту мне нужно обработать почти 1.000.000 строк, я пробывал переделать под 2007, не получилось

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 16:08
Формуляр Дата: Среда, 20.02.2013, 16:41 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Цитата (Дмитрий87)
пробывал переделать под 2007, не получилось
Что именно не получилось?

Цитата (Дмитрий87)
по факту мне нужно обработать почти 1.000.000
Тогда есть резон загнать всё в Access. Там c SQL никаких проблем, а в Эксельке постоянно кикие-нибудь сюрпризы, поскольку обращается он, как я понимаю, ко всяким внешним драйверам и сервисам, а у них в каждой системе свои причуды. smile


Excel 2003 EN, 2013 EN
 
Ответить
Сообщение
Цитата (Дмитрий87)
пробывал переделать под 2007, не получилось
Что именно не получилось?

Цитата (Дмитрий87)
по факту мне нужно обработать почти 1.000.000
Тогда есть резон загнать всё в Access. Там c SQL никаких проблем, а в Эксельке постоянно кикие-нибудь сюрпризы, поскольку обращается он, как я понимаю, ко всяким внешним драйверам и сервисам, а у них в каждой системе свои причуды. smile

Автор - Формуляр
Дата добавления - 20.02.2013 в 16:41
Michael_S Дата: Среда, 20.02.2013, 17:05 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Цитата (Дмитрий87)
нужно вывести повторяющиеся значения в столбец B

Не понял. Повторы вообще - в двух столбцах, или повторы одного в другом?
т.е имеем:
1; 2; 2; 3 и
1; 3; 3; 5; 5
что выводим- 1 и 3, или 1, 2, 3 и 5?


Сообщение отредактировал Michael_S - Среда, 20.02.2013, 17:06
 
Ответить
Сообщение
Цитата (Дмитрий87)
нужно вывести повторяющиеся значения в столбец B

Не понял. Повторы вообще - в двух столбцах, или повторы одного в другом?
т.е имеем:
1; 2; 2; 3 и
1; 3; 3; 5; 5
что выводим- 1 и 3, или 1, 2, 3 и 5?

Автор - Michael_S
Дата добавления - 20.02.2013 в 17:05
Дмитрий87 Дата: Среда, 20.02.2013, 17:08 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Формуляр, огромное спасибо за то что помогаешь, но честно сказать я не силён в excel, а Access вообще 1 2 раза открывал...поэтому вот по факту файл http://zal***il.ru/34278005 (убрать звёздочки) , в котором необходимо найти совпадения и вывести в отельный столбец....если есть возможность и время....
 
Ответить
СообщениеФормуляр, огромное спасибо за то что помогаешь, но честно сказать я не силён в excel, а Access вообще 1 2 раза открывал...поэтому вот по факту файл http://zal***il.ru/34278005 (убрать звёздочки) , в котором необходимо найти совпадения и вывести в отельный столбец....если есть возможность и время....

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 17:08
Дмитрий87 Дата: Среда, 20.02.2013, 17:11 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Michael_S, повторы одного в другом, повторов в одном столбце там быть не должно т.к. я их удалил до этого с помощью функции - удалить дубликаты
 
Ответить
СообщениеMichael_S, повторы одного в другом, повторов в одном столбце там быть не должно т.к. я их удалил до этого с помощью функции - удалить дубликаты

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 17:11
Формуляр Дата: Среда, 20.02.2013, 17:22 | Сообщение № 18
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Цитата (_Boroda_)
Не, туда не нужно класть. У многих на работе политика безопасности не позволяет глупостями заниматься.
Борода совершенно прав.

Сделал БД на основе данных из примера.
Если с макросами справился - с этим разберёшься. biggrin
См. запрос (query) Сравнение

PS. Если дубликаты нужно удалять, то на это специальный запрос существует, только тогда таблицу на 2 надо разбить.
К сообщению приложен файл: 87.zip (20.9 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Среда, 20.02.2013, 17:24
 
Ответить
Сообщение
Цитата (_Boroda_)
Не, туда не нужно класть. У многих на работе политика безопасности не позволяет глупостями заниматься.
Борода совершенно прав.

Сделал БД на основе данных из примера.
Если с макросами справился - с этим разберёшься. biggrin
См. запрос (query) Сравнение

PS. Если дубликаты нужно удалять, то на это специальный запрос существует, только тогда таблицу на 2 надо разбить.

Автор - Формуляр
Дата добавления - 20.02.2013 в 17:22
_Boroda_ Дата: Среда, 20.02.2013, 17:42 | Сообщение № 19
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А вот из чисто спортивного интереса - сколько у Вас будет работать вот такой макрос?
[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]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА вот из чисто спортивного интереса - сколько у Вас будет работать вот такой макрос?
[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]

Автор - _Boroda_
Дата добавления - 20.02.2013 в 17:42
Дмитрий87 Дата: Среда, 20.02.2013, 21:04 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

_Boroda_, очень долго не стал ждать
 
Ответить
Сообщение_Boroda_, очень долго не стал ждать

Автор - Дмитрий87
Дата добавления - 20.02.2013 в 21:04
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!