Excel 如何将单元格中每N个单词后的字符串拆分为行
你如何在每N个单词后拆分一个句子 大家好,, 在单元格B2中有一个长字符串,我想根据单元格D2中输入的可变字数将其拆分为行 <我的字符串在“B2”=“12345678910 111213141516171819……” " 我在“D2”中的变量是4 我第一行的结果是“一二三四” 到目前为止,我在“F3”中使用了这个公式: 第一行 我需要继续拆分字符串,以便最终结果为: 一二三四 五六七八 九一一一二 十三一四一五 161718 十九 上述结果行中的每一行 我不介意UDF或sub解决方案的类型。非常感谢您的帮助Excel 如何将单元格中每N个单词后的字符串拆分为行,excel,vba,formula,user-defined-functions,Excel,Vba,Formula,User Defined Functions,你如何在每N个单词后拆分一个句子 大家好,, 在单元格B2中有一个长字符串,我想根据单元格D2中输入的可变字数将其拆分为行
在使用Davis的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
这会将每个由空格分隔的单词放入一个单词数组中。它将在数组中循环以达到最大大小(NumWords
参数),并输出字符串
此UDF需要3个参数:
(字符串):用于拆分的整个字符串inputStr
(Long):要以开头的第一个单词的编号。在您的情况下,StartPos
将以单词One1
(Long):要包含在函数输出中的总字数,包括来自NumWords
的字数StartPos
=SplitOnNth($B$2, 1, 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
(Long):要以开头的第一个单词的编号。在您的情况下,StartPos
将以单词One1
(Long):要包含在函数输出中的总字数,包括来自NumWords
的字数StartPos
=SplitOnNth($B$2, 1, 4)
-或-
这将导致以下输出:
非常感谢您的快速回复。UDF工作得很好,除了最后一行,剩下的用于拆分的总数少于4。我得到了价值!在我的第一篇博文之后,我对代码做了一些调整,而不是17个字,17个字是字符串中的最后一个字。你可能复制了旧的。您正在使用的文件是否包含行
,如果i>Ubound(arr),则退出以获取
?这条线就是为了这个目的而设计的。我的错误是我没有意识到这一变化。UDF运作完美。非常感谢,5星x2。使用相同的自定义项可以忽略括号之间的单词计数,但仍将它们打印在行中。所以如果我的字符串=“1234(1)5678910(2)111213141516171819(3)”;结果应与Davis的解决方案完全相同,每行/每行4个单词,如果有括号,则应将其作为额外内容包括在内。结果应该是:ROW1:1234 ROW2:(1)5678 ROW3:910(2)1112 --- ROW5:(3)十七(4),非常感谢您的快速响应。UDF工作得很好,除了最后一行,剩下的用于拆分的总数少于4。我得到了价值!在我的第一篇博文之后,我对代码做了一些调整,而不是17个字,17个字是字符串中的最后一个字。你可能复制了旧的。您正在使用的文件是否包含行,如果i>Ubound(arr),则退出以获取
?这条线就是为了这个目的而设计的。我的错误是我没有意识到这一变化。UDF运作完美。非常感谢,5星x2。使用相同的自定义项可以忽略括号之间的单词计数,但仍将它们打印在行中。所以如果我的字符串=“1234(1)5678910(2)111213141516171819(3)”;结果应与Davis的解决方案完全相同,每行/每行4个单词,如果有括号,则应将其作为额外内容包括在内。结果应该是:ROW1:1234 ROW2:(1)5678 ROW3:910(2)1112 --- ROW5:(3)十七(4)