Excel – поиск и замена нескольких слов

Я просто хочу сделать простой поиск и замену для нескольких строк. Например, мне нужно заменить все «A1», «A2», «A3» на «system» и все «B1», «B2» на «ACC» и так далее …

Кто-нибудь знает хороший маршрут? Я просто не знаю, как это начать. Спасибо за помощь!

Обновление в нижней части страницы комментария Майкла – лучший подход для многих заметок шаблонов

Если вы запишете простой макрос, используя опции « Replace в меню Excel, вы получите код, который вы можете убрать до этого

  1. Первый вариант обновит ячейку в ActiveSheet чем содержит "I am A1" для "I am System" – соответствие строки партии
  2. Второй вариант будет только обновлять ячейки в ActiveSheet который содержит только "A1" до "Sytem" – то есть соответствие целой строки ячейки

код

 Sub UpdatePartial() With ActiveSheet.UsedRange .Replace "A1", "System", xlPart .Replace "A2", "System", xlPart .Replace "A3", "System", xlPart .Replace "B1", "ACC", xlPart .Replace "B2", "ACC", xlPart End With End Sub Sub UpdateWhole() With ActiveSheet.UsedRange .Replace "A1", "System", xlWhole .Replace "A2", "System", xlWhole .Replace "A3", "System", xlWhole .Replace "B1", "ACC", xlWhole .Replace "B2", "ACC", xlWhole End With End Sub 

Обновить

Код ниже

  1. Использует базовый Timer для сравнения замены всех частичных строк от A1-A99 и B1-B99
  2. Эти два метода
    • Метод Replace выше называется 198 раз (т. Е. 2 ​​* 99) в цикле
    • RegExp \ variant array

При моем тестировании второй метод выполняется быстрее для 198 замен на 1000 000 ячеек.

Меньшая замена улучшит относительную скорость по отношению к замене. Больше к ячейкам RegExp More также улучшит относительную скорость по отношению к Replace . Меньше к RegExp

Я не начал использовать метод Find с последующим разбором строк. В качестве решения типа hyrbrid ( find then parse ut не будет конкурировать с одной заменой или синтаксическим анализом )

таймер

 Sub MainCaller() Dim dbTime As Double Dim lngCnt As Long dbTime = Timer() For lngCnt = 1 To 99 Call UpdatePartial("A" & lngCnt, "System") Call UpdatePartial("B" & lngCnt, "System") Next lngCnt Debug.Print Timer() - dbTime dbTime = Timer() Call RegexReplace("(A|B)[1-99]", "System") Debug.Print Timer() - dbTime End Sub 

1) Заменить Sub

 Sub UpdatePartial(StrIn As String, StrOut As String) ActiveSheet.UsedRange.Replace StrIn, StrOut, xlPart End Sub 

2) Regexp – Variant Array Sub

 Sub RegexReplace(StrIn As String, StrOut As String) Dim rng1 As Range Dim rngArea As Range Dim lngRow As Long Dim lngCol As Long Dim lngCalc As Long Dim objReg As Object Dim X() 'On Error Resume Next 'Set rng1 = Application.InputBox("Select range for the replacement of leading zeros", "User select", Selection.Address, , , , , 8) 'If rng1 Is Nothing Then Exit Sub 'On Error GoTo 0 ActiveSheet.UsedRange Set rng1 = ActiveSheet.UsedRange 'See Patrick Matthews excellent article on using Regular Expressions with VBA Set objReg = CreateObject("vbscript.regexp") With objReg .Pattern = StrIn .ignorecase = False .Global = True End With 'Speed up the code by turning off screenupdating and setting calculation to manual 'Disable any code events that may occur when writing to cells With Application lngCalc = .Calculation .ScreenUpdating = False .Calculation = xlCalculationManual .EnableEvents = False End With 'Test each area in the user selected range 'Non contiguous range areas are common when using SpecialCells to define specific cell types to work on For Each rngArea In rng1.Areas 'The most common outcome is used for the True outcome to optimise code speed If rngArea.Cells.Count > 1 Then 'If there is more than once cell then set the variant array to the dimensions of the range area 'Using Value2 provides a useful speed improvement over Value. On my testing it was 2% on blank cells, up to 10% on non-blanks X = rngArea.Value2 For lngRow = 1 To rngArea.Rows.Count For lngCol = 1 To rngArea.Columns.Count 'replace the leading zeroes X(lngRow, lngCol) = objReg.Replace(X(lngRow, lngCol), StrOut) Next lngCol Next lngRow 'Dump the updated array back over the initial range rngArea.Value2 = X Else 'caters for a single cell range area. No variant array required rngArea.Value = objReg.Replace(rngArea.Value, StrOut) End If Next rngArea 'cleanup the Application settings With Application .ScreenUpdating = True .Calculation = lngCalc .EnableEvents = True End With Set objReg = Nothing End Sub 
  • Excel VBA для выбора ячеек, которые содержат определенную текстовую строку в одной книге, а затем скопировать и вставить эти ячейки в новую книгу
  • Ошибка «Требуемый объект» 424
  • Excel извлекает точную строку из ячеек со случайной структурой
  • Excel VBA :: Найти функцию в цикле
  • vba искать значение в столбце из другой книги?
  • VBA Найти несколько элементов в диапазоне и на основе других критериев в строке Копировать и вставить смежные ячейки на другой рабочий лист
  • Поиск значения, а затем разворачивание выбранных ячеек в столбце
  • .find найти пустую ячейку
  • excel vba ищет список ключевых слов, основанный на поиске значений, а затем редактирует значение другой ячейки
  • Найдите строку на одном листе и удалите соответствующую строку на другом листе
  • Excel 2010 - поиск и добавление
  • Interesting Posts

    Объединение двух таблиц с различным количеством записей

    Как преобразовать многомерную таблицу excel в 1 размер?

    Как индексировать рамку Deedle с датами Excel в виде ключей?

    Чайник (ложка) – получить имя файла для вывода excel из поля в поле excel на входе

    Экспорт данных Matlab в Excel, 2003-2010

    заполнять определенные поля в Excel из таблиц в pdf

    Копировать / вставить значения из нескольких листов, но не всех листов, в один лист

    C # Microsoft Interlop Slow-Take диапазон в массив

    Добавление числа на сегодняшний день, когда число находится в одной ячейке, а дата – в другом – VBA

    Excel WBA UDF для управления строкой не работает

    Excel VLOOKUP – как использовать имя столбца вместо номера столбца?

    необходимо вернуть данные в часовую диаграмму из предоставленного листа

    Эффективный способ удаления строк (несколько критериев) VBA

    Pandas: чтение определенного значения ячейки Excel в переменную

    Формат в виде таблицы (TableStyles) в Excel VSTO 2007, ошибка: одна таблица не может перекрывать другую таблицу

    Давайте будем гением компьютера.