Новости:

Подпишитесь на рассылку новых сообщений форума через службу рассылок: Subscribe.ru

Главное меню

Массовое "найти и заменить"

Автор kaffs, 08.07.2011, 16:16

« назад - далее »

kaffs

Всем привет.

Ситуация такая: работаю с прайс-листами excel, где приходится каждый день переводить с украинского на русский наименования товаров, а так же заменять буквенный артикул на цифровой (букву заменять соответствующе-присвоенным числом).

Приходится каждый раз через поиск-замену по одной менять данные в 5-ти тысячах строк.

На одном из форумов спросил про возможность ускорить этот процесс. Т.е. один раз составить таблицу данных, в первом столбце которой будут данные, которые нужно найти, а во втором столбце данные, на которые нужно заменить найденное, и запустить скрипт или функцию, чтоб эксель отрабатывал замену отталкиваясь от этой таблички.

Мне подкинули файл, который я прикрепляю к этому посту. Все работает, но там одно маленькое "но" - в табличке замены данных начиная со второй строки заменяются на данные, которые находятся на напротив, а двумя строчками ниже.
Для примера - нужно все цифры заменить соответствующими словами. "1, 2, 3, 4, 5" заменяются на "один, три, пять, семь", вместо один, два, три, четыре, пять.

Подскажите, кто знает, как поправить эту ошибку?

Вот код макроса:

Sub ups()
For Each cell In Sheets("Лист1").Range("a1:a9")
a = cell.Row
b = cell.Count + 1
    Selection.Replace What:=cell.Value, Replacement:=cell(cell.Row, cell.Count + 1).Value, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Next
End Sub


Из "cell.Count + 1" пробовал убрать "+ 1" - ничего не вышло.

nilem

Если ничего принципиально не менять, то вот так попробуйте:
Sub ups()
Dim cll As Range
For Each cll In Sheets("Лист1").Range("a1:a6")
    Selection.Replace What:=cll.Value, Replacement:=cll.Next.Value, LookAt:=xlPart
Next
End Sub

kaffs

#2
Большущее спасибо! работает как надо теперь!!! )))

alone7

добрый день! А возможно подправить этот скрипт для автозамены следующим образом:
поиск нескольких ячеек, содержащих текст "ааааа", "бббб" и т.д.;
замена на ячейки с таким же текстом, но с фоновой заливкой каждого текста своим цветом , т.к. каждому тексту - отдельный цвет ячейки.


vikttur

alone7, вопрос не по теме. Создайте свою.

Димычч

Предлагаю добавить универсальности этой полезной функции: сделать возможным выполнить поиск/замену
1. на всём текущем листе (без предварительного выделения диапазона).
2. во всей книге.
Подскажите, как будет выглядеть этот макрос для первой и второй задачи? Сначала была мысль выводить окошко с выбором диапазона поиска, но в этом тоже есть свои минусы. Иногда удобнее использовать отдельные макросы. 

alone7

вам, конечно, виднее, насколько вопрос не по теме, но почему-то создавая новую тему я скопирую почти всё, что написано в этой теме)

vikttur

Вы хотите заливать цветом. о чем в заглавной теме - ни слова.
Вы хотите ИЗМЕНИТЬ показанный код под свои нужды.
Не нужно копировать все. В сообщении указать проблему и прикрепить файл-пример.

vkontakte

Цитата: nilem от 08.07.2011, 17:33
Если ничего принципиально не менять, то вот так попробуйте:
Sub ups()
Dim cll As Range
For Each cll In Sheets("Лист1").Range("a1:a6")
    Selection.Replace What:=cll.Value, Replacement:=cll.Next.Value, LookAt:=xlPart
Next
End Sub

У меня задача следующая: нужно заменить ID категорий на Название категорий,
соответственно на Лист 1 в столбец А я загружаю список ID, в столбец B - Названия категорий
перехожу на Лист 2, в столбец А вставляю ID категорий, выделяю диапазон, нажимаю на кнопку, заменяет,
но во многих категориях добавляет цифры к Названию категории. Как исправить?

boa

В вашем случае измените параметр

LookAt:=xlWhole
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

vkontakte

#10
Огонь, всё работает! Благодарю!