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:

enter image description here

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

вариант:

  1. используйте RegEx в качестве первого шага для удаления всех пробелов
  2. разделить результат первого шага на основе одиночных пробелов
  3. кроме того, ведь вам нужно вернуть другой элемент текста в разных ячейках, чем дополнительный параметр функции будет решена.

это предлагаемая функция:

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

и это снимок экрана, представляющий, как это работает:

enter image description here

важно! при вызове функции в Excel используйте запятую для разделения параметров (вместо представленной двоеточия из-за локально-национальной версии excel я использую).