Excel Smart Найти и заменить только определенные символы

3

Я хочу изменить INT на INTERNATIONAL и NA на NATIONAL ASSEMBLY во всей книге Excel через диалоговое окно Excel Macro или «Найти и заменить». Но когда я запускаю макрос или изменяю его через диалоговое окно «Найти и заменить», он также заменяет последние два символа «NA» из КИТАЯ и становится «КИНАЦИОНАЛЬНОЙ АССАМБЛЕЕЙ» и «ИНТЕРЬЕРОМ» МЕЖДУНАРОДНОГО.

Теперь я хочу, чтобы Excel только умно находил в рабочей книге символ NA, который не входит ни в один другой символ, аналогичный символу INT, который не привязан ни к какому другому символу.

Asim
источник
Можете ли вы поделиться макросом (при условии, что это код VBa)
Dave
Какую версию Excel вы используете?
dangowans

Ответы:

1

Если вы идете по маршруту VBA, попробуйте использовать Regular Expressions

Вот начало

Sub ReplaceWithRE()
    Dim re As Object 'RegExp
    Dim rng As Range, cl As Range
    Dim sh As Worksheet
    Dim wb As Workbook
    Dim sReplace As String
    Dim aReplace(0 To 1, 0 To 1) As String
    Dim i As Long

    Set wb = ActiveWorkbook
    Set re = CreateObject("vbscript.regexp") ' New RegExp
    re.Global = True
    re.IgnoreCase = False
    re.MultiLine = True

    ' Load array of patterns and replacements
    aReplace(0, 0) = "\bINT\b"
    aReplace(0, 1) = "INTERNATIONAL"
    aReplace(1, 0) = "\bNA\b"
    aReplace(1, 1) = "NATIONAL ASSEMBLY"

    For Each sh In wb.Worksheets
        On Error Resume Next
        Set rng = sh.UsedRange.SpecialCells(xlCellTypeConstants)
        If Err.Number <> 0 Then
            Err.Clear
        Else
            On Error GoTo 0
            For Each cl In rng
                sReplace = cl.Value
                ' Test each cell for each pattern, replace when found
                For i = 0 To UBound(aReplace, 1)
                    re.Pattern = aReplace(i, 0)
                    If re.Test(sReplace) Then
                        sReplace = re.Replace(sReplace, aReplace(i, 1))
                    End If
                Next
                cl.Value = sReplace
            Next
        End If
    Next


End Sub
chris neilsen
источник
Ты замечательный!! Большое спасибо за такую ​​большую помощь, это отличный макрос для меня, чтобы работать с. Это мне очень помогло. Еще раз спасибо.
Asim
3

Если значения, которые вы хотите заменить, сами по себе находятся в ячейках (никакого другого текста), обязательно выполните Решение CharlieRB , Если значения расположены в ячейках вместе с дополнительным текстом, будет работать слегка измененная версия.

Откройте окно «Найти и заменить». Нажмите вкладку «Заменить».

Find and Replace

Введите значения «Найти что» и «Заменить на». Нажмите кнопку «Найти все».

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

dangowans
источник
... но вы можете изменить свой ответ, чтобы сказать: «Выделите запись s Вы хотите обновить »(« Я хочу изменить… во всей книге Excel ») и, возможно, сказать что-нибудь о Shift + щелчок и Ctrl + щелчок.
Scott
2

в Find and Replace окно, вам нужно поставить галочку Match entire cell contents затем запустите его.

enter image description here

CharlieRB
источник
1
@pnuts: FWIW, я думаю, это не очевидно из вопроса.
Scott
@pnuts: Учитывая, что спрашивающий, кажется, борется с английским языком, «аналогично, символ INT, который не привязан ни к какому другому символу» мог очень хорошо означает то же самое, что и «символ NA в рабочей тетради, который не включен ни в один другой символ»; т.е. "строка" Икс в самой клетке, без каких-либо других символов. "
Scott
Скотт прав, извините за мой слабый английский, также имею в виду, как упоминалось выше. Но теперь ее решает Крис Нилсен.
Asim
Я считаю, что мы все поняли, что вы имели в виду под «аналогичным образом»; это были другие слова, в которых мы не были уверены. Кстати, когда вы отвечаете на чей-то вопрос (из комментария) в новом комментарии, обычно упоминается имя этого человека, перед которым стоит «@», как в «@Scott, @pnuts». Таким образом, мы получаем уведомление. Увидеть Отвечая в комментариях абзацы Форматирование комментариев раздел страницы справки по редактированию Markdown.
Scott
1
  1. Сохраните ваш файл как файл CSV. Если вы хотите манипулировать подмножеством вашей рабочей таблицы (например, выбранными столбцами и / или строками), скопируйте эту область в рабочий файл (или лист) и сохраните его как CSV. Если вам нужно изменить несколько листов, повторите этот процесс для каждого листа.
  2. Отредактируйте файл CSV с помощью своего рода интеллектуального текстового редактора (т. Е. Умнее, чем Блокнот). vi хорошо для этого; используйте команду, такую ​​как %s/\<INT\>/INTERNATIONAL/g, Microsoft Word, вероятно, будет достаточно; используйте опцию «Найти только целые слова» под More>> в «Найти и заменить».
  3. Прочитайте отредактированный файл CSV обратно в Excel.
  4. Скопируйте измененные значения в исходную книгу, чтобы сохранить форматирование.
Scott
источник
Большое спасибо за вашу помощь, но это длительный процесс.
Asim
1
И вы верите, что подпрограмма VBA на 700 символов более быстрая?
Scott
1
@ Scott Это если код предоставлен для вас. :)
Excellll