Excel макрос замена символов

Замена подстроки, содержащейся в текстовых значениях ячеек указанного диапазона, другой подстрокой с помощью метода Range.Replace из кода VBA Excel.

Range.Replace – это метод, который находит по шаблону подстроку в содержимом ячеек указанного диапазона, заменяет ее на другую подстроку и возвращает значение типа Boolean.

Метод имеет некоторые особенности, которые заключаются в следующем:

  • при присвоении булева значения, возвращаемого методом Range.Replace, переменной, необходимо список параметров (аргументов) метода заключать в круглые скобки;
  • если метод используется без присвоения возвращаемого значения переменной, параметры должны быть указаны без заключения их в круглые скобки.

Синтаксис и параметры метода

Синтаксис

Синтаксис при замене подстроки и присвоении переменной возвращаемого значения типа Boolean:

variable = expression.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])

Синтаксис при замене подстроки без присвоения переменной возвращаемого значения:

expression.Replace What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat]

  • variable – переменная (тип данных — Boolean);
  • expression – выражение, возвращающее объект Range.

Параметры

Параметр Описание
What Искомая подстрока или шаблон*, по которому ищется подстрока в диапазоне ячеек. Обязательный параметр.
Replacement Подстрока, заменяющая искомую подстроку. Обязательный параметр.
LookAt Указывает правило поиска по полному или частичному вхождению искомой подстроки в текст ячейки:
1 (xlWhole) – поиск полного вхождения искомого текста;
2 (xlPart) – поиск частичного вхождения искомого текста.
Необязательный параметр.
SearchOrder Задает построчный или постолбцовый поиск:
1 (xlByRows) – построчный поиск;
2 (xlByColumns) – постолбцовый поиск.
Необязательный параметр.
MatchCase Поиск с учетом или без учета регистра:
0 (False) – поиск без учета регистра;
1 (True) – поиск с учетом регистра.
Необязательный параметр.
MatchByte Способы сравнения двухбайтовых символов:
0 (False) – двухбайтовые символы сопоставляются с однобайтовыми эквивалентами;
1 (True) – двухбайтовые символы сопоставляются только с двухбайтовым символами.
Необязательный параметр.
SearchFormat Формат поиска. Необязательный параметр.
ReplaceFormat Формат замены. Необязательный параметр.

* Смотрите знаки подстановки для шаблонов, которые можно использовать в параметре What.

Работа метода в VBA Excel

Исходная таблица для всех примеров:

Пример 1

Примеры записи строк кода с методом Range.Replace и поиском по частичному совпадению подстроки с содержимым ячейки:

Sub Primer1()

‘Запись 1:

Range(«A1:C6»).Replace «Лиса», «Рысь», 2

‘Запись 2:

Range(«A1:C6»).Replace What:=«Лиса», Replacement:=«Рысь», LookAt:=2

‘Запись 3:

If Range(«A1:C6»).Replace(«Лиса», «Рысь», 2) Then

End If

‘Запись 4:

Dim a

a = Range(«A1:C6»).Replace(«Лиса», «Рысь», 2)

End Sub

Результат выполнения любого из вариантов кода примера 1:

Пример 2

Поиск по шаблону с использованием знаков подстановки и по полному совпадению подстроки с содержимым ячейки:

Sub Primer2()

Range(«A1:C6»).Replace «Ли??», «Рысь», 1

End Sub

Обратите внимание, что слово «Лиса» заменено словом «Рысь» не во всех ячейках. Это произошло из-за того, что мы использовали параметр LookAt:=1 – поиск полного вхождения искомого текста в содержимое ячейки.

Dim numberColumn, phraseColumn, titleColumn, nFirstRow, nLastRow As Integer
Dim currentPosition As Long
Dim currentRow As Integer
Sub DoEverything()
    Call DoInit
    'x = Application.CountA(Rows("35:35"))
    'x = Application.WorksheetFunction.CountA(ActiveWorksheet.Columns("A"))
    Worksheets(1).Copy After:=Worksheets(Worksheets.Count)
    Set currentWorksheet = Worksheets(Worksheets.Count)
    currentWorksheet.Activate
    currentWorksheet.Name = "Технические данные"
    currentColumns = Application.WorksheetFunction.CountA(currentWorksheet.Rows("1"))
    currentColumns = currentColumns + 1
    currentWorksheet.Cells(1, currentColumns - 1).Copy currentWorksheet.Cells(1, currentColumns)
    currentWorksheet.Cells(1, currentColumns).Value = "Список фраз"
    
    'fusion
    outText = ""
    completedRow = nFirstRow
    counter = CStr(currentWorksheet.Cells(completedRow, numberColumn))
    For currentRow = completedRow To nLastRow
        If CStr(currentWorksheet.Cells(currentRow, numberColumn)) = CStr(counter) Then
            If outText = "" Then
                outText = currentWorksheet.Cells(currentRow, phraseColumn).Value
            Else
                outText = outText & ", " & currentWorksheet.Cells(currentRow, phraseColumn).Value
            End If
        Else
            'counter = counter + 1
            counter = CStr(currentWorksheet.Cells(currentRow, numberColumn))
            currentWorksheet.Cells(completedRow, currentColumns).Value = outText
            completedRow = currentRow
            outText = currentWorksheet.Cells(currentRow, phraseColumn).Value
        End If
        
        If currentRow = nLastRow Then
            If outText = "" Then
                outText = currentWorksheet.Cells(currentRow, phraseColumn).Value
            Else
                outText = outText & ", " & currentWorksheet.Cells(currentRow, phraseColumn).Value
            End If
            currentWorksheet.Cells(completedRow, currentColumns).Value = outText
        End If
    Next currentRow
    
    'removal
    completedRow = nFirstRow
    counter = CStr(currentWorksheet.Cells(completedRow, numberColumn))
    For currentRow = completedRow To nLastRow
        If CStr(currentWorksheet.Cells(currentRow, numberColumn)) <> CStr(counter) Then
            counter = CStr(currentWorksheet.Cells(currentRow, numberColumn))
            completedRow = completedRow + 1
            nLastRow = nLastRow - (currentRow - 1 - completedRow)
            If currentRow > completedRow Then
                currentWorksheet.Range(Rows(completedRow).EntireRow, Rows(currentRow - 1).EntireRow).Delete
            End If
'            For j = currentRow - 1 To completedRow Step -1
'                currentWorksheet.Rows(j).EntireRow.Delete
'            Next j
            currentRow = completedRow
        End If
    Next currentRow
    
    'New column Заголовок ТЗ
    nLastRow = currentWorksheet.Cells(Rows.Count, numberColumn).End(xlUp).Row
    currentWorksheet.Columns(1).Insert Shift:=xlToLeft
    currentWorksheet.Cells(1, 2).Copy currentWorksheet.Cells(1, 1)
    currentWorksheet.Cells(1, 1).Value = "Заголовок ТЗ"
    currentWorksheet.Columns(1).ColumnWidth = 62
    currentWorksheet.Range(currentWorksheet.Cells(1, 1), currentWorksheet.Cells(nLastRow, 1)).Interior.Color = 11910834
    currentColumns = currentColumns + 1
    titleColumn = 3
    For currentColumn = 3 To currentColumns
        If currentWorksheet.Cells(1, currentColumn).Value = "Название" Then
            titleColumn = currentColumn
        End If
    Next currentColumn

    For currentRow = nFirstRow To nLastRow
        'currentWorksheet.Cells(currentRow, 2).Copy currentWorksheet.Cells(currentRow, 1)
        currentWorksheet.Cells(currentRow, 1).Value = "ТЗ №" & CStr(currentWorksheet.Cells(currentRow, 2).Value) & " для страницы - " & CStr(currentWorksheet.Cells(currentRow, titleColumn).Value)
    Next currentRow
    
End Sub
Sub DoInit()
    numberColumn = 1
    phraseColumn = 2
    titleColumn = 3
    nFirstRow = 2
    nLastRow = ActiveSheet.Cells(Rows.Count, numberColumn).End(xlUp).Row
End Sub

    Sub macrzamena()
    'Замена символов
    Columns("A:A").Select
    Selection.Replace What:=",", Replacement:="ггггг", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:=":", Replacement:="ааа", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="~?", Replacement:="ааа", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Cells(1).Select
    ExecuteExcel4Macro ("SOUND.PLAY(,""C:WindowsMediattt.wav"")")
    'Замена символов
    End Sub

0 / 0 / 0

Регистрация: 20.09.2014

Сообщений: 7

1

Заменить один символ на другой на всех листах рабочей книги

20.09.2014, 22:45. Показов 20603. Ответов 20


Студворк — интернет-сервис помощи студентам

Доброго времени суток!
Помогите, кто в курсе.

В excel нужен макрос замены одного символа на другой (к примеру замена буквы «ё» на букву «е» на всех листах) , устал пользоваться комбинацией Ctrl+H на каждом листе, хочется кнопочкой)
Искал ответ в похожих темах, но ни один вариант не подошел.



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

21.09.2014, 01:21

2

Зачем же на каждом? Меняйте сразу во всей книге — поищите там в подменюшках…



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

21.09.2014, 11:56

3

Hugo121, «во всей книге» — это не для каждой версии.
Maiki, у Вас какая версия Excel?



0



1 / 1 / 1

Регистрация: 02.05.2014

Сообщений: 20

22.09.2014, 00:02

4

В 2010)

Миниатюры

Заменить один символ на другой на всех листах рабочей книги
 



0



Антихакер32

Заблокирован

22.09.2014, 01:12

5

Лучший ответ Сообщение было отмечено Maiki как решение

Решение

Без разницы какая версия, у меня код состоит из кода..
а не из каких-то чудесных свойств разных версий

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
 
Sub Start()
    Dim sh, s$, j$()
    On Error GoTo errr
    s = InputBox("Введите что, на что заменять, например е-ё", , "е-ё")
    j = Split(s, "-")
    
    For Each sh In Sheets
        sh.Cells.Replace Trim$(j(0)), Trim$(j(1))
    Next
errr:
End Sub

Вложения

Тип файла: xls Лист Microsoft Excel.xls (29.0 Кб, 51 просмотров)



1



Антихакер32

Заблокирован

22.09.2014, 01:18

6

Кликните здесь для просмотра всего текста

ps: версия Excel 2003



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 01:58

7

Цитата
Сообщение от Антихакер32
Посмотреть сообщение

Без разницы какая версия, у меня код состоит из кода..

реально ржач.

Цитата
Сообщение от Антихакер32
Посмотреть сообщение

j = Split(s, «-«)

функция Split была в VBA не всегда.



0



Антихакер32

Заблокирован

22.09.2014, 02:15

8

Цитата
Сообщение от ikki
Посмотреть сообщение

функция Split была в VBA не всегда.

да причем здесь ваши догадки ?.. это базовая функция Split и Join
у меня она была всегда, там важно даже не это,

а результат замены..
и работа этой части кода..

Visual Basic
1
2
3
    For Each sh In Sheets
        sh.Cells.Replace "ё", "е"
    Next

который заменяет символы во всех страницах книги..

ТС, так и подумает, да это не заработает можно не проверять, а я, зря старался



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 02:26

9

а причём тут «догадки»?
функции Split нет в Excel 95
это совершенно точно

и, возможно, в 97-м.

ну и ещё на пару моментов Вы наплевали.
1) в файле Excel бывают не только рабочие листы
2)

Цитата
Сообщение от F1

Remarks
The settings for LookAt, SearchOrder, MatchCase, and MatchByte are saved each time you use this method. If you don’t specify values for these arguments the next time you call the method, the saved values are used. Setting these arguments changes the settings in the Find dialog box, and changing the settings in the Find dialog box changes the saved values that are used if you omit the arguments. To avoid problems, set these arguments explicitly each time you use this method.

поэтому:

Цитата
Сообщение от Антихакер32
Посмотреть сообщение

это не заработает можно не проверять

нет-нет, ничего подобного!
просто это будет работать иногда не для всех листов и иногда срабатывать не так, как ожидал того пользователь.

Добавлено через 2 минуты
мне кажется, последнее предложение требует такого смайлика:
хотя тема, в целом, забавная.



0



Антихакер32

Заблокирован

22.09.2014, 02:28

10

Да параметры: LookAt, SearchOrder, MatchCase надо было проставить
но по умолчанию они там уже должны быть, какие надо, я просто укоротил код
чтоб не грузить ТС-а, неоправданной сложностью и разгаворами о несовместимости версий



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 02:29

11

а это?

Цитата
Сообщение от ikki
Посмотреть сообщение

в файле Excel бывают не только рабочие листы



0



Антихакер32

Заблокирован

22.09.2014, 02:35

12

Будем надеятся, ТС нас рассудет, будут ли у его книги и рабочие и нерабочие листы
на которых он устал расставлять точки над Ё

Добавлено через 1 минуту
хотя вы могли бы предложить и свой безкомпромиссный вариант, в таком случае



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 02:51

13

мог бы.
но я свой вопрос автору темы задал.

Цитата
Сообщение от ikki
Посмотреть сообщение

Maiki, у Вас какая версия Excel?

ответа пока нет.
а в случае, если это Excel 2007+, никакого макроса вообще не надо.



0



Антихакер32

Заблокирован

22.09.2014, 02:58

14

Да уж… жаль, и прослетить за ним трудно, у него всего один вопрос был на форуме
хотя тут один из пользователей чтото упомянул в 4-м посте может он уже ответил заместо Maiki, остается считать ответом исключительно мой пост



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 03:09

15

пост #2 — тоже вполне себе ответ.



0



Антихакер32

Заблокирован

22.09.2014, 03:13

16

Кликните здесь для просмотра всего текста

Цитата
Сообщение от Hugo121
Посмотреть сообщение

поищите там в подменюшках…

Ну да, лучший ответ, поучитесь как надо отвечать ))



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 03:30

17

умение искать ответы самостоятельно — самое главное.
хотя научить этому бывает непросто.

Добавлено через 1 минуту
начать можно и с «поиска в подменюшках»



0



Антихакер32

Заблокирован

22.09.2014, 03:34

18

Ну вот давайте, расскажите об несовместимостях версий,
выложите разные варианты интерпритации кода..
и объясните пользователю, что не так в 95-м 97, 2003, 2007 и тд версиях
чего Вам стоит, я и сам потом Вам спасибку поставлю



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 03:38

19

неее, не надо меня «подначивать».
я тут со скуки флудю сегодня, да и то — между делом.
не буду я писать код в этой теме.
он давным-давно написан и есть во многих надстройках, в т.ч. бесплатных.
да и в виде кода — завались примеров.
это, конечно, для тех, кого, в гугле не забанили.
а с 2007-й версии — это штатная возможность программы.

