与许多人一样,柯克将信息复制到源自其他地方的Excel工作表中。柯克通常复制的信息全部用大写字母表示,他想将其转换为Excel所称的“适当大小写”(仅每个单词的第一个字母大写)。问题是,进行转换的PROPER工作表函数没有注意其大写的单词。因此,像“ a”,“ an”,“ in”,“ the”,“ with”和“ with”等词都具有首位上限。柯克不希望这些词(也许还有其他)大写。

有几种方法可以解决此问题。一种是使用相当长的公式进行转换:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( SUBSTITUTE(SUBSTITUTE(PROPER($B$13);" A ";" a "); " An ";" an ");" In ";" in ");" And ";" and "); " The ";" the ");" With ";" with ")

记住,这都是一个公式。它进行大小写转换,但随后用所需的小写单词替换(a,an,in和the,with)。尽管这相对容易,但是随着您增加应进行替换的单词数量,公式的实用性将受到限制。

也许更好的方法是使用用户定义的函数宏为您执行大小写转换。以下函数检查不应该有首字母大写的一些常用单词,以确保它们是小写的。

Function MyProper(str As String)

Dim vExclude     Dim i As Integer     vExclude = Array("a", "an", "in", "and", _       "the", "with", "is", "at")



Application.Volatile     str = StrConv(str, vbProperCase)

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

str = Application.WorksheetFunction. _           Substitute(str, " " & _           StrConv(vExclude(i), vbProperCase) _           & " ", " " & vExclude(i) & " ")

Next     MyProper = str End Function

可以将单词添加到数组中,并且代码自动感测添加的内容并检查那些添加的单词。还要注意,代码在执行检查时会在数组中的每个单词前后添加一个空格。这样一来,您就无需修改部分单词(例如“ and”位于“ stand”之内)或句子开头的单词的代码。您可以通过以下方式在工作表中使用该函数:

=MyProper(B7)

此用法返回修改后的文本,而无需调整B7中的原始文本。

如果愿意,可以使用从工作簿中的命名范围获取其单词列表的函数。以下函数使用一系列名为MyList的单元格,每个单元格只有一个单词。假定此列表位于名为WordList的工作表中。

Function ProperSpecial(cX As Range)

' rng = target Cell

Dim c As Range     Dim sTemp As String

sTemp = Application.WorksheetFunction.Proper(cX.Value)

For Each c In Worksheets("WordList").Range("MyList")

sTemp = Application.WorksheetFunction.Substitute( _           sTemp, Application.WorksheetFunction.Proper( _           " " & c.Value & " "), (" " & c.Value & " "))

Next c

ProperSpecial = sTemp End Function

注意:

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

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

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