Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2011, 04:07   #1
Deison
 
Регистрация: 01.02.2011
Сообщений: 4
Печаль Необходимо сравнить 2 столбца и отредактировать совпадающие строки

Доброе время суток!
3-й день на работе и такая засада. Помогите моему горю. До этого с макросами не сталкивался.
Есть 2 листа excel "остаток" и "тракция".
Неоходимо сравнить столбец "станция" из первого листа с соответсвующим столбцом второго листа. И при совпадении заменить ячейку "местонахождение" в первом листе на "тракционный". В отдельной ячейке посчитать количество замененных.
Заранее спасибо.
Вложения
Тип файла: zip пример.zip (20.6 Кб, 14 просмотров)
Deison вне форума Ответить с цитированием
Старый 02.02.2011, 04:56   #2
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Пробуйте. В А4 количество замененных.
Вложения
Тип файла: rar пример1.rar (22.7 Кб, 27 просмотров)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 02.02.2011 в 04:58.
kuklp вне форума Ответить с цитированием
Старый 02.02.2011, 05:48   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Еще вариант.
Вложения
Тип файла: rar пример_2.rar (23.8 Кб, 28 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.02.2011, 06:15   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Здравствуйте, тезка. От скуки проверил по скорости оба варианта. С Find вдвое медленней. Проверял так:
Public Sub test()
Dim t As Double, i%
t = Timer
For i = 1 To 100
Call Main
Next
MsgBox Timer - t
t = Timer
For i = 1 To 100
Call MyCompare
Next
MsgBox Timer - t
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 02.02.2011, 08:16   #5
Deison
 
Регистрация: 01.02.2011
Сообщений: 4
По умолчанию

Спасибо большое. С той таблицей оба варианта работают. Но можно ли сделать макрос универальней? во вложении он уже не работает(
И как проще переносить макрос с таблицы в таблицу?
Вложения
Тип файла: zip остаток 31.01.2011 (1).xls.zip (79.6 Кб, 13 просмотров)
Deison вне форума Ответить с цитированием
Старый 02.02.2011, 08:53   #6
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

А насчет универсальности... Ну, учите ВБА и возможно Вы когда-нибудь напишете универсальный макрос всех времен и народов:-)
Вложения
Тип файла: rar остаток 31.01.2011.rar (65.8 Кб, 25 просмотров)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 02.02.2011, 08:58   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
От скуки проверил по скорости оба варианта. С Find вдвое медленней. Проверял так...
Я Вам верю. А если попробовать сравнивать 2 таблицы в которых, например, по 10 000 строк?
Макрос с использованием массивов будет (хоть и очень быстро) сравнивать 10^8 раз. Т.е. каждое значение с каждым. В то время, как метод Find будет использоваться 10 000 раз. Если Вам не лень - проверьте на таблицах подобного объема. Я не берусь утверждать, какой из способов выиграет.

Цитата:
Сообщение от Deison Посмотреть сообщение
...можно ли сделать макрос универальней? во вложении он уже не работает. И как проще переносить макрос с таблицы в таблицу?
Не экономьте слова. Объясните подробнее: что значит "с таблицы в таблицу"? Что значит "универальней"?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.02.2011, 09:07   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

К тому же, макрос с использованием массивов, предложенный уважаемым kuklp, можно существенно оптимизировать по скорости.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.02.2011, 09:09   #9
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Я тоже думаю, что на больших объемах с Find будет быстрей. Но проверять уже лень. Страна проснулась:-)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 02.02.2011, 09:16   #10
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

В последнем варианте я немного доработал макрос. Если бы знать что совпадение может встетиться только раз, можно было бы добавить досрочный выход из цикла, а так... Да вроде и без этого время вполне приемлемое.
Замерил.
С Exit For 2,18сек,
без 2,2сек.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 02.02.2011 в 09:24.
kuklp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Посогите сравнить 2 столбца в Exel zip4ik Microsoft Office Excel 8 18.08.2010 18:43
Необходимо сравнить две таблицы и внести изменения LAM Microsoft Office Excel 1 22.01.2009 12:46
Помогите пожалуйста сравнить два столбца ddimma Microsoft Office Excel 4 16.01.2009 09:01
Удалить из строки S1 первую, последнюю, все подстроки совпадающие с S2 ТРОЯН=) Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2008 23:28