弗兰克需要每天将4,000-5,000个名称从大写转换为大写。 PROPER功能为他提供了可通过的结果,仍然需要手动检查和编辑以应对首字母缩略词等不应该隐瞒的结果。弗兰克(Frank)的想法是,他可能需要该函数包含针对某种例外列表的查找,因此他想知道Excel中是否具有这种用于大小写转换的功能。

处理此问题的最佳方法取决于您开始使用的数据。例如,假设以下是源数据中两个单元格的值:

Big John's Mining, LLC USA

如果您的例外是不想更改LLC的大小写,则需要一种方法来查看每个单元格的各个部分。如果您的例外是您不希望改变美国的情况,那么您需要一种可以评估每个单元格整体内容的方法。

处理第二种类型的数据要比处理第二种类型的数据容易,因此让我们先来看一下。以下公式依赖于工作簿中某处的例外列表。该例外列表需要使用名称_Exceptions_设置为命名范围。

如果您的原始数据在A列中,则可以将该公式放入单元格B1中,然后根据需要将其向下复制:

=IFERROR(VLOOKUP(A1,Exceptions,1,0),PROPER(A1))

任何与您的“例外”表中的任何内容完全匹配的单元格最终看起来都将与该异常完全相同,而与所有不完全匹配的单元格最终都将对其应用“适当”。

至于第一种数据类型(您需要在每个单元格内部查找异常),最好依靠宏。以下是您可以用作起点的示例。

Function MyProper(ByVal r As Range) As String     Dim vExceptions As Variant     Dim vReplacements As Variant     Dim vWords As Variant     Dim iRaw As String     Dim J As Integer     Dim K As Integer     Dim sTemp As String

' Exceptions array     vExceptions = Array("USA", "PhD", "LLC", "and", _       "Kentucky", "D.C.")



' Replacements array     vReplacements = Array("USA", "PhD", "LLC", "and", _       "KY", "DC")



' Convert the text to Proper case and store in a string     iRaw = StrConv(r, 3)

' Split the words into an array     vWords = Split(iRaw, " ")

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

For K = LBound(vExceptions) To UBound(vExceptions)

If UCase(vWords(J)) = UCase(vExceptions(K)) Then                 vWords(J) = vReplacements(K)

End If         Next K     Next J

' Rebuild the cell contents     sTemp = ""

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

sTemp = sTemp & " " & vWords(J)

Next J

MyProper = Trim(sTemp)

End Function

这是用户定义的函数,因此您可以使用以下代码对源数据进行转换:

=MyProper(A1)

宏的速度取决于两件事:工作表中宏的使用次数(需要修改的单词数)以及宏中要检查的异常数量。在检查了4,000-5,000个单词和大约十几个异常的情况下,宏应该仍然可以足够快地工作,以便可以接受。 (肯定比手工检查要快!)

该函数依赖于两个数组,vException和vReplacements。它使用“拆分”功能将单元格内容分解为vWords数组。 (执行Split函数后,vWords数组的每个元素将包含一个单词,由空格的出现来定义。)然后将vWords数组的每个元素与vExceptions数组的每个元素进行比较。如果它们匹配(或更恰当地,如果它们每个的大写版本都匹配),则使用vReplacements数组的相应元素代替原始单词。这种方法的另一个好处是允许您替换首字母缩写词,就像用KY替代肯塔基州和DC替代DC一样。

请记住,我提到过此宏只是一个很好的起点。

显然,您将需要对其进行修改以反映您的例外和替换清单。此外,您需要了解,如果原始数据中存在标点符号,则该标点符号将被视为Split功能展开的“单词”的一部分。例如,如果原始数据具有“ Davis,LLC,Stanton”之类的内容,则逗号被视为其后面单词的一部分。 (请记住,拆分是在空格处进行的。)因此,由于vExceptions数组中的“ LLC”与vWord中的“ LLC”不匹配,因此结果中将以“ Davis,Llc,Stanton”结尾数组。

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

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