加里(Gary)有一个工作表,其中包含他需要解析为组件元素的非结构化文本字符串。有时他需要搜索文本类型而不是特定字符。例如,他可能想查找单元格中任何粗体字符(或任何斜体字符)的第一个,第N个或最后一个出现。

Excel中没有内部功能或工具可以完成此任务。

常规的“查找和替换”功能会返回用于格式化的匹配项,但不会返回这些匹配项发生的位置。要具体说明您要查找的内容,您需要使用宏。如果将宏实现为用户定义的函数,则可以将定位信息重新返回到工作表中。

下面的宏接受一个范围(打算是一个特定的单元格),指示您是否要使用粗体或斜体(或两者)的指示符,以及该格式的出现。

Function FindNth(r As Range, sType As String, N As Integer) As Integer     Dim J As Integer     Dim iCount As Integer     Dim sStyle As String          If r.Count = 1 Then         FindNth = 0         iCount = 0         For J = 1 To Len(r.Text)

sStyle = r.Characters(J, 1).Font.FontStyle             If LCase(sStyle) = LCase(sType) Then                 iCount = iCount + 1                 If N = 0 Then                     FindNth = J                 Else                     If N = iCount Then                         FindNth = J                         Exit For                     End If                 End If             End If         Next J     Else         FindNth = -1     End If End Function

为了使用该宏,请在工作表中使用以下公式之一:

=FindNth(A1, "bold", 2)

=FindNth(A1, "italic", 3)

=FindNth(A1, "bold italic", 1)

在每种情况下,第三个参数都指定了要查找的给定格式出现的位置。该函数返回该事件在单元格中的字符位置。如果没有这种情况,则返回0。如果在函数的第一个参数中指定多个单元格,则它将返回-1。如果指定出现的次数为0,则返回指定格式的最后一次出现的字符位置。

注意:

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

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

本提示(13402)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。