Как разделить строку в ячейке после каждого n-го слова на строки? - PullRequest
1 голос
/ 07 июня 2019

Как разделить предложение после каждого n-го слова

Привет всем, У меня есть длинная строка в ячейке B2, которую я хочу разбить на строки на основе переменного количества слов, введенного в ячейку D2.

Моя строка в "B2" = "Один два три четыре пять шесть семь восемь девять десять одиннадцать двенадцать тринадцать четырнадцать пятнадцать шестнадцать семнадцать восемнадцать девятнадцать…… «

Моя переменная в "D2" равна 4

Мой результат для первой строки / строки «Один два три четыре»

До сих пор я использовал эту формулу в "F3":

=LEFT($B$2,FIND("*",SUBSTITUTE($B$2," ","*",$D$2))-1)

для первой строки / строки

Мне нужно продолжить разбиение строки, чтобы конечный результат был:

Один два три четыре

пять шесть семь восемь

девять десять одиннадцать двенадцать

тринадцать четырнадцать пятнадцать

шестнадцать семнадцать восемнадцать

девятнадцать……

каждая из приведенных выше строк в соответствующем ряду.

Я не против типа формулы решения UDF или sub. Ваша помощь очень ценится.

split a string after every nth word variable

enter image description here

После использования UDF Дэвиса

1 Ответ

4 голосов
/ 07 июня 2019

Вот UDF, который сделает это за вас.

Public Function SplitOnNth(ByVal inputStr$, ByVal StartPos&, ByVal NumWords&) As String

    Dim arr() As String, i As Long, newArr() As String
    arr = Split(inputStr)
    ReDim newArr(NumWords - 1)

    'Arrays are zero-based, but your string isn't. Subtract 1
    For i = StartPos - 1 To StartPos + NumWords - 2
        If i > UBound(arr) Then Exit For    'Exit if you loop past the last word in string
        newArr(i - StartPos + 1) = arr(i)
    Next

    SplitOnNth = Join(newArr, " ")

End Function

Это помещает каждое слово, которое разделено пробелом, в массив слов. Он будет перебирать массив, чтобы достичь максимального размера (аргумент NumWords), и выводить строку.

Для этого UDF требуется 3 аргумента:

  • inputStr (String) : вся строка, используемая для вашего сплита
  • StartPos (Long) : номер первого слова, с которого вы хотите начать. В вашем случае 1 будет начинаться со слова One
  • NumWords (Long) : общее количество слов, включая слово из StartPos, для включения в вывод вашей функции.

Формула, которую вы используете для своей первой строки, которую вы показываете в своем примере, будет выглядеть так:

=SplitOnNth($B$2, 1, 4)

- ИЛИ -

=SplitOnNth($B$2, $E3 * $D$2 - $D$2 + 1, $D$2)

Что приведет к следующему выводу:

enter image description here

...