#excel #vba
Вопрос:
Следующее разделит выделенное текстовое значение разделителем «1234».
Sub SPLIT()
Dim x As Variant
x = Split(Selection, "1234")
With ActiveSheet
For ii = LBound(x) To UBound(x)
.Cells(1 ii, 1).Value = x(ii)
Next ii
End With
End Sub
Тем не менее, я хотел бы разделить текст на разделитель»####», где # — любое заданное число.
Также должно быть пустое пространство впереди и в конце разделителя.
Я предполагаю, что здесь требуется регулярное выражение, но я не знаю, как это сделать в данном случае.
Пример:
блабла 1234 блабла блабла бла 7548, блабла 7854 бла 154 блабла
Желаемый результат:
блабла
1234 блабла блабла бла 7548, блабла
7854 бла 154 блабла
Комментарии:
1. разделите на
" "
, и если элемент не числовой с len 4, то новая строка.2.
d{4}
это шаблон для 4 чисел. Хотя подход Warcupine в этом не нуждается.3. @SJR, потому что за номером стоит»,», и он хочет разделить его, только если перед номером и за ним есть пробелы.
Ответ №1:
Вы можете обойти это с помощью регулярных выражений. Вот пример:
Sub Test()
Dim Str As String: Str = "blabla 1234 blabla blablabla bla 7548, blablabl 7854 bla 154 blablabla"
Dim newStr As String
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = " (d{4} )"
newStr = .Replace(Str, Chr(10) amp; "$1")
End With
Debug.Print newStr
End Sub
Кроме того, посмотрите онлайн-демонстрацию, где шаблон будет означать:
(
— Открыть 1-ю группу захвата:d{4}
— Четыре цифры в диапазоне от 0 до 9.)
— Закрыть 1-ю группу захвата.
Теперь мы можем просто заменить шаблон символом новой строки, за которым следует обратная ссылка на все, что мы захватили в нашей 1-й группе захвата.
Наш конечный результат будет выглядеть так:
Редактировать:
Если ваша цель состояла в том, чтобы разбиться на разные элементы, вы можете попробовать:
Sub Test()
Dim Str As String: Str = "blabla 1234 blabla blablabla bla 7548, blablabl 7854 bla 154 blablabla"
Dim newStr() As String
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = " (d{4} )"
newStr = Split(.Replace(Str, "|$1"), "|")
End With
End Sub
Ответ №2:
Это должно сработать. Я помещаю вашу строку в A1 и выводю в B1:B3
Dim mystr As String
Dim strarr As Variant
With Sheet1
mystr = .Cells(1, 1).Value
strarr = Split(mystr, " ")
Dim ele As Variant
Dim outputrange As Range
Set outputrange = .Cells(1, 2)
For Each ele In strarr
If Len(ele) = 4 And IsNumeric(ele) Then
Set outputrange = outputrange.Offset(1)
End If
If outputrange.Value = "" Then
outputrange.Value = ele
Else
outputrange.Value = outputrange.Value amp; " " amp; ele
End If
Next ele
End With