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 = 2 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 = 1 To UBound(vaArray)

str = str & " " & vaArray(i)

Next i

Title = Trim(str)

End Function

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

=Title(A1)

如果在尝试运行此宏时遇到错误,则很有可能正在使用Excel97。直到Excel 2000才添加了Split函数,因此Excel 97用户将收到错误消息。如果这样做,则添加下面的宏,该宏模仿Split函数的功能。

Function Split(Raw As String, Delim As String) As Variant     Dim vAry() As String     Dim sTemp As String     Dim J As Integer     Dim Indx As Integer

Indx = 0     sTemp = Raw     J = InStr(sTemp, Delim)

While J > 0         Indx = Indx + 1         ReDim Preserve vAry(1 To Indx)

vAry(Indx) = Trim(Left(sTemp, J))

sTemp = Trim(Mid(sTemp, J, Len(sTemp)))

J = InStr(sTemp, Delim)

Wend     Indx = Indx + 1     ReDim Preserve vAry(1 To Indx)

vAry(Indx) = Trim(sTemp)

Split = vAry()

End Function

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

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

注意:

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

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

本技巧(10559)适用于Microsoft Excel 97、2000、2002和2003。您可以在以下位置找到适用于Excel功能区界面(Excel 2007和更高版本)的本技巧的版本:

链接:/ excelribbon-Making_PROPER_Skip_Certain_Words [正确跳过某些单词]。