зачем писать ненужное?



0



0 / 0 / 0

Регистрация: 20.09.2014

Сообщений: 7

22.09.2014, 13:08

 [ТС]

20

Отличный код, спасибо антихакер, на 2010 работает замечательно, а как его поправить, чтобы окошка не выскакивало? Мне необходимо, чтобы по нажатию на кнопку автоматически менялся определенный символ на другой.



0



Содержание

  1. Excel макрос замена символа
  2. Excel функция REPLACE (VBA)
  3. Описание
  4. Синтаксис
  5. Аргументы или параметры
  6. Возвращаемое значение
  7. Применение
  8. Тип функции
  9. Пример (как функция VBA)
  10. Функция Replace
  11. Синтаксис
  12. Параметры
  13. Возвращаемые значения
  14. Замечания
  15. См. также
  16. Поддержка и обратная связь
  17. Excel макрос замена символа
  18. VBA Replace Function to Replace Characters in a String
  19. The VBA Tutorials Blog
  20. Introduction — VBA Replace
  21. Example — VBA Replace
  22. Tutorial — VBA Replace
  23. Replace first 2 instances in a string
  24. Replace last occurrence of substring in a string
  25. Replace starting at the 10th character
  26. Replace starting at the 10th character and keep whole string
  27. Application Ideas — VBA Replace

Excel макрос замена символа

Добрый день всем присутствующим!

Столкнулся со следующей проблемой.
Не могу поменять через макрос начало формулы «уЕСЛИ. » на «=ЕСЛИ. «, чтобы формула заработала. Посредством Ctrl+H всё прекрасно работает, но, даже записав через рекодер, с помощью макроса замена не происходит.
Должно быть, какая-то хитрость в настройках, не позволяющая производить замены в сложных формулах.
У меня просто большущий объём таких формул по разным книгам — уже невозможно что-то назад откатить. Да и, честно сказать, любопытство появилось вокруг этого секрета.

Позвольте спросить, есть ли возможность что-то добавить в макросе, дабы обойти этот «запрет» замены, или остаётся только вручную через Ctrl+H?

Добрый день всем присутствующим!

Столкнулся со следующей проблемой.
Не могу поменять через макрос начало формулы «уЕСЛИ. » на «=ЕСЛИ. «, чтобы формула заработала. Посредством Ctrl+H всё прекрасно работает, но, даже записав через рекодер, с помощью макроса замена не происходит.
Должно быть, какая-то хитрость в настройках, не позволяющая производить замены в сложных формулах.
У меня просто большущий объём таких формул по разным книгам — уже невозможно что-то назад откатить. Да и, честно сказать, любопытство появилось вокруг этого секрета.

Позвольте спросить, есть ли возможность что-то добавить в макросе, дабы обойти этот «запрет» замены, или остаётся только вручную через Ctrl+H?

Сообщение Добрый день всем присутствующим!

Столкнулся со следующей проблемой.
Не могу поменять через макрос начало формулы «уЕСЛИ. » на «=ЕСЛИ. «, чтобы формула заработала. Посредством Ctrl+H всё прекрасно работает, но, даже записав через рекодер, с помощью макроса замена не происходит.
Должно быть, какая-то хитрость в настройках, не позволяющая производить замены в сложных формулах.
У меня просто большущий объём таких формул по разным книгам — уже невозможно что-то назад откатить. Да и, честно сказать, любопытство появилось вокруг этого секрета.

Позвольте спросить, есть ли возможность что-то добавить в макросе, дабы обойти этот «запрет» замены, или остаётся только вручную через Ctrl+H?

Спасибо. Автор — mick-77
Дата добавления — 12.05.2016 в 12:14

Источник

Excel функция REPLACE (VBA)

В этом учебном материале вы узнаете, как использовать Excel функцию REPLACE (в VBA) с синтаксисом и примерами.

Описание

Microsoft Excel функция REPLACE заменяет последовательность символов в строке другим набором символов.
Функция REPLACE — это встроенная в Excel функция, которая относится к категории строковых / текстовых функций. Её можно использовать как функцию VBA в Excel.
В качестве функции VBA вы можете использовать эту функцию в коде макроса, который вводится через редактор Microsoft Visual Basic Editor. Если вы ищете версию функции ЗАМЕНИТЬ для рабочего листа, прочтите страницу функции ЗАМЕНИТЬ (WS), поскольку она имеет другой синтаксис.

Синтаксис

Синтаксис функции REPLACE в Microsoft Excel:

Аргументы или параметры

Значение параметра Описание
vbBinaryCompare Двоичное сравнение
vbTextCompare Текстовое сравнение

Возвращаемое значение

Функция REPLACE возвращает строковое значение.

Применение

  • Excel для Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 для Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000

Тип функции

Пример (как функция VBA)

Функцию REPLACE можно использовать в коде VBA в Microsoft Excel.
Давайте взглянем на некоторые примеры функции REPLACE чтобы понять, как использовать Excel функцию REPLACE в коде Excel VBA:

Источник

Функция Replace

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

Синтаксис

Replace(expression, find, replace, [ start, [ count, [ compare ]]])

Синтаксис функции Replace содержит следующие именованные аргументы:

Part Описание
выражение Обязательно. Строковое выражение, содержащее заменяемую подстроку.
Найти Обязательно. Искомая подстрока.
Заменить Обязательно. Подстрока замены.
start Необязательно. Начальная позиция для поиска и возврата подстроки выражения . Если элемент опущен, предполагается, что он равен 1.
count Необязательный параметр. Число выполняемых замен подстроки. Если этот параметр опущен, значение по умолчанию — -1, то есть выполните все возможные подстановки.
compare Необязательно. Числовое значение, указывающее тип сравнения, который будет использоваться при оценке подстрок. Значения см. в разделе «Параметры».

Параметры

Аргумент compare может принимать следующие значения:

Константа Значение Описание
vbUseCompareOption –1 Выполняет сравнение, используя параметр оператора Option Compare.
vbBinaryCompare 0 Выполняется двоичное сравнение.
vbTextCompare 1 Выполняется текстовое сравнение.
vbDatabaseCompare 2 Только Microsoft Access. Выполняется сравнение на основе сведений из базы данных.

Возвращаемые значения

Функция Replace возвращает следующие значения:

Если Функция «Replace» возвращает
Элемент expression имеет нулевую длину Пустая строка («»)
Элемент expression равен Null Ошибка.
Элемент find имеет нулевую длину Копия expression.
Элемент replace имеет нулевую длину Копия выражения с удаленными вхождениями поиска .
Начать>Len(выражение) Строка нулевой длины. Замена строк начинается с позиции, указанной в начале.
Элемент count равен 0 Копия expression.

Замечания

Возвращаемое значение функции Replace — это строка с подстановками, которая начинается с позиции, указанной start , и завершается в конце строки выражения . Это не копия исходной строки от начала до конца.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Excel макрос замена символа

Replace( Expression,Find,Replace,[Start],[Count],[Compare] )

В результате действия функции Replace возвращается исходная строка с замененным строковым фрагментом

Expression Обязательный аргумент — строка, в которой требуется замена
Find Обязательный аргумент — подстрока, которую нужно заменить
Replace Обязательный аргумент — подстрока замены
Start Необязательный аргумент — указывает позицию, с которой начинается поиск
Count Необязательный аргумент — указывает число замен
Compare Необязательный аргумент — вид сравнения

Исходный текст: Результат замены:

—>Счетчики : 73439 | —>Добавил : Serge_007 | —>Теги : Replace, функция, Excel, vba, заменить, ВБА, function

—>Всего комментариев : 8

Replace («1011112», «1», «2», 5, 1) выдаёт 212, а надо 1011212

Это что — глюк или фича? И как в таких случаях быть?

На сайте Микрософт к функции Replace висит заметка

Значение, возвращаемое функцией Replace является строкой, которая начинается с позиции, указанной параметром Start, и завершается в конце строки Expression, с заменой подстрок Find значениями Replace.

Т.е. Если хочешь получить нормальную замену, надо к результату добавить начало исходной строки до позиции Start.

Добрый день! Интересует такой вопрос, возможно ли с помощью скрипта (с использованием функции replace) выполнить замену текста (соответствующего определенному шаблону) на этот же текст, но измененный? Т.е. мне неизвестна заранее строка для замены, эту строку я получаю чтением входной строки, и, например, добавлением к ней определенного символа.

Т.е. логика такая — у меня есть несколько шаблонов строк. Я беру входную строку, с помощью RegExp определяю, к какому шаблону относится данная строка, и далее меняю ее в зависимости опять же от шаблона. Т.е. в каком то случае это будет добавление к строке «.», в каком то случае пробела и тд.

Пример функции в экселе: ЕСЛИМН(RegExp1(A1;C1;D1) != 0; RegExp(A1;C1;D1); RegExp1(A1;C2;D2) != 0; RegExp1(A1;C2;D2); . ), где С* — это столбец с паттернами (вида (d<1>)(d<1>)(..*!) ), а D* — столбец с заменяемыми значениями вида $1.$2 $3. Т.е. идея такая, что делим исходную строку на группы, и далее в зависимости от вида шаблона добавляем между группами в нужные места символы (точки и тд). В таком случае вопрос, как показать в функции RegExp, что после чтения строки-паттерна в объект (regex.Pattern = Pattern), надо связать переданную в функцию строку-шаблон ( $1.$2 $3) с входным текстом? Потому что есть подозрение, что входную строку-шаблон он воспримет просто как строку, и выполнит замену 1 в 1 ( $1.$2 $3), а надо чтобы он понял, что вот эти знаки $ относятся именно к входной строке. Для примера код функции с основными частями:

Public Function RegExpExtract_myversion(Text As String, Pattern As String, myRep As String) As String
.
Set regex = CreateObject(«VBScript.RegExp»)
regex.Pattern = Pattern
regex.Global = True
If regex.Test(Text) Then
RegExpExtract_myversion = regex.Replace(Text,myRep)
Exit Function
Else RegExpExtract_myversion = 0
Exit Function
End If

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

Источник

VBA Replace Function to Replace Characters in a String

The VBA Tutorials Blog

Introduction — VBA Replace

Use the VBA Replace function to replace a substring of characters in a string with a new string. VBA Replace is similar to the Excel SUBSTITUTE function; both can be used to replace a portion of a string with another.

Example — VBA Replace

Make powerful macros with our free VBA Developer Kit

This is actually pretty neat. If you have trouble understanding or remembering it, our free VBA Developer Kit can help. It’s loaded with VBA shortcuts to help you make your own macros like this one — we’ll send a copy, along with our Big Book of Excel VBA Macros, to your email address below.

Tutorial — VBA Replace

This is a very basic macro. I defined my string, then instantly changed it. You likely won’t be using your Replace function in this manner. In practice, you’ll probably be passing a cell, like Range(«a1») . Yep, you can pass cells to the Replace function, too!

Anyway, when the macro finishes, the string str1 will be changed from:

All instances of fish were replaced with the string cat . This is the same way the Excel SUBSTITUTE() function replaces portions of a string.

You can see how a macro like this could be useful for replacing a “.csv” with a “.xlsx” extension in a list of file names, for example.

Okay, time to talk more about the VBA Replace function. The VBA Replace function requires 3 arguments, but it can accept as many as 6 arguments. I’ll give you a nice description of each of these arguments, then I’ll show you a few examples:


VBA Replace Function Arguments

Argument Optional Description
Expression The original string you want to replace characters in.
Find The substring you want to find within your Expression. This will be the string removed from your Expression.
Replace What you want to replace the string you found with. This will be the string added to your Expression.
Start Optional Where in your Expression you want to begin finding and replacing. The default is 1, so it begins at the first character.
Count Optional The number of replacements you want to make. If there are multiple instances of the substring Find, it will only replace however many you define in this argument. The default is to replace all instances.
Compare Optional Specifies the comparison method to be used. The options are vbBinaryCompare (default), vbDatabaseCompare, and vbTextCompare. You’ll rarely use this option so there’s no need to get too caught up on each of these options. The default is usually fine.

We know how to do a basic find and replace in a string using the Replace VBA function. Let’s look at a few examples of how the optional Replace arguments can change your results.

Replace first 2 instances in a string

Result: One cat, two cat, red fish, blue fish
Once the VBA Replace function finds the first 2 instances of the word cat , it stops replacing them and the macro ends.

Replace last occurrence of substring in a string

Result: One fish, two fish, red fish, blue cat
This is kind of an interesting one. I use the VBA function strReverse to write the string backward, and then I search for the first instance of the backward string inside the main string. The Replace function is really replacing the first instance of your string, but I’ve reversed the string so the first instance is really the last instance. It sounds confusing, but it’s a neat little trick!

Replace starting at the 10th character

Result: two cat, red cat, blue cat
That’s right. When you specify a starting position, Replace truncates the characters from the 1st character to the Nth character you specify. The first 9 characters are missing! Here’s how you can fix that if you still want all the characters:

Replace starting at the 10th character and keep whole string

Result: One fish, two cat, red cat, blue cat
The first fish remains and the rest are replaced. I retained the first 9 characters by using the VBA Mid function.

Reader’s Note: I’ve created a really awesome user-defined function to help you replace the Nth occurrence of a substring in a string if that’s what you’re searching for!

Application Ideas — VBA Replace

The Replace function of VBA is great for manipulating strings. One great use is to replace date/time stamps, file extensions or personalized greetings for the person logged into a computer. I’m sure you have other great uses for it and I’d love to hear about them!

For more VBA tips, techniques, and tactics, join our VBA Insiders email series using the form below. After you do that, share this article on Twitter and Facebook.

Ready to do more with VBA?
We put together a giant PDF with over 300 pre-built macros and we want you to have it for free. Enter your email address below and we’ll send you a copy along with our VBA Developer Kit, loaded with VBA tips, tricks and shortcuts.

Before we go, I want to let you know we designed a suite of VBA Cheat Sheets to make it easier for you to write better macros. We included over 200 tips and 140 macro examples so they have everything you need to know to become a better VBA programmer.

Источник

Читайте также:  Как настроить post запросы

Adblock
detector

Подстановка знаков и замена символов

kirillka

Дата: Среда, 09.10.2013, 12:38 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый день,

С Екселем, а конкретно с VBA я совсем на «Вы».
Поэтому, прошу помощи, сам к сожалению разобраться не смог.

