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

How do you split a string in a cell after every nth word into rows

如何在每第 n 个单词后拆分一个句子

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

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

我在“D2”中的变量是 4

我第一个 line/row 的结果是“一二三四”

到目前为止,我在“F3”中使用了这个公式:

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

第一个line/row

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

One two three four

five six seven eight

nine ten eleven twelve

thirteen fourteen fifteen

sixteen seventeen eighteen

nineteen … …

上面的每一行都在其各自的行中。

我不介意求解公式 UDF 或 sub 的类型。非常感谢您的帮助。

使用戴维斯的 UDF 之后

这是一个可以为您完成此操作的 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

这会将由 space 分隔的每个单词放入一个单词数组中。它将遍历数组以达到最大大小(NumWords 参数),并输出字符串。

这个 UDF 需要 3 个参数:

  • inputStr (String):用于拆分的整个字符串
  • StartPos (Long): 您要开始的第一个单词的编号。在您的情况下,1 将以 One
  • 这个词开头
  • NumWords (Long):要包含在函数输出中的单词总数,包括来自 StartPos 的单词。

您将在示例中显示的第一行使用的公式如下所示:

=SplitOnNth($B, 1, 4)

- 或 -

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

这将导致以下输出: