2014-02-18 2 views
0

Я пытаюсь сопоставить шаблон в соответствии с заданным набором ячеек. Например, я бы хотел найти местоположение (строка/столбец) заголовков электронной таблицы, но заголовки могут немного отличаться по имени от листа до листа.Регулярное выражение VBA/Excel с массивами или ячейками

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

Я попытался использовать функции match/find, но хотел бы найти что-то, что соответствует точному шаблону, не обязательно точная строка или что-то близкое к ней.

Пример того, что заголовки могут быть что-то вроде этого:

Название магазина | Номер магазина | Имя элемента | Номер по каталогу

или

Магазин # | Магазин | Товар # | Item

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

Edit:

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

+0

Возможно, это поможет ваша версия с полукодированным кодом. – pnuts

ответ

0

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

# (?i)^\s*(Store|Item)(?:\s+(Name|Number|\#|))?\s*$ 

(?i)       # Case insensitive 
^        # Beginning of string 
\s*       # optional whitespace 
(Store | Item)    # (1), Capture Store or Item (add more) 
(?:       # Non-capture grp start 
     \s+       # 1 or more whitespace 
     (Name | Number | \# |)  # (2), Capture Name or Number or hashtag or nothing 
            #  (add more) 
)?       # Non-capture grp end, do 0 or 1 time 
\s*       # optional whitespace 
$        # End of string 
Смежные вопросы