Извлечение узора из текста

У Тома есть рабочий лист, содержащий около 20 000 ячеек, заполненных текстовыми данными. Изнутри этих ячеек ему нужно извлечь определенный образец текста. Шаблон выглядит следующим образом: ## – #####, где каждый # – это цифра. Этот шаблон не появляется в определенном месте в каждой ячейке. Том задается вопросом, есть ли способ извлечь нужную информацию.

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

  = MID (A1, FIND ("-", A1) -2,8) 

Эта команда находит тире, а затем захватывает восемь символов, начиная с двух символов слева от тире. Очевидно, это не сработает, если в других местах текста есть тире или если возможно наличие «шаблонов», которые включают нецифровые символы (например, 12-34B32), и вы хотите, чтобы они были исключены. В этом случае вам понадобится гораздо более сложная формула:

 = IF (ISERROR (INT (MID (A1, FIND ("-", A1, 1) -2, 2)) &  INT (MID (A1, FIND ("-", A1, 1) +1, 5))), "", MID (A1, FIND ("-", A1) -2, 8)) 

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

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

 Sub ExtractPattern () При возникновении ошибки Возобновить Далее Установить SourceSheet = ActiveSheet Установить TargetSheet = ActiveWorkbook.Sheets («Результаты»  ) Если Err = 0, то рабочие листы ("Результаты"). Удалить Конец, если рабочие листы. Добавить ActiveSheet.Name = "Результаты" Установить TargetSheet = ActiveSheet Cells (1, 1) .Value = "Найденные коды" Ячейки (1, 1).  Font.Bold = True iTargetRow = 2 SourceSheet.Select Selection.SpecialCells (xlCellTypeLastCell) .Select Range (Selection, Cells (1)). Select For Each c In Selection.Cells If c.Value Like "* ## - ###  ## * "Then sRaw = c.Value iPos = InStr (sRaw," - ") Do While iPos> 0 Если iPos  

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

Оцените статью
Frestage.ru
Добавить комментарий