Vba excel заменяет символы в строке
Обновлено: 20.11.2024
Функция замены в Excel VBA — это встроенная или предопределенная функция, которую вы можете использовать в своем макросе для замены набора символов в строке другим набором символов. Вы можете заменить символы в заданной строке или заменить символы в ячейке или указанном диапазоне на листе Excel.
Синтаксис
Заменить (выражение, найти, заменить, начать, подсчитать, сравнить)
• Выражение. Выражение представляет собой строку, в которой вы хотите найти символы для замены. Это может быть массив или значение в ячейке вашего листа.
• Найти — символ или набор символов, которые вы хотите найти в выражении (строке) для замены.
• Заменить — символы или набор символов, которые вы хотите заменить в выражении.
• Начало — начальная позиция, с которой должен начаться поиск (в выражении). Этот параметр является необязательным. Начальная позиция по умолчанию — 1. Таким образом, используя этот параметр, вы можете начать поиск с другой позиции, скажем, с 5.
• Count — определите Count (числовое значение), чтобы найти количество вхождений для замены. Этот параметр является необязательным. Если вы не определите счетчик в своей функции замены, VBA найдет и заменит все символы в строке, которые вы хотите заменить.
• Сравнить: у вас есть три варианта на выбор.
1) vbBinaryCompare — выполняет двоичное сравнение. Это опция по умолчанию.
2) vbDataBaseCompare — выполняет сравнение на основе информации из вашей базы данных.
3) vbTextCompare — выполняет текстовое сравнение
Когда вы используете все параметры в функции замены, это будет выглядеть так.
Заменить(cell.Value, "P", "N", 3, 1, vbBinaryCompare)
Заменить(strVal, "a", "ai", 4, 1, vbBinaryCompare)
1) Пример использования функции Replace()
В моем первом примере я покажу вам основное использование функции замены.
У меня есть строковая переменная со значениями, разделенными запятыми. Используя функцию Replace(), я найду в строке символ a и заменю его на ai. Результат будет,
боль, гвоздь, парус
Примечание. Я печатаю результат (используя Debug.Print) в непосредственном окне редактора VBA.
2) Заменить строку, начиная с n-го символа
В приведенном выше примере я использовал только первые три параметра для замены строки. Так как я хотел найти и заменить указанный символ во всей строке.
Однако я хочу проигнорировать несколько символов в строке и начать поиск только из указанного места. Например, теперь я хочу найти и заменить символ a после первой запятой (игнорируя первые символы строки). Теперь я буду использовать четвертый параметр (Start) в функции.
Есть два способа присвоить значение параметру Start в функции.
i) Я могу напрямую присвоить числовое значение (в данном случае 6) сразу после параметра 3 (заменить).
ii) Я могу явно использовать ключевое слово Start with := и присвоить ему значение (6). Если между ними нет других параметров, вы все равно можете присвоить значение. См. третий пример ниже (с использованием Count).
3) Заменить только третий экземпляр с помощью параметра подсчета
В строке есть три разных значения, разделенных двумя запятыми. Теперь я хочу заменить только третий экземпляр символа a новым символом (символами). То есть (используя приведенную выше строку в примере) я хочу игнорировать a in pan и nal и заменить только sal . Это очень просто.
Теперь посмотрите, как я явно использую ключевое слово Count для определения количества вхождений. Я использую ключевое слово, так как четвертый параметр (см. синтаксис) относится к опции Start. Здесь я говорю VBA рассматривать значение в соответствии с его ключевым словом.
4) Замените значения в диапазоне строк на вашем листе
Теперь давайте посмотрим, как мы можем заменить символы в диапазоне значений на нашем листе Excel. У меня есть восемь строк данных в столбце B . У меня также есть кнопка (элемент управления ActiveX) на листе 1.
Я хочу заменить символ N на P во всех строках. Вот мой код внутри события нажатия кнопки.
Результат
Значения в приведенном выше примере жестко заданы. Вы даже можете сделать его немного более динамичным (и интересным), попросив пользователя внести свой вклад. Приведенный выше код будет немного изменен. Я добавляю метод InputBox() в макрос.
Теперь вы можете заменить любой заданный символ символом P на своем рабочем листе (в столбце B).Вы можете определить более широкий диапазон.
5) Использование опции подсчета с функцией замены в диапазоне
Вы можете использовать параметр подсчета с функцией замены для управления строками в диапазоне рабочего листа. Например, у меня есть строки данных во втором столбце (B).
DP0 DN0 DP0
IP0 PAN NAP
Обе строки содержат символ P несколько раз. Однако я хочу изменить первое вхождение (ТОЛЬКО) символа P в строках. Вот мой код.
Результат
D N 0 DN0 DP0
I N 0 PAN NAP
Функция замены в VBA полезна, когда вы хотите манипулировать набором символов в строке с новым набором символов. Это может быть похоже на параметр «Найти и заменить» в Excel. Однако он имеет много других преимуществ и используется специально во время выполнения с использованием макроса. Вы можете указать конкретное место (используя параметр «Пуск») или определенное количество вхождений (используя параметр «Подсчет») для замены.
Возвращает строку, которая представляет собой подстроку строкового выражения, начинающуюся с начальной позиции (по умолчанию 1), в которой указанная подстрока была заменена другой подстрокой указанное количество раз.
Синтаксис
Заменить(выражение, найти, заменить, [ начать, [ счетчик, [ сравнить ]]])
Синтаксис функции замены имеет следующие именованные аргументы:
Часть | Описание |
---|---|
выражение | Обязательный. Строковое выражение, содержащее заменяемую подстроку. |
найти | Обязательно. Ищется подстрока. |
replace | Обязательно. Замещающая подстрока. |
start | Необязательно. Начальная позиция подстроки выражения для поиска и возврата. Если опущено, предполагается 1. |
count | Необязательно. Количество замен подстроки для выполнения. Если опущено, значение по умолчанию равно -1, что означает выполнение всех возможных замен. |
сравнить | Необязательно. Числовое значение, указывающее тип сравнения, используемого при оценке подстрок. Значения см. в разделе «Настройки». |
Настройки
Аргумент сравнить может принимать следующие значения:
Константа | Значение | Описание |
---|---|---|
vbUseCompareOption | -1 | Выполняет сравнение, используя настройку оператора Option Compare. |
vbBinaryCompare | 0 | Выполняет бинарное сравнение. |
vbTextCompare | 1 td> | Выполняет текстовое сравнение. |
vbDatabaseCompare | < td style="text-align: left;">2Только Microsoft Access. Выполняет сравнение на основе информации из вашей базы данных. |
Возвращаемые значения
Replace возвращает следующие значения:
Если | Replace возвращает |
---|---|
выражение имеет нулевую длину | Строка нулевой длины ("") |
выражение имеет значение Null | Ошибка. |
find имеет нулевую длину | Копия выражения. |
replace имеет нулевую длину | Копия выражения со всеми вхождениями find< /em> удален. |
начало > Len(выражение)< /td> | Строка нулевой длины. Замена строки начинается с позиции, указанной start. |
count равно 0 | Копия выражения. |
Примечания
Возвращаемое значение функции замены – это строка с произведенными заменами, которая начинается с позиции, заданной параметром start, и заканчивается в конце строки выражения. Это не копия исходной строки от начала до конца.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы об Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.
Функция VBA Replace возвращает строку с произведенными заменами. При использовании необязательных параметров новая строка может начинаться в позиции, указанной параметром start, и заканчиваться в конце исходной строки.
Заменить VBA Подставить подстроку
Функция замены VBA может использоваться для замены любой найденной подстроки во всех найденных частях.
VBA заменить начальную позицию
Функция замены VBA может использоваться для замены любой найденной подстроки во всех найденных частях. Если мы назначим начальную позицию, результатом будет часть исходной строки после этой начальной точки.
VBA заменяет только несколько вхождений
Функция замены VBA может использоваться для замены любой найденной подстроки во всех найденных частях. При желании мы можем решить, сколько вхождений следует заменить.
VBA заменить чувствительность к регистру
Функция замены VBA по умолчанию чувствительна к регистру. Вы можете изменить это поведение, сделав его нечувствительным к регистру, используя необязательный параметр (vbTextCompare). В этом случае необходимо также определить начальную позицию поиска.
Вы также можете выполнить замену без учета регистра, добавив Option Compare Text в начало модуля:
VBA заменить двойные кавычки
Функция замены VBA может заменить символ двойных кавычек, используемый для разделения начала и конца строки.
Функция VBA Chr может возвращать символ из его номера в наборе символов.
Двойные кавычки можно использовать внутри функции замены VBA с помощью «»» или функции VBA Chr(34).
Программирование VBA стало проще
Прекратите искать код VBA в Интернете. Узнайте больше об AutoMacro — конструкторе кода VBA, который позволяет новичкам создавать процедуры с нуля с минимальными знаниями в области кодирования и множеством функций, позволяющих сэкономить время для всех пользователей!
VBA заменить разрывную линию в ячейке
Функция замены VBA может найти специальный символ разрыва строки в ячейке и удалить его или заменить символом пробела. Специальный символ строки разрыва можно ввести в ячейку с помощью сочетания клавиш Alt+Enter и использовать в коде VBA с номером набора символов с помощью функции VBA Chr(10).
У меня есть 1 столбец, который должен содержать сумму, но он имеет неправильное форматирование и обрабатывается как текст.
Поэтому необходимо заменить точку на ничто, а затем запятую на точку. У меня есть код:
Но это ничего не делает. никаких ошибок, просто загрузка и дальше ничего не происходит. Не могли бы вы посоветовать мне, что я сделал не так или что я могу сделать лучше, пожалуйста?
Когда и как были вызваны эти сабвуферы? Не проще ли просто изменить тип данных столбца на нужный формат?
Код кажется правильным, однако, возможно, стоит явно объявить рабочий лист, например Worksheets("Sheet1").Columns("P").
6 ответов 6
Вы можете прокрутить столбец и использовать функцию замены.
Примечание. Я не проверял, но должно работать. Также: измените SheetX на любое подходящее кодовое имя листа и при необходимости измените ссылку на столбец (столбец 1 в этом примере)
Попробуйте использовать это. Код сначала изменяет ваш язык, чтобы он соответствовал десятичным разделителям в вашем столбце. Что затем заставляет Excel распознавать его как число, хранящееся в виде текста. Затем он использует текст в столбцах для преобразования диапазона в числа перед сбросом десятичных разделителей (и тысяч) обратно к тому, чем они должны быть, оставляя ваши данные теперь сохраненными как числа
Простым решением, не требующим вмешательства макроса, является выбор столбца с текстовыми значениями, переход на вкладку «Данные»==> «Текст в столбцы» ==>Далее==>Далее==>выбрать общий формат данных столбца.
Вы также можете указать Excel, является ли запятая десятичным разделителем или разделителем тысяч (в дополнительных параметрах).
На самом деле это работает, если он не распознает автоматически, вы всегда можете использовать расширенные настройки текста.
В моем тесте не сработало, но я не пытался использовать расширенные настройки импорта текста, которые, как я вижу, вы уже добавили
Согласно моим региональным настройкам, точка используется в качестве десятичного разделителя, а запятая — в качестве разделителя тысяч. Сказав это, следующий код работает для меня и дает ожидаемый результат.
Чтобы протестировать код, я скопировал числа с веб-страницы и вставил на лист, они выглядят так, как показано ниже.
Читайте также: