Консультация № 185758
05.04.2012, 13:50
64.07 руб.
0 14 3
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Есть два листа new_data и old_data, которые имеют два столбца - ID, Value. Как проделать следующую операцию копирования - взять первый ID из new_data(и соответствующий ему Value), найти соответствующий ID в old_data и скопировать в эту строку Value в old_data из листа new_data и т.д. со всеми Value?

Office 2007

Обсуждение

Неизвестный
05.04.2012, 14:04
общий
это в смысле Excel ? макрос подойдет? столбцы ID как-то отсортированы на двух листах? как я понимаю, нужно просто поменять местами значения Value в соответствующих строках?
у меня Excel 2000, но если макрос, то он и в 2007 должен сработать так же. и как выглядит файл? два листа с наименованиями "new_data" и "old_data"? фиксированное количество строк на листах или все данные идут подряд, а в конце пустые строки? как определить конец данных
Неизвестный
05.04.2012, 14:32
общий
это ответ
Здравствуйте, korsar!
В файле, прикрепленном мною, находится макрос с именем
Код:
CopyNewValueOverOldBySearchByID
скопируйте его в свою книгу Excel и выполните, предварительно сделав резервную копию Вашего файла.
скачать файл CopyNewValueOverOldBySearchByI.xls [24.5 кб]
давно
Специалист
742
345
05.04.2012, 14:33
общий
05.04.2012, 14:35
Макрос подойдёт. Данные не отсортированы. На листе old_data - примерно 6000 строк. На листе new_data - примерно 1500. Т.е. будет всего примерно 1500 совпадений ID для листа old_data, но Value у них разные. Нужно скопировать Value из new_data в old_data.
Количество строк - фиксированное.

Листы выглядят примерно так:
===============
ID _______| Value
===============
DOB_date | Function date
DOB_num | Number
Неизвестный
05.04.2012, 14:35
общий
это ответ
Здравствуйте, korsar!
Если я правильно понял, что в конечном итого нужно для каждого ID old_data получить соответствующий Value из new_data, то см. прикрепленный файл. А если нужно заменить уже имеющийся в old_data столбец значений Value для ID, которые находятся в new_data (а остальные имеющиеся оставить как было), тогда уточните это, а также критично ли, если эти Value, взятые из new_data будут не в столбце Value old_data, а в новом, созданном справа. Потом его можно естественно скопировать поверх Value.
Прикрепленные файлы:
давно
Специалист
742
345
06.04.2012, 07:31
общий
Что-то макрос не работает - ни одной замены не происходит.
давно
Специалист
742
345
06.04.2012, 07:35
общий
Может я не совсем точно объяснил суть задания. Есть данные, лист old_data, некоторые из них изменились, лист new_data. Необходимо скопировать изменённые данные, используя ID в качестве сравнения. Прикладываю мой excel с данными.
Прикрепленные файлы:
c479029cefd01e028e823d7069c484c5.xls
Неизвестный
06.04.2012, 07:42
общий
Для этой операции есть встроенная функция ВПР!
В свое время я несчетное количество раз обучал бухгалтеров пользоваться этой функцией...
Неизвестный
06.04.2012, 07:48
общий
Конкретно для вашего файла можно воспользоваться такой, например, функцией:
=ПРОСМОТР(A2;old_data!A:A;old_data!B:B)
Она ищет искомое значение (из ячейки А2) в столбце А Листа "old_data" и выводит в качестве результата значение из столбца B Листа "old_data" той же строки.
давно
Специалист
742
345
06.04.2012, 08:29
общий
Ну допустим я нашёл совпадение в ID в листах. Как мне теперь это совпадение (причём уже не ID, а Value - другой столбец) скопировать? По моему тут только с помощью макросов можно реализовать...
Неизвестный
06.04.2012, 08:31
общий
Адресаты:
Функция ВПР уже сама копирует. Почитайте документацию по ней.
Неизвестный
06.04.2012, 09:10
общий
06.04.2012, 09:19
Адресаты:
во вложении пример с использованием функции ВПР (VLOOKUP) - очень хорошо выполняет описанное Вами задание
краткое пояснение по функции:
ВПР(1;2;3), для английской версии VLOOKUP(1,2,3), где
1 - это искомое значение (ID из соседней ячейки листа old_data),
2 - это таблица по которой будет идти поиск (поиск всегда идет по левому столбцу таблицы),
3 - номер столбца, из которого будет возвращено значение, как результат выполнения функции ВПР (номера по-порядку, начиная с первого)
Неизвестный
06.04.2012, 09:19
общий
Адресаты:
изменил вложение на Ваш файл
Прикрепленные файлы:
5dd9ee502f44287b6c4cf86b95ed4c9b.xls
Неизвестный
06.04.2012, 10:54
общий
это ответ
Здравствуйте, korsar!

Посмотрев текущие ответы, решил написать свой.

В файле https://rfpro.ru/upload/7884 находится тот файл, на который Вы дали ссылку на мини-форуме. В нем я создал макрос для замены значений между листами. В макросе довольно полно описаны все действия команд.

Если будут вопросы - пишите в мини-форум.


Если бы точно знать, что значения на листе old_data в столбце 1 отсортированы по возрастанию, то время поиска можно значительно уменьшить. У меня сейчас считает около минуты - полностью сканирует значения на листе old_data пока не найдет нужное значение или не дойдет до конца списка.

С уважением.
Неизвестный
06.04.2012, 11:51
общий
Адресаты:

Вот вариант макроса для поиска по не ЧИСЛОВЫМ ID (предыдущий макрос предполагал числовое значение для ID)
этот же на основе Вашего файла, у обновленных строк в столбец "C" вносится слово "UPDATED"
скачать файл 1.xls [682.0 кб]
Форма ответа