Feroz在A列中具有一系列文本值。这些值在每个单元格中用两种不同的字体颜色设置格式。 (文本的第一部分是一种颜色,第二部分是另一种颜色。)他想将这些文本值拆分为B和C列,这样,具有第一种颜色的任何内容都在B列中,而具有第二种颜色的任何内容都是他指出“文本到列”工具无法处理此问题,因此他想知道是否可以做到这一点。

是的,可以做到。一种方法是使用Excel的内置Flash Fill功能。 (此工具仅在Excel 2013或更高版本中可用。)假设您从看起来像这样的数据开始:

(请参见图1。)

image

图1.您的彩色数据。

请注意,我的测试数据在E列中包含A列中数据的某些特征。此时,您需要做的就是为Flash Fill提供可以使用的功能。为此,我手动将第2行和第3行中的文本分开,如下所示:(参见图2)。

image

图2.设置示例。

重要的是,您在B2:C3中创建的示例必须准确无误-它们应包括任何颜色的内容(包括前导或尾随空格),并且拼写和大小写均应正确。

现在选择单元格B4,然后按Ctrl + E。这使Flash Fill生效,您将看到文本出现在B列的其余部分。在C列中执行相同的操作-选择单元格C4,然后按Ctrl + E。您的结果应类似于以下内容:(请参见图3。)

image

图3.使用Flash之后,在两栏中填写。

我应该注意,您使用Flash Fill的成功将在很大程度上取决于A列中数据的特性。在大多数情况下,它将完成大部分工作,并且可能会极大地完成任务。在某些奇怪的情况下,Flash Fill无法识别应如何拆分数据。您可以在上图中看到其中A7,A9和A11单元未正确拉开的情况。您需要仔细检查结果以确保它们有意义。

如果Flash Fill不适用于您,那么您将需要创建一个宏来完成这项工作。可能会产生一个宏,该宏将对A列中的所有单元格起作用并将文本拖入B列和C列中(就像Feroz所需要的一样),但是创建用户定义的函数将返回任何内容更加灵活需要从单元格。这是一个示例:

Function SplitColors(r As Range, Optional iWanted As Integer = 1) _   As String     Dim sTemp As String     Dim J As Integer     Dim K As Integer     Dim iColors(9) As Integer

sTemp = ""

If r.Cells.Count = 1 Then         For J = 1 To 9             iColors(J) = 0         Next J

' Determine where colors change         ' Remember there will always be at least one color         K = 1         iColors(K) = 1         For J = 2 To Len(r.Text)

If r.Characters(J,1).Font.Color <> _               r.Characters(J-1,1).Font.Color Then                 K = K + 1                 iColors(K) = J             End If         Next J

' Check if wanted color is less than total colors         If iWanted <= K Then             J = iColors(iWanted + 1)

If J = 0 Then J = Len(r.Text) + 1             J = J - iColors(iWanted)

sTemp = Mid(r.Text, iColors(iWanted), J)

End If     End If     SplitColors = sTemp End Function

SplitColors函数需要一个参数(要作用的范围)

第二个可选参数(该颜色从您想要的范围开始)。

该函数首先检查是否传递了单个单元格。如果是这样,那么它将确定该单元格中有多少种颜色以及发生颜色更改的字符编号。然后,如果所需的颜色(传递给可选的第二个参数)小于单元格中的颜色数量,则返回使用该颜色的字符。

因此,例如,如果要使用单元格A2中的第一种颜色返回单元格,则可以在工作表中使用以下任一方法:

=SplitColors(A2, 1)

=SplitColors(A2)

第二个调用起作用,因为第二个参数是可选的。如果您不包括它,则该功能假定您要使用第一种颜色。如果要使用单元格中的第二种颜色返回文本,则可以执行以下操作:

=SplitColors(A2, 2)

在您要检出的任何单元格中,SplitColors函数最多可使用9种颜色。如果您将第二个参数指定为9或更大,则会导致错误。

注意:

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

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

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

本技巧(13605)适用于Microsoft Excel 2013、2016、2019和Office 365中的Excel。