如果使用Excel分析一组包含文本的单元格,则可能需要确定包含大写字母的单元格数量,包含小写字母的单元格数量和包含大小写混合的单元格数量。

有两种方法可以完成此任务:使用常规工作表公式,或定义自己的用户定义函数。

如果要评估的文本在A列中(从A1单元格开始),则可以在B1单元格中使用以下公式:

=IF(A1>"",IF(EXACT(UPPER(A1),A1),"Upper", IF(EXACT(LOWER(A1),A1),"Lower","Mixed")),"")

该公式检查以查看A1中是否有任何东西。如果存在,则使用EXACT函数将内容与单元格内容的各种转换进行比较。如果单元格A1为空或单词Upper,Lower或Mixed,该公式将返回一个空字符串。

根据需要将公式向下复制到B列中,然后可以使用以下类型的公式来确定计数:

=COUNTIF(B:B,"Upper")

要查找小写或大小写混合的单元格的数量,请将“大写”替换为“小写”或“混合”。

显然,以这种方式使用公式涉及到在工作表中添加一列。您可以使用另一种公式方法,该方法不涉及以这种方式使用中间列。

考虑以下公式,该公式返回范围A1:A100中仅包含大写字母的单元格数:

=SUMPRODUCT(--(EXACT(A1:A100,UPPER(A1:A100))),--(A1:A100<>""))

此公式的变体可用于返回小写单元格的数量。以下唯一更改的是使用LOWER函数而不是UPPER函数:

=SUMPRODUCT(--(EXACT(A1:A100,LOWER(A1:A100))),--(A1:A100<>""))

要确定包含混合大小写的单元格,您需要结合两个基于SUMPRODUCT的公式:

=SUMPRODUCT(--(NOT(EXACT(A1:A100,UPPER(A1:A100)))),-- (NOT(EXACT(A1:A100,LOWER(A1:A100)))),--(A1:A100<>""))

这些公式有一些缺点,这些缺点在较早的公式中并不明显。首先,如果单元格包含数字值,则这些公式会将单元格视为大写。其次,如果单元格包含错误值,则公式将返回错误。

如果您需要经常进行大小写计数,那么最好创建一个用户定义的函数来为您计数,这可能会更好。可以使用多种方法编写此类函数,但是一般准则如下:

逐步检查范围内的每个单元格确定该单元格是大写,小写还是大小写混合,请增加一些计数器返回值

下面的宏是上述实现方式的一个示例:

Function CountCase(rng As Range, sCase As String) As Long     Dim vValue     Dim lUpper As Long     Dim lMixed As Long     Dim lLower As Long     Dim rCell As Range     lUpper = 0     lLower = 0     lMixed = 0

For Each rCell In rng         If Not IsError(rCell.Value) Then             vValue = rCell.Value             If VarType(vValue) = vbString _                 And Trim(vValue) <> "" Then                 If vValue = UCase(vValue) Then                     lUpper = lUpper + 1                 ElseIf vValue = LCase(vValue) Then                     lLower = lLower + 1                 Else                     lMixed = lMixed + 1                 End If             End If         End If     Next     Select Case UCase(sCase)

Case "U"

CountCase = lUpper         Case "L"

CountCase = lLower         Case "M"

CountCase = lMixed         Case Else             CountCase = CVErr(xlErrValue)

End Select End Function

确定单元格是大写,小写还是混合大小写,显然是此类宏的症结所在。进行这种确定所使用的过程与工作表公式中的过程相同:将单元格的内容与这些内容的大写或小写转换进行比较。在此宏中,将单元格的值(vValue)与使用UCase或LCase函数转换的vValue进行比较。

该函数还忽略了没有意义的单元格。

它会忽略包含数字值,布尔值,错误值,空单元格和仅包含空格的单元格的单元格。如果数值格式设置为文本,则该函数会将该单元格视为大写字母。要使用此用户定义的函数,请在工作表中使用以下公式:

=COUNTCASE(A1:A100, "L")

对于第一个参数,使用要评估的范围。第二个参数是单个字符-L,M或U,表示要返回的计数。如果您对第二个参数使用其他值,则该函数将返回错误。

注意:

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

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

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