Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
18.04.2024, 20:35:02

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Макрос для замены строго определенного слова в тексте диапазона ячеек
Страниц: [1]   Вниз
Печать
Автор Тема: Макрос для замены строго определенного слова в тексте диапазона ячеек  (Прочитано 5311 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tatijana Skoda
Гость
« : 08.11.2018, 17:32:30 »

Нужна помощь в корректировке макроса под мою задачу.
Задача:
В книге есть листы "Создание" и "Бренд и ТМ".
В листе "Создание" в выделенных ячейках нужно заменить строго определенные слова на соответствующие их из листа "Бренд и ТМ".
Например:
в листе "Создание" в ячейке написан текст "Неттоп woseba pro VivoMini UN65U-M005M"
На листе "Бренд и ТМ" в столбце 1 искомое слово "woseba pro" (при поиске регистр не учитывается),  в столбце 3 слово для замены "Woseba Pro".

Проблематика:
1)Если найден вариант совпадения символов нужно остановить дальнейший просмотр справочника "Бренд и ТМ", так как в далее в ячейках может быть в первом столбце "Woseba Pro" в третьем "Woseba Profi"в результате замены получается "woseba pro" = "Woseba Profi", а не "Woseba Pro"
2)в столбце 1 может быть несколько "Woseba Pro":
"Woseba Pro" = "Woseba Profi"
"Woseba Pro" = "Woseba"
"Woseba Pro" = "Woseba&CO"
и т.д.
Замкнутый круг какой-то Грустный
Есть возможность реализовать такое?
Очень рассчитываю на помощь   Обеспокоенный

Здесь нашла макрос для массовой замены слов в тексте ячейки: https://www.excel-vba.ru/chto-umeet-excel/massovaya-zamena-slov/
замена выполняется только в том случае если нет повторений, если повторы есть то выдает:
1) "woseba pro" = "Woseba Profi", вместо "woseba pro" = "Woseba Pro"
2) "Woseba Pro" = "Woseba Profi" "Woseba" "Woseba&CO" и т.д.

Вот этот код из статьи:

Код: (vb)
 Option Explicit
Sub Replace_Mass()
    Dim s As String
    Dim lCol As Long
    Dim avArr, lr As Long
    Dim lLastR As Long
    Dim lToFindCol As Long, lToReplaceCol As Long, lLookAt As Long
 
    'запрашиваем направление перевода - с русского на англ. или наоборот
    lCol = Val(InputBox("Укажите направление перевода:" & vbNewLine & _
                    "   1 - ru-en" & vbNewLine & _
                    "   2 - en-ru", "Запрос", 1))
    If lCol = 0 Then Exit Sub
    'запрашиваем по части ячейки искать или по всему тексту
    'по умолчанию - по части
    lLookAt = Val(InputBox("Искать соответствие по части ячейки или по всему тексту:" & vbNewLine & _
                    "   1 - по всему тексту" & vbNewLine & _
                    "   2 - по части ячейки", "Запрос", 2))
    If lLookAt = 0 Then Exit Sub
 
    Select Case lCol
    Case 1
        lToFindCol = 1
        lToReplaceCol = 2
    Case 2
        lToFindCol = 2
        lToReplaceCol = 1
    End Select
 
    Application.ScreenUpdating = 0
    'Получаем с листа Соответствия значения, которые надо заменить в выделенном диапазоне
    With ThisWorkbook.Sheets("Соответствия")
        lLastR = .Cells(.Rows.Count, 1).End(xlUp).Row
        avArr = .Cells(1, 1).Resize(lLastR, 2)
    End With
    'заменяем
    For lr = 1 To UBound(avArr, 1)
        s = avArr(lr, lToFindCol)
        If Len(s) Then 'если значение для замены не пустое
            Selection.Replace s, avArr(lr, lToReplaceCol), lLookAt
        End If
    Next lr
    Application.ScreenUpdating = 1
End Sub


« Последнее редактирование: 09.11.2018, 09:14:56 от Дмитрий Щербаков(The_Prist) » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #1 : 08.11.2018, 18:02:02 »

Если честно то так до конца и не понял где повторения надо исключить из замен. То ли из справочника, то ли в ячейках для замены(типа заменили только одно слово на листе и успокоились).
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Tatijana Skoda
Гость
« Ответ #2 : 08.11.2018, 22:41:55 »

Из справочника с брендами ничего исключать нельзя.
Во первых нужно чтобы макрос искал полностью слово (если бренд состоит из нескольких слов, то брал словосочетание) и менял на значение из третьего столбца
Например:
есть бренды Amigo, Ami&Co, GO
Нужно сделать авто замену amigo на Amigo, данный макрос выдает AmiGO
Вот еще вариант, adata нужно заменить на ADATA
есть бренды ADA (в 3ем столбце ADditional Accuracy) , ADATA (в 3ем столбце ADATA), макрос выдает ADditional AccuracyTA
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #3 : 09.11.2018, 09:16:00 »

Все равно не понял. Даже еще больше, чем раньше.
Чтобы в расчет брался регистр, надо в строке:
Код: (vb)
Selection.Replace s, avArr(lr, lToReplaceCol), lLookAt

добавить:
Код: (vb)
Selection.Replace s, avArr(lr, lToReplaceCol), lLookAt, MatchCase:=True

А чтобы заменялось только полное соответствие - смотрите статью внимательнее, там все это расписано, в том числе и про порядок расположения слов в списке соответствий(по длине строки, например).
Это единственное, что смог понятно выудить из пояснений, к сожалению....  Обеспокоенный

Вы бы пример файла приложили бы, показав там наглядно что не так...
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Tatijana Skoda
Гость
« Ответ #4 : 09.11.2018, 09:34:30 »

может быть с файлом будет понятнее?
вложила файл
Записан
Tatijana Skoda
Гость
« Ответ #5 : 13.11.2018, 12:49:29 »

 Плачущий
Издесь совсем нет того кто бы смог мне помочь?
Записан
RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #6 : 13.11.2018, 21:20:59 »

в том числе и про порядок расположения слов в списке соответствий
унитаз китайский золотой
Не нашли?
унитаз китайский
Не нашли?
унитаз
Что, и этого нет?
Записан

А что ты умеешь?
Учиться...
Tatijana Skoda
Гость
« Ответ #7 : 14.11.2018, 22:29:51 »

Спасибо за помощь.
Простите, что побеспокоила.
Всем откликнувшимся желаю добра.
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru