Страницы: 1
RSS
Макрос/функция автозамены значений при совпадении в словаре
 
Доброго времени суток. Вторые сутки пытаюсь нагуглить подобный функционал, но пока безуспешно. Вдруг у кого-то есть что-то подобное.

Суть задачи, есть 2 страницы, одна с исходными данными, вторая со словариком. Макрос должен найти на странице точные совпадения со словами из словаря (столбец А) и в случае нахождения совпадения заменить найденное слово на соответствующее (столбец B). В процессе "словарь" будет расширяться. Будет использоваться, как кириллица, так и латиница, если это конечно важно )))

Заранее благодарю всех, кто не прошел мимо и помог в реализации задуманного.
 
Доброе время суток
Цитата
Alez написал:
и помог в реализации задуманного
Можно поинтересоваться почему в этой фразе написано именно помог, а не реализовал задуманное? Насколлько я понимаю, вы сами пока ещё макросы не пишите?
 
Цитата
Андрей VG написал:
Можно поинтересоваться, почему в этой фразе написано именно помог, а не реализовал задуманное?
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Реализовал как смог, удачи.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Alez написал:
Вдруг у кого-то есть что-то подобное
есть, плохо гуглили: Массовая замена слов
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вариант:
Скрытый текст
 
Андрей VG, Вы правы. Я гуманитарий до мозга костей, код дается очень тяжко. Если с формулами еще хоть как-то могу разобраться на основе готовых  решений в сети, то с VBA вообще не ладится (((

Nordheim, aequit, спасибо большое. Вечером протестирую и отпишусь
 
Nordheim, если честно, так и не понял, как он работает :oops:

aequit, супер, то, что надо. Вот только хотелось бы, чтобы без кнопки все работало, на полном автомате. Если в рамках одной страницы полную автоматизацию реализовать нельзя, то результаты с корректировками можно вынести на отдельную страницу, это не принципиально.
 
Цитата
Alez написал:
Если в рамках одной страницы полную автоматизацию реализовать нельзя
Можно. Помещаете код в модуль листа и после каждого изменения значения в одной из ячеек столбца "А" запускается макрос.
Проверяйте:
Скрытый текст
 
Цитата
Alez написал:
Nordheim , если честно, так и не понял, как он работает
Там же закладка добавлена, на ней кнопка, жмете и вуаля.
"Все гениальное просто, а все простое гениально!!!"
 
aequit, супер! Спасибо! То, что надо !!!

Последний вопрос. Сейчас немного модернизировал свою таблицу, никак не пойму, как изменить столбец вывода ((( В данный момент данные должны браться из столбца В и с корректировками отображаться в столбце С.

Благодарю
 
Цитата
Alez написал:
как изменить столбец вывода
Во вложении.
Я бы советовал все-таки присмотреться к решению от Nordheim, так как при очень больших объёмах словаря оно может быть эффективнее по быстродействию.
 
aequit, я так понимаю, что меня интересует строчка
Код
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
Но почему-то при изменении буквы колонки перестает работать (((
Изменено: Alez - 24.02.2020 21:12:18
 
Alez, Вы вариант из поста #12 смотрели?
Задача
Цитата
Alez написал:
В данный момент данные должны браться из столбца В и с корректировками отображаться в столбце С.
выполняется? Так что-же Вам нужно?
Цитата
Alez написал:
меня интересует строчка
Эта строка проверяет, было ли изменение в диапазоне А:А, если нет, то следует выход из процедуры. Если да, то следует переход к следующему оператору, в котором происходит запуск процедуры Zamena, а уже в ней заданы необходимые столбцы.
 
aequit, вроде бы понял. Спасибо за разъяснение. Попробую самостоятельно разобраться. Надеюсь получится )))
 
Цитата
Alez написал:
Надеюсь получится )))
Не получится - тогда выкладывайте пример, максимально совпадающий со структурой рабочего проекта.
Сразу нужно было-бы так сделать...
Изменено: aequit - 25.02.2020 21:08:19
 
aequit, в том-то и дело, что структуры финальной нет ((( Пока только формирую файлик, поэтому меняю постоянно туда-сюда для оптимизации своей работы )))
 
aequit, чет сравнивал я два кода и так и не разобрался ((( В моем обновленном варианте появился столбец, где формулой делается первая буква заглавной. Прикрепляю мой обновленный пример и на всякий случай код, как я пытался модифицировать.
Скрытый текст
Буду признателен, если укажите, где у меня ошибка, чтобы самостоятельно мог менять столбцы и не надоедать своими просьбами подправить :oops:

Благодарю
Изменено: Alez - 26.02.2020 01:31:15
 
Цитата
Alez написал:
В моем обновленном варианте появился столбец, где формулой делается первая буква заглавной.
Не нужно никаких дополнительных столбцов, если, конечно, перед Вами не стоит цель: как можно больше столбцов для солидности  :D
Достаточно одну строчку в код добавить:
Код
s = UCase(Left(s, 1)) & Mid(s, 2)

Весь код:
Скрытый текст
Изменено: aequit - 26.02.2020 07:18:59
 
А можно ли сделать чтобы меняло сразу в тот же столбец где и был изначально текст написан?
 
aequit, супер. спасибо. Одним головняком меньше. Но все же, какие параметры менять, чтобы менять столбец вывода ? Мне в следующий раз будет уже не удобно Вас просить поменять столбец в случае чего (((
 
Цитата
Alez написал:
Но все же, какие параметры менять, чтобы менять столбец вывода ?
Задайте в поиске "свойство Cells рабочего листа"
Первый аргумент - строка, второй в скобках, после запятой столбец.
В коде w.Cells(l, 3) = s означает: присвоить свойству Cells рабочего листа "w" (где l - переменная с номером строки, а 3 - номер столбца) значение, содержащееся в переменной "s". Это элементарные вопросы, даже думать особо не надо, в любой книге это описано.
Цитата
Grassoff написал:
А можно ли сделать чтобы меняло сразу в тот же столбец где и был изначально текст написан?
В коде из поста #6 меняете номер столбца с 2 на 1 в 13 строке кода.
 
aequit, благодарю за помощь  ;)
 
Цитата
aequit написал: Задайте в поиске "свойство Cells рабочего листа"Первый аргумент...
Приветствую ,а как поменять столбец ввода значения а не вывода?
 
Макс, посмотрите код от aequit ниже и почитайте в нём комментарии зелёным цветом

Код
Sub Zamena()
    'aequit 26.02.2020
    Dim k&, l&, sl, s$
    
    Dim w As Worksheet
    Set w = Worksheets("Лист1")
    sl = Range("Словарь")
    For l = 2 To w.Cells(Rows.Count, 2).End(xlUp).Row
        s = w.Cells(l, "B") 'берём данные из столбца В
        For k = 1 To UBound(sl)
            If InStr(1, w.Cells(l, 2), sl(k, 1)) > 0 Then
                s = Replace(s, sl(k, 1), sl(k, 2))
            End If
        Next k
        s = UCase(Left(s, 1)) & Mid(s, 2)
        w.Cells(l, "C") = s 'результат записываем в столбец С
    Next l
End Sub
Изменено: New - 19.01.2021 00:50:29
 
Цитата
aequit написал:
В коде из поста  #6  меняете номер столбца с 2 на 1 в 13 строке кода.
А я так понимаю в автоматическом варианте без кнопки такое не сработает ,у меня крашится прога.
Страницы: 1
Наверх