Phil有一系列包含文本的单元格。一些文本太长,因此他需要将其拆分为多个单元格。例如,如果一个单元格包含“棕色狐狸”,并且他需要拆分文本以使任何部分都不能超过12个字符,那么Phil可以轻松地做到这一点。但是他想确保分割是在第12个字符之前的空格处进行的,而不是在第12个字符之前的位置进行。菲尔对如何做到这一点感到困惑。

您可能会认为您可以在Excel中使用“文本到列”工具,但它并不适合该工作。如果将工具设置为基于分隔符(例如空格)拆分文本,则最终在每个单元格中只有一个单词。如果将工具设置为将文本拆分为“固定宽度”,则它不会在空格处拆分单词。它只是确保每个块都是您指定的大小。

您可以使用公式来获得所需的结果,但是这样做会导致公式非常长。例如,如果太长的文本在单元格A3中,则可以使用以下公式在第12个字符之前的空格处拆分该文本的第一块:

=IF(LEN($A3)>12,IF(ISERROR(FIND(" ",MID($A3,12,1)

&MID($A3,11,1)&MID($A3,10,1)&MID($A3,9,1)&MID($A3,8,1)

&MID($A3,7,1)&MID($A3,6,1)&MID($A3,5,1)&MID($A3,4,1)

&MID($A3,3,1)&MID($A3,2,1))),MID($A3,1,1),MID($A3,1, 13-FIND(" ",MID($A3,12,1)&MID($A3,11,1)&MID($A3,10,1)

&MID($A3,9,1)&MID($A3,8,1)&MID($A3,7,1)&MID($A3,6,1)

&MID($A3,5,1)&MID($A3,4,1)&MID($A3,3,1)&MID($A3,2,1))))

,RIGHT($A3,LEN($A3)))

请记住,这只是一个公式,只是为了获得第一个块。获取第二,第三,第四和更高块的公式甚至更长。显然,使用公式可能不是最佳方法。

留下使用宏。宏可以检查文本字符串,并轻松将其切成所需长度的片段。考虑以下用户定义的函数:

Function SplitMe(sSentence As String, iPos As Integer, Optional iLen = 12)

Dim sSegments() As String     Dim iSegments As Integer     Dim sRest As String     Dim sTemp As String     Dim iSpace As Integer     Dim J As Integer

iSegments = 0     sRest = sSentence     sTemp = Left(sRest, iLen + 1)

Do Until Len(sTemp) <= iLen         iSpace = 0         For J = Len(sTemp) To 1 Step -1             If Mid(sTemp, J, 1) = " " And iSpace = 0 Then iSpace = J         Next J         If iSpace > 0 Then             sTemp = Left(sRest, iSpace - 1)

sRest = Mid(sRest, iSpace + 1)

Else             sRest = Mid(sRest, Len(sTemp) + 1)

End If         iSegments = iSegments + 1         ReDim Preserve sSegments(1 To iSegments)

sSegments(iSegments) = sTemp         sTemp = Left(sRest, iLen + 1)

Loop     iSegments = iSegments + 1     ReDim Preserve sSegments(1 To iSegments)

sSegments(iSegments) = sTemp     If iPos <= iSegments Then         SplitMe = sSegments(iPos)

Else         SplitMe = ""

End If End Function

该函数采用两个或三个参数。第一个参数是要分割的字符串,第二个参数是您要从字符串中选择哪个块,第三个(和可选)参数是每个块的所需长度。如果不使用第三个参数,则该函数假定您希望每个块最多为12个字符。例如,假设文本在单元格A5中,则下面的代码将从文本中返回第二个块,其中每个块的长度最多为12个字符:

=SplitMe(A5,2)

如果文本字符串中的每个单词的长度不超过每个块的指定目标长度,则该函数将返回良好的结果。如果是这样,那么您会得到一些奇怪的结果,包括一些不包含完整单词的块。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3899)适用于Microsoft Excel 97、2000、2002和2003。