Нужна помощь в корректировке макроса под мою задачу.
Задача:
В книге есть листы "Создание" и "Бренд и ТМ".
В листе "Создание" в выделенных ячейках нужно заменить строго определенные слова на соответствующие их из листа "Бренд и ТМ".
Например:
в листе "Создание" в ячейке написан текст "Неттоп 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" и т.д.
Вот этот код из статьи:
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