Задача в следующем:
Необходимо, что бы в ячейках колонки B, со значениями (для примера) «64/24/13.2», после включения скрипта
менялись значения на «R64-24-132».
Т.е. шла автоматическая подстановка перед значением символа «R», далее слэш заменялся на «-«, а точка просто удалялась.

Каким образом это можно реализовать?
Заранее спасибо!

 

Ответить

KuklP

Дата: Среда, 09.10.2013, 12:48 |
Сообщение № 2

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Макросом можно. Но пример за Вас рисовать лениво.
[a1]=»R» & replace(replace([a1],»/»,» — «),».»,»»)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPСреда, 09.10.2013, 12:51

 

Ответить

ShAM

Дата: Среда, 09.10.2013, 15:00 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 1347


Репутация:

249

±

Замечаний:
0% ±


Excel 2010

Сергей, тогда уж:
[vba]

Код

[b1]=»R» & replace(replace([b1],»/»,» — «),».»,»»)

[/vba]
Так как:

что бы в ячейках колонки B

:)

Сообщение отредактировал ShAMСреда, 09.10.2013, 15:01

 

Ответить

KuklP

Дата: Среда, 09.10.2013, 15:17 |
Сообщение № 4

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Ну да. :) Спасибо, Алишер.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

kirillka

Дата: Среда, 09.10.2013, 16:30 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

ShAM, KuklP,
Спасибо за Вашу помощь.

Еще момент, а как мне расширить поле действие макроса, что бы он поменял значения, к примеру в 100 ячейках или до конца документа (где есть значения) колонки B?

 

Ответить

KuklP

Дата: Среда, 09.10.2013, 16:45 |
Сообщение № 6

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Читайте внимательно:

можно. Но пример за Вас рисовать лениво.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

ShAM

Дата: Среда, 09.10.2013, 17:11 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 1347


Репутация:

249

±

Замечаний:
0% ±


Excel 2010

Еще момент, а как мне расширить поле действие макроса, что бы он поменял значения, к примеру в 100 ячейках или до конца документа (где есть значения) колонки B?

Например, циклом:
[vba]

Код

For i = 1 To Cells(Rows.Count, 2).End(xlUp).Row

[/vba]

 

Ответить

kirillka

Дата: Пятница, 11.10.2013, 14:37 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Вновь обращаюсь за советом.

Как мне объединить в один- 2 макроса, представленные в примере (прикрепленный файл)?
Т.е. что бы символы и подстановка «R» работали одновременно.

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

К сообщению приложен файл:

0341841.xls
(38.0 Kb)

 

Ответить

SkyPro

Дата: Пятница, 11.10.2013, 14:41 |
Сообщение № 9

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Так?

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

Правда не понял этот моммент. У вас в примере пустые строки встречаются много раз. Вам ножно срабатывание в диапазоне непустых ячеек всего столбца? Или до первой пустой (считая сверху)?


skypro1111@gmail.com

Сообщение отредактировал SkyProПятница, 11.10.2013, 14:47

 

Ответить

kirillka

Дата: Пятница, 11.10.2013, 15:07 |
Сообщение № 10

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

SkyPro,

Желательно до первой пустой.
Ваш вариант, почему-то не работает. Ругается «For without Next».

 

Ответить

SkyPro

Дата: Пятница, 11.10.2013, 16:06 |
Сообщение № 11

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Ругается «For without Next».

Угу. Завтыкал проверить.
Вот так нужно?

К сообщению приложен файл:

7511604.xls
(33.5 Kb)


skypro1111@gmail.com

 

Ответить

kirillka

Дата: Пятница, 11.10.2013, 18:35 |
Сообщение № 12

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

SkyPro,

Да, все отлично!
Спасибо Вам огромное за помощь!

 

Ответить

ShAM

Дата: Воскресенье, 19.04.2015, 11:29 |
Сообщение № 13

Группа: Друзья

Ранг: Старожил

Сообщений: 1347


Репутация:

249

±

Замечаний:
0% ±


Excel 2010

AsprOn, здравствуйте. Читайте Правила. Особенно внимательно п.4.

 

Ответить

excelWhile  working with MS Excel , sometimes you may need to delete values in strings or change them. You can automate that by using the powerful Replace() which is available in Excel VBA (Visual Basic for Applications). Today, we walk you through the series of steps to understand and master the Replace() function. The prerequisites for this intermediate course are the basic knowledge of Excel (here’s a course that can give you an introduction to Excel 2o13), strings and preliminary understanding of Excel VBA. If not, we recommend that you go through this beginner’s course on Excel VBA and macros. For a quick refresher, you can do a quick read through of our VBA tutorial.

 Excel VBA Replace() is a simple yet very useful string function. As the name suggests, Replace() is used to replace a set of characters in a string with a new set of characters. The basic syntax of a VBA Replace function looks like this:

Replace(Source_string, Old_string, Replacement_string, [start, [count, [compare]]] )

Let’s go through each parameter to understand them better.

  • Source_string: This is the complete source string, of which you want some characters to be replaced.
  • Old_string: It’s the string which is to be replaced, ie the subset of source_string that you want to replace
  • Replacement_string: Is the string or a set of characters with which you want “Old_string” is to be replaced.
  • Start: Stands for the numerical position in the “Source_string” from which the search should start. This is an optional parameter. If this parameter is omitted, then by default the search begins at position 1.
  • Count: This parameter stands for the frequency of occurrences of Old_string to be replaced. Like “start”, it’s an optional parameter. If this argument is omitted, then each occurrence of “Old_string” in the “Source_string” will be replaced.
  • Compare: This is also an optional parameter. It represents the type of comparison algorithm to be used while the Replace Function searches for the occurrences of “Old_string” in the “Source_string.” Here are your options:
    1. vbBinaryCompare is the parameter value for binary comparison.
    2. vbTextCompare is the argument for textual comparison.
    3. Finally, the parameter value vbDatabaseCompare does a comparison based on information in your database.

Now that we’re familiar with the syntax of Replace function, lets move on to a few simple practical examples.

Examples

Replace (“Thank You", "You", "Everybody")

This example will return, “Thank Everybody”.

Replace ("Software Program", "Unique","code")

Guess what this will return? The code will return “Software Program.” The reason is we have asked the Replace function to replace “Unique.” However, you can see that “Unique” text string is not present inside the source string. So, Replace will leave the source string unchanged.

Replace ("Animal", "a", "f",2)

This code will return, “Animfl.” The reason is in the Replace function code, the search for character “a” starts from the second position. Wherever, “a” is found, it is replaced with “f”.

Replace ("Animal", "a", "f",1,1)

Here the Replace() will return “fnimal”.  The reason being we have instructed the VBA Replace statement to replace only one occurrence of “a” with “f”.

We suggest you work out these examples and learn a bit more about VBA macros (you can use this VBA course) before moving on to more complex programs using Replace function. Here on, we will use the Visual Basic Editor to write the code. We assume that you know how to save, compile and run programs on this editor. You can always look up our course on Excel VBA and Macros here.

How  to Remove Space from a String

Sub removeSpace()
Dim stringSpace As String
stringSpace = " this string contains spaces "
stringSpace = Replace(stringSpace, " ", "")
End Sub

Here we have declared stringSpace to be a variable of type string. It is initialized to a string which contains spaces. Replace() has the ‘stringSpace’ to the be source string. Every occurrence of space in the source string is removed using VBA Replace statement. Finally, stringSpace contains “thisstringcontainsspaces” which is the end result.

How to Replace a String within Inverted Comma

Sub replaceQuotedString()
Dim y, longString, resultString1 As String
y = Chr(34) & "abc" & Chr(34)
longString = "Let's replace this string: " &y
resultString1 = Replace(longString, y, "abc")
End Sub

Here we declare y, longString, resultString1 as variables of data type string. Chr() converts the numerical values to string data type. In other words, it introduces the quotation marks to the numerical values. And(&) operator concatenates strings. Value of “y” is “34abc34.” The  “longString” value is “Let’s replace this string: 34abc34″. In the Replace() value of source string is  the “longString.” That is “34abc34” is replaced by “abc”.  The resultstring1 now stores the value “Let’s replace this string: abc”

How to Remove Square Brackets from a String using Excel VBA

Sub removeSquareBrackets1()
Dim trialStr As String
trialStr = "[brackets have to be removed]"
trialStr = Replace(trialStr, "[", "")
trialStr = Replace(trialStr, "]", "")
MsgBox (trialStr)
End Sub

In this program, we’ve declared trialStr as a variable of type string.  It’s assigned the value”[brackets have to be removed].” The first occurrence of the replace function removes the left square bracket from trialStr. The variable now contains “brackets have to be removed].” In the second occurrence of the Replace function, the right square bracket is removed. Finally the value of trialStr is “brackets have to be removed.” Note that there are no square brackets in trialStr now. And the MsgBox() displays  the result.

How to Edit a Url Using Replace()

Enter this formula into any cell in your current Excel sheet.

=HYPERLINK("http://www.microsoft.com", "Microsoft Headquarters")

This creates a hyperlinked URL in the active cell of your worksheet. In the VBA editor, write the following code

Sub editURL1()
Dim URL1, NewURL
URL1 = ActiveCell.Formula
NewURL = Replace(URL1, "Microsoft Headquarters", "World Office")
ActiveCell.Formula = NewURL
End Sub

In this program, we’ve declared URL1 and NewURL as variables. URL1 is initialized to the value in the selected cell. Replace () searches for occurrence of “Microsoft Headquarters” in the URL and replaces it with “World Office.”  The selected cell is assigned the value of NewURL.

Programming using Excel VBA is interesting and gives you exposure to powerful functionality and features. Mastering it is important to efficiently and effectively use Excel.  Once you’ve tried these examples for yourself, do share your learning and experience with us. Once you’re ready to take the next step, hop over to this Ultimate VBA course, to check out some advanced VBA concepts.

Просмотров: 226

Ставим задачу.

 При получении данных из таблиц с помощью ВПР или ИНДЕКС важное значение имеет тип данных и языковая раскладка, с помощью которой набрано название. И если для смены типа можно использовать встроенные функции Excel, то с шрифтом все не так просто. По крайней мере, если решать задачу в лоб, то формула получится достаточно громоздкой.Давайте рассмотрим, как выполняется замена символов в VBA.

Давайте решим эту проблему, используя возможности VBA, или – проще – возможности макросов.

Написание основного кода.

Вначале попробуем определить, какие именно знаки латинского алфавита похожи на русский и запишем их в виде строки

Получаем  такой код

Dim LatStr As String: LatStr = “EeOoPpAaXxCcMTHKB”

Как видим, таких знаков не так уж и много

Добавим соответствующие им символы кириллицы

Dim RusStr As String: RusStr = “ЕеОоРрАаХхСсМТНКВ”

Напоминаю, в первой строке все буквы латинские (английские, если вам так проще), а во второй – кириллица, то есть русские. Названия произвольны. Обратите внимание, что знаки, похожие по написанию, находятся на одинаковых местах. Логика тут следующая. Если один из знаков проверяемого текста совпадает с знаком из строки LatStr, то надо взять аналогичный знак из RusStr

Для этого назначим для проверяемой строки переменную TestString. К примеру, возьмем его из текущей ячейки

Dim TestString  as string: TestString=ActiveCell.Value

После этого начнем по очереди сравнивать каждый символ полученной строки с латиницей из LatStr.

Запускаем цикл для получения очередного знака из TestString.

Вначале объявим переменные хранения счетчиков циклов, а также очередных знаков из  TestString и LatStr. Так же зададим переменную типа строка для результата обработки NewString

Dim b as integer, J as integer, sValue as string, s1 as string, NewString as string

Запустим сам цикл

For j=1 to Len(TestString)

         sValue=Mid(TestString,j,1)

Теперь начнем так же в цикле сравнивать его со знаками из LatStr. Если такой знак отыщется, то меняем  найденный символ на соответствующий знак из RusStr.

For b=1 to Len(LatStr)

                         S1=mid(LatStr,b,1)

If  s1=SValue then SValue=Mid(RusStr,b,1)

Закрываем цикл сравнения и вернемся к проверке очередного знака.

Next b

В итоге, если буква была латинской, она заменится на соответствующую по написанию русскую, если нет –  знак остается прежним. Добавим полученный результат к некоей строке NewString.  Изначально наша переменная, как и любая другая, будет пустой, но после каждого прохождения цикла тестирования к ней будет добавляться очередной символ

 NewString=NewString & sValue

И закрываем цикл извлечения

Next j

Собираем код вместе.

В результате получили такой итоговый код

Dim TestString  as string: TestString=ActiveCell.Value

Dim LatStr As String: LatStr = “EeOoPpAaXxCcMTHKB”

Dim RusStr As String: RusStr = “ЕеОоРрАаХхСсМТНКВ”

Dim b as integer, J as integer, sValue as string, s1 as  string

For j=1 to Len(TestString)

         sValue=Mid(TestString,j,1)

For b=1 to len(LatStr)

                         S1=mid(LatStr,b,1)

If  s1=sValue then sValue=Mid(RusStr,b,1)

Next b

NewString=NewString & sValue

Next j

Отступы могут быть произвольными, можно вообще обойтись без них, но так проще отследить, что же происходит на участках кода

Где же применить полученный код? Лично я вижу два варианта.

Создаем пользовательскую функцию – UDF.

Первый – обернуть строки кода в виде функции. Например, создать пустой файл Excel, открыть в нем редактор VBA, используя нажатие сочетания “Alt F11” и дать команду 

«Insert» → «module!»

замена символов в VBA -1

В открывшемся окне вставляем  следующую строку

Public Function LatinToRus (TestString as Variant) as string

Редактор автоматически создаст основу или – как принято это называть – каркас для функции, добавив строку End Function. После этого добавим полученный нами выше код перед строкой End Function. Первую строку кода пропускаем – мы задаем TestString  как параметр – исходные данные – для нашей функции. Завершим все добавлением строки

LatinToRus=NewString

Результат получится таким

Public Function LatinToRus (TestString as Variant) as string

Dim LatStr As String: LatStr = “EeOoPpAaXxCcMTHKB”

Dim RusStr As String: RusStr = “ЕеОоРрАаХхСсМТНКВ”

Dim b as integer, J as integer, sValue as string, s1 as  string

For j=1 to Len(TestString)

         sValue=Mid(TestString,j,1)

For b=1 to len(LatStr)

                         S1=mid(LatStr,b,1)

If  s1=Svalue then Svalue=Mid(RusStr,b,1)

Next b

NewString=NewString & sValue

Next j

LatinToRus=NewString

End Function

замена символов в VBA -2

Название функции естественно может быть произвольным.

Сохраним файл с функцией как надстройку Excel.

Теперь сохраним наш файл как надстройку Excel в формате Xlam. Excel сам автоматически выберет место для хранения надстройки. Если же  вы хотите сохранить ее резервную копию, дайте команду «Сохранить как» ещё раз . После этого сделайте копию, к примеру, на рабочем столе

замена символов в VBA

Теперь перейдем по пути

Файл → параметры → Надстройки → надстройки Excel → перейти

И отмечаем нашу надстройку флажком

замена символов в VBA -4

Меняем в Excel английские буквы на русские.Замена символов в VBA.

После этого функция станет доступной во всех файлах  Excel для текущего пользователя в категории «Определенные пользователем»

Меняем в Excel английские буквы на русские.Замена символов в VBA.

Меняем в Excel английские буквы на русские.Замена символов в VBA.

А вот и пример использования.

Меняем в Excel английские буквы на русские.Замена символов в VBA.

Обратите  внимание на формулы. Очевидно, что после применения функции LatinToRus были найдены все слова по образцам.

Используем создание процедуры.

Второй способ применения – использование созданного кода в виде процедуры, например, для ячеек выделения. Такую процедуру удобнее добавить в личную книгу макросов. Изначально доступ к ней запрещен, поэтому пойдем на хитрость. Запустим запись макроса с вкладки «Вид»

Меняем в Excel английские буквы на русские.Замена символов в VBA.

Укажем хранение макроса в личной книге, после чего сразу остановим запись

Меняем в Excel английские буквы на русские.Замена символов в VBA.

Меняем в Excel английские буквы на русские.Замена символов в VBA.

Снова запускаем редактор VBA и открываем текст модуля из личной книги.

Меняем в Excel английские буквы на русские.Замена символов в VBA.

Удаляем строки Sub Макрос1 () и End Sub а так же все что Excel добавил между ними  и вставляем следующий код

Sub Change_Latin_To_Rus()

    Dim LatStr As String: LatStr = “EeOoPpAaXxCcMTHKB”

    Dim RusStr As String: RusStr = “ÅåÎîÐðÀàÕõÑñÌÒÍÊ”

    Dim b As Integer, J As Integer, sValue As String, s1 As String

    Dim TestString  As String

    For Each MyCells In Selection

        NewString = “”

        TestString = MyCells.Value

        For J = 1 To Len(TestString)

            sValue = Mid(TestString, J, 1)

            For b = 1 To Len(LatStr)

                s1 = Mid(LatStr, b, 1)

                If s1 = sValue Then sValue = Mid(RusStr, b, 1)

            Next b

            NewString = NewString & sValue

        Next J

        MyCells.Value = NewString

    Next MyCells

End Sub

Меняем в Excel английские буквы на русские.Замена символов в VBA.

Теперь достаточно выделить нужный диапазон, нажать сочетание Alt F8 и выбрать нашу процедуру.

Замена символов в VBA произойдет автоматически во всех выделенный ячейках. И наконец ,если вам надо наоборот поменять русские буквы в латинице, то просто поменяйте местами в циклах LatStr и RusStr то есть сделайте так

For b=1 to len(RusStr)

S1=mid(RusStr,b,1)

If  s1=Svalue then Svalue=Mid(LatStr,b,1)

Next b

Подведем итоги.

Никто не мешает добавить символы, к примеру, заменить знак нуля на заглавную букву «О». то есть дальнейшее уже зависит от вашей фантазии. Как видите, замена символов в VBA  не такое уж сложное дело. Нужно только желание. Пробуйте, экспериментируйте. На этом все, встретимся на занятиях. Всем внимательности и упорства, а результат не заставит себя ждать.

Если постоянно приходится выполнять одно и то же действие или появляется потребность автоматизировать некоторые движения, то в Excel есть специальная функция – макросы. Это маленькие (или не очень) скрипты, позволяющие выполнять ряд действий за пользователя. Если правильно использовать макросы, то можно выполнять почти любое действие, даже то, которое не предусмотрено стандартным функционалом.

Самые простые макросы могут быть записаны с помощью специальной кнопки. Достаточно ее нажать и выполнить определенные действия. Но для более продвинутого уровня все же придется изучать язык программирования. Но на самом деле, это не так сложно. Главное – иметь в голове хорошую идею, как можно макрос применить. 

Программирование макросов осуществляется с помощью языка VBA. И в нем есть одна из часто используемых функций – Replace. 

Содержание

  1. Определение функции Replace, описание
  2. Синтаксис функции Replace и параметры
  3. Параметр compare
  4. Возвращаемое значение
  5. Пример №1
  6. Пример №2
  7. Пример №3
  8. Выводы

Определение функции Replace, описание

С помощью функции Replace можно заменить всю строку или отдельную подстроку, используя в качестве ориентира определенный шаблон. Как результат, эта функция возвращает получившуюся строку. Причем замена может осуществляться определенное количество раз, и функция автоматически вносит необходимые коррективы.

С помощью этой функции можно осуществить автоматически сразу несколько действий:

  1. Найти определенную строку и подстроку, замена которой требуется. 
  2. Заменить текст на тот, который был указан пользователем или был возвращен формулой. 
  3. Найти следующий аналогичный фрагмент. И снова его заменить. И так такое количество раз, сколько нужно. Если конкретно, это количество записывается в параметре Count, который записывается далее.

Если необходимо осуществить замену внутри определенного диапазона, то нужно использовать функцию Replace применительно к каждой ячейке. Но если использовать объект Range, то можно значительно упростить процесс.

Если выражаться более просто, эта функция является заменой окна «Найти и заменить». Она позволяет автоматизировать этот процесс, например, основываясь на результатах вычислений или действиях, совершенных ранее. Например, можно запрограммировать макрос на то, чтобы он автоматически подгружал оценки учеников, и если новая оценка выше предыдущей, то вместо текста «учится плохо» писать строку «учится лучше». Таким образом, можно значительно превысить те возможности. которые используются в стандартной функции «Условное форматирование», поскольку такое сравнение реализовать стандартными средствами Эксель не так удобно, как макросами (хотя если заморочиться, то можно). Но есть и более сложные задачи, реализовать которые можно исключительно с помощью макросов. 

Функцию «Найти и заменить» знают почти все пользователи Эксель. Она позволяет осуществить замену искомой строки один и более раз. Перед тем, как мы начнем рассматривать, как автоматизировать процесс, необходимо сперва разобраться в стандартном алгоритме действий пользователя, если он хочет заменить один текст на другой. Все потому, что нельзя рассматривать более продвинутые инструменты, не разобравшись толком в простых. 

Итак, чтобы заменить определенный текст на какую-то строку без макроса, необходимо на вкладке «Главная» найти пункт «Редактирование». Там в группе «Редактирование» нужно найти такую кнопку.  После этого откроется небольшое меню, в котором нужно будет выбрать пункт «Заменить».

Replace - функции обработки строки (функции VBA)

1

Можно же значительно упростить себе жизнь, один раз запомнив комбинацию клавиш Ctrl + H.

После этого появится такое окно.

Replace - функции обработки строки (функции VBA)

2

В нем мы видим две строки. В первой нужно указывать ту строку, которую программа должна найти. Во второй записывается тот текст, на который должна описанная выше строка замениться первая строка. Окно предусматривает также возможность настроить формат, если нажать на кнопку «Параметры».

Replace - функции обработки строки (функции VBA)

3

Если необходимо осуществить замену во всех аналогичных местах, то это можно сделать с помощью кнопки «Заменить все». Если же нажимать просто кнопку «Заменить», то можно выбирать, какой фрагмент заменять, а какой – нет. Чтобы пропустить какое-то вхождение, нужно нажать кнопку «Найти далее», и делать это до тех пор, пока не будет найден тот вариант, который требует замены. После этого пользователь нажимает кнопку «Заменить».

Приятный бонус: с помощью комбинации клавиш Ctrl + Enter можно сделать искусственный разрыв строк, чтобы написать несколько строк в рамках одной ячейки.

Replace - функции обработки строки (функции VBA)

4

При чем это к нашей теме? А отношение самое прямое. Как правило, чтобы удалить эти разрывы, пользователь вручную убирает соответствующие непечатаемые символы. Но это можно сделать проще, с помощью окна «Найти/Заменить». После этого в поле «Найти» указывается символ разрыва строки. Его можно ввести нажатием комбинации клавиши Ctrl + J. В соответствующем месте появится точка, которая обозначает этот непечатный символ.

После этого нам остается ввести символ, на который будет осуществляться замена. Поскольку перед нами стоит цель убрать все переносы строк, то логично их заменить на пробелы. Если этого не сделать, то символы могут просто слиться в одно большое слово, что нам не надо.

Replace - функции обработки строки (функции VBA)

5

Видим, что после того, как мы нажали «ОК», три строки были слиты в одну, и при этом после каждого слова стоит пробел. 

Если посмотреть на окно поиска и замены еще раз, то будет видно. что после нажатия на кнопку «Параметры» появляется еще некоторое количество параметров, дающих возможность выбрать область поиска, особенности просмотра и где осуществлять поиск нужных значений.

Также можно настроить отображение значений с учетом регистра (то есть, больших и маленьких букв), а также поставить флажок возле пункта «Ячейка целиком». Что касается формата, то он будет отображаться в специальном поле возле кнопки настройки. 

Синтаксис функции Replace и параметры

В целом, синтаксис этой функции выглядит следующим образом.

Replace(expression, find, replace, [start], [count], [compare])

Давайте разберем аргументы этой функции более детально:

  1. Expression. Это изначальная строка, замена которой требуется.
  2. Find – это подстрока, входящая в состав строки верхнего уровня, в которой нужно осуществлять замену значения.
  3. Replace – это подстрока, которая заменяет ту подстроку, которая описана в предыдущем аргументе. Проще говоря, тот текст, на который требуется заменить.
  4. Start. Этот параметр необязательный. Характеризует порядковый номер символа строки, с которого макрос будет осуществлять поиск. Та часть строки, которая располагается до этого номера, просто не учитывается при замене.
  5. Count. Это количество итераций, в ходе которых будет осуществляться замена. Этот параметр также является необязательным. 
  6. Compare. Это значение в числовом формате, которое используется для указания вида сравнения. Данный параметр также указывать необязательно.

Если опустить все необязательные аргументы, то синтаксис функции Replace будет выглядеть менее устрашающе.

Replace(expression, find, replace)

У многих людей возникает вопрос: чем отличается параметр от аргумента. Несмотря на то, что эти термины часто используют в качестве синонимов, это не совсем правильно. Аргумент функции – это фактически переменная, которая используется при вычислении. Параметр же – это значение, которое находится в переменной. 

Параметр compare

Использование параметра compare имеет свои особенности. Нужно указывать не текстовое значение, а числовое, которое служит константой, обозначающей тип сравнения. Давайте рассмотрим их более подробно.

  1. -1. В этом случае в качестве аргумента используется то значение, которое определяется оператором Option Compare.
  2. 0. Это двоичное сравнение.
  3. 1 – текстовое сравнение.

Отличие между текстовым и двоичным сравнением заключается в том, что отличаются буквенные регистры. В первом случае они не учитываются, а во втором большие и маленькие буквы берутся в учет при поиске строк и их замене.

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

Возвращаемое значение

В программировании есть такое понятие, как тип данных. Поскольку таблицы Excel тоже являются программируемыми, то даже незнакомый с макросами человек понимает, что это такое. В языке VBA существует несколько основных типов данных. В нашем случае возвращается тип String. 

Если значение аргумента Expression нулевое, то и строка вернется нулевая. Если же было в качестве значения Expression значение Null, то формула выдаст ошибку. Нужно учитывать еще некоторые моменты при использовании этой функции:

  1. Если в качестве аргумента Find вводится строка, длина которой нулевая, то функция вернет то же значение, которое введено в качестве параметра Expression. Технически это означает, что нет особой подстроки, которую нужно искать в рамках строки, которая передается аргументу Expression.
  2. Если длина параметра Replace нулевая, то тогда возвращается строка, соответствующая первому параметру с удаленной частью второго параметра. Технически это означает, что строка текста была заменена на пустое значение. 
  3. Если в качестве параметра Start было передано число, превышающее длину искомой строки, то вернется пустая строка. Если же этому аргументу передать число 0, то поиск будет осуществляться после нулевого символа, то есть сразу. Поэтому возвращаться будет то значение, которое указано в качестве параметра Expression.

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

Пример №1

В этом примере имеется единственное вхождение искомой подстроки. И его нужно заменить. 

Sub Primer1()

Dim a

a = «Сливочное масло»

a = Replace(a, «Сливочное», «Рыжиковое»)

MsgBox a

‘Результат: «Рыжиковое масло»

End Sub

Пример №2

Данный пример осуществляет замену нескольких вхождений подстроки. 

Sub Primer2()

Dim a

a = «Идёт медведь, идёт лиса, идёт грач»

‘с параметром compare по умолчанию

a = Replace(a, «идёт», «бежит»)

MsgBox a

‘Результат:

‘Идёт медведь, бежит лиса, бежит грач

a = «Идёт медведь, идёт лиса, идёт грач»

‘с параметром compare=1(vbTextCompare)

a = Replace(a, «идёт», «бежит», , , 1)

MsgBox a

‘Результат:

‘бежит медведь, бежит лиса, бежит грач

End Sub

Пример №3

В этом случае осуществляется замена одной подстроки, на поиск начинается только с пятнадцатого символа.

Sub Primer3()

Dim a

a = «Идёт медведь, идёт лиса, идёт грач»

a = Replace(a, «идёт», «бежит», 15, 1)

MsgBox a

‘Результат:

‘бежит лиса, идёт грач

End Sub

Выводы

Видим, что функция Replace достаточно удобна в использовании. С ее помощью можно добиться максимальной гибкости, которая безусловно важна в работе с электронными таблицами. Она является тем кирпичиком, который превращает Excel из программы для составления больших баз данных в полноценный инструмент, который может все. 

Функция «Найти и заменить» активно используется и дает возможность при правильном применении сэкономить огромное количество времени. И это если она используется сама по себе. Если же написать скрипт, то нужно один раз вложить время, чтобы потом его экономить. 

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

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

Оцените качество статьи. Нам важно ваше мнение:

Понравилась статья? Поделить с друзьями:
  • Excel макрос заливка ячейки цветом
  • Excel макрос закрыть окно
  • Excel макрос закрыть книгу с сохранением
  • Excel макрос закрывает книгу
  • Excel макрос жирный шрифт