Terry一直使用PROPER工作表功能来更改工作表中文本的大小写。他想知道是否有一种方法来指示该函数忽略某些单词,以使它们不会以大写字母开头。对于他来说,使用正确的语言后必须返回并将诸如“ the”或“ an”之类的单词全部改为小写字母并不稀奇。如果PROPER可以跳过这些单词的自动更改,那将是一个很大的帮助。

一种解决方法是将SUBSTITUTE工作表功能与PROPER功能结合使用。例如,如果要查找单词“ The”和“ the”的实例,则可以使用以下内容:

=SUBSTITUTE(PROPER(A1)," The "," the ")

请注意在搜索和替换之前和之后的空格。这样可以确保仅修改完整的单词。它还确保在单元格值的开头或结尾处不进行任何更改。

如果要搜索需要替换的其他单词,则只需在公式中增加SUBSTITUTE的实例数:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(PROPER(A1)," The ", " the ")," An "," an ")," And "," and ")

如果您有很多要排除在修改范围之外的单词,这显然会有些尴尬。在这种情况下,您将需要使用宏。以下作为用户定义函数编写的宏可用于将单元格中的所有单词转换为首字母大写(就像PROPER一样),但请确保某些定义的单词为小写。

Function Title(ByVal ref As Range) As String     Dim vaArray As Variant     Dim c As String     Dim i As Integer     Dim J As Integer     Dim vaLCase As Variant     Dim str As String

' Array contains terms that should be lower case     vaLCase = Array("a", "an", "and", "in", "is", _       "of", "or", "the", "to", "with")



c = StrConv(ref, 3)

'split the words into an array     vaArray = Split(c, " ")

For i = (LBound(vaArray)+1) To UBound(vaArray)

For J = LBound(vaLCase) To UBound(vaLCase)

' compare each word in the cell against the             ' list of words to remain lowercase. If the             ' Upper versions match then replace the             ' cell word with the lowercase version.

If UCase(vaArray(i)) = UCase(vaLCase(J)) Then                 vaArray(i) = vaLCase(J)

End If         Next J     Next i

' rebuild the sentence     str = ""

For i = LBound(vaArray) To UBound(vaArray)

str = str & " " & vaArray(i)

Next i

Title = Trim(str)

End Function

要使用该宏,您需要做的就是在工作表中使用以下内容:

=Title(A1)

您还可以在此站点上找到实现所需转换的其他方法:

http://dmcritchie.mvps.org/excel/proper.htm

注意:

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

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

本技巧(10560)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: