VBA разделить строку пробелами
Я хочу функцию в excel, которую я могу вызвать и передать ячейку. Ввод:
Firstname Lastname email@mail.com
Firstname midname Lastname email@mail.com
количество пробелов между ними являются случайными. Выход должен быть массив. Массив может иметь любую длину, так как я не знаю, как выглядят строки. Выход должен быть:
Firstname, Lastname, email@mail.com
Firstname, midname, Lastname, email@mail.com
я вызову функцию из одной ячейки, например =MySplitFunction(A1)
, и это должно поместить Firstname в A1, Lastname в B1 и email@mail.com в C1. Я создал новый модуль и попробовал следующий код:
Function MySplitFunction(s As String) As String()
MySplitFunction = Split(s, " ")
End Function
что дает мне выход
Firstname
как заставить его вернуть весь массив? Можно ли даже написать функцию в одной ячейке, которая поместит материал в ячейки рядом с ней?
EDIT:
2 ответов
- введите входные данные в A1
- выберите диапазон B1:D1
- введите формулу
=MySplitFunction(A1)
- сделайте это формулой массива, нажав CTRL + SHIFT + ENTER вместо просто ENTER.
чтобы удалить несколько пробелов, вы можете изменить свой код следующим образом (не очень эффективно, но работает):
Function MySplitFunction(s As String) As String()
Dim temp As String
Do
temp = s
s = Replace(s, " ", " ") 'remove multiple white spaces
Loop Until temp = s
MySplitFunction = Split(Trim(s), " ") 'trim to remove starting/trailing space
End Function
вариант:
- используйте RegEx в качестве первого шага для удаления всех пробелов
- разделить результат первого шага на основе одиночных пробелов
- кроме того, ведь вам нужно вернуть другой элемент текста в разных ячейках, чем дополнительный параметр функции будет решена.
это предлагаемая функция:
Public Function MySplitFunction(sMark As String, nTh As Integer) As String
On Error GoTo EH
'regexp declaration
Dim objRegExp As Object
Set objRegExp = CreateObject("vbscript.regexp")
Dim tmpTXT As String
Dim tmpArr As Variant
With objRegExp
.Global = True
.Pattern = "\s+"
tmpTXT = .Replace(sMark, " ")
End With
tmpArr = Split(tmpTXT, " ")
MySplitFunction = tmpArr(nTh - 1)
Exit Function
EH:
MySplitFunction = ""
End Function
и это снимок экрана, представляющий, как это работает:
важно! при вызове функции в Excel используйте запятую для разделения параметров (вместо представленной двоеточия из-за локально-национальной версии excel я использую).