如何在第n个单词后将单元格中的字符串拆分为行

时间:2019-06-06 23:31:47

标签: excel vba formula user-defined-functions

如何在第n个单词后分割句子

大家好, 我想在单元格B2中有一个长字符串,我想根据在单元格D2中输入的可变单词数将其分成几行。

我在“ B2”中的字符串=“一二三四有五六七七八有九十一十一十二一十三十四十四一十五十七十七十八十九…… “

我在“ D2”中的变量是4

第一行/行的结果是“一二三四”

到目前为止,我已经在“ F3”中使用了此公式:

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

第一行/行

我需要继续分割字符串,以便最终结果为:

  

一二三四

     

五六七八

     

9点11点12点

     

十三点十四分十五秒

     

十六十七十七十八

     

十九个……

上面每行的相应行中的每一行。

我不在乎解决方案公式UDF或sub的类型。非常感谢您的帮助。

 split a string after every nth word variable

enter image description here

使用戴维斯的UDF后

1 个答案:

答案 0 :(得分:4)

这是可以为您完成此操作的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 (字符串):用于拆分的整个字符串
  • StartPos (长整数):您要以第一个单词开头的数字。在您的情况下,1将以一个
  • 开头
  • NumWords (长):总共{包括StartPos中的一个词,将包含在函数的输出中。

在示例中显示的用于第一行的公式如下:

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

-或-

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

这将导致以下输出:

enter image description here