Разбор столбца строк с помощью VBA

Я хотел бы проанализировать столбец ячеек строк в Excel VBA, каждая ячейка содержит следующее:

2 '␂'

Я хотел бы изменить содержимое этой ячейки, чтобы оно содержало только 2 (или любые числовые символы непосредственно перед «строкой». Какой самый простой способ анализа такой информации? Спасибо.


person stanigator    schedule 29.05.2009    source источник
comment
Дубликат stackoverflow.com/questions/924717/ ??   -  person barrowc    schedule 30.05.2009
comment
Это отдельный вопрос, вытекающий из вопроса, который я задавал ранее в ветке barrowc.   -  person stanigator    schedule 30.05.2009


Ответы (2)


Если вы уверены в формате, найдите строку перед ' (апострофом) и измените значение ячейки. Предполагая, что вы находитесь в ячейке с этим значением, используйте следующий код VBA.

activecell.text = mid(activecell.text, 1, instr(1, activecell.Text, "'")-1)

Он ищет апостроф и извлекает символы перед ним и помещает его в текущую ячейку.

person shahkalpeshp    schedule 29.05.2009
comment
Что, если число перед апострофом будет 2000 или 200 вместо 2? Как я могу сделать второй параметр функции mid более гибким с точки зрения количества возвращаемых символов? - person stanigator; 30.05.2009
comment
В таком случае это не должно быть проблемой. Код ищет апостроф и возвращает все символы до него, начиная с 1-го символа. - person shahkalpeshp; 30.05.2009
comment
Спасибо. Я узнал, используя его в любом случае. - person stanigator; 30.05.2009

Предполагая, что числовые данные всегда находятся в начале ячейки, вы можете использовать Regex для поиска любых последовательных чисел в начале строки, останавливаясь, как только он достигает первых нечисловых символов. Вот функция, которая сделает это за вас, надеюсь, она поможет. ^ обозначает начало ячейки, а (\d+) означает один или несколько числовых символов, а .* означает, что за ними следует ноль или более символов. Я предполагаю, что вам нужна только одна строка чисел, поэтому регулярное выражение просто возвращает подсовпадение 0 (первое совпадение).

Function ExtractNumericData(ByVal text As String) As String

Application.ScreenUpdating = False
Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")

RE.Pattern = "^(\d+).*"
RE.Global = True
Set allMatches = RE.Execute(text)
ExtractNumericData = allMatches.Item(0).submatches.Item(0)
Application.ScreenUpdating = True

End Function
person aevanko    schedule 30.06.2011