Excel VBA Countif大写字母

Excel VBA Countif大写字母,excel,vba,loops,countif,Excel,Vba,Loops,Countif,我试图计算包含用户定义范围内所有大写字符的单元格实例的数量,我已经有一些代码可以正确循环并突出显示这些大写单元格,但我很难将该逻辑应用到VBA的Countif函数中。下面是我得到的代码,但它给出了一个不匹配错误: 'count instances of all caps Dim allcaps As Long allcaps = Application.CountIf(Range(rngCompany.Cells(1, 1), rngCompany.Cells(Lastrow, 1)), UCa

我试图计算包含用户定义范围内所有大写字符的单元格实例的数量,我已经有一些代码可以正确循环并突出显示这些大写单元格,但我很难将该逻辑应用到VBA的Countif函数中。下面是我得到的代码,但它给出了一个不匹配错误:

'count instances of all caps
Dim allcaps As Long
allcaps = Application.CountIf(Range(rngCompany.Cells(1, 1), rngCompany.Cells(Lastrow, 1)), UCase(Range(rngCompany.Cells(1, 1), rngCompany.Cells(Lastrow, 1))))


MsgBox "There are " & allcaps & " uppercase company names to review."
正确突出显示单元格的代码是:

'Highlight all caps company names for review
With ws
    For i = 2 To Lastrow
        ' checks if cells in company name col are uppercase
        If rngCompany.EntireColumn.Cells(i, 1).Value = UCase(rngCompany.EntireColumn.Cells(i, 1).Value) Then
            wbk1.Sheets(1).Rows(i).Interior.ColorIndex = 6 '6: Yellow
        Else
            End If
        
    Next i
End With

有没有办法让countif代码在循环中以类似的方式工作?谢谢。

以下是您的方法:

Function AllCapsCount(Target As Range) As Long
    With Target.Parent
        AllCapsCount = .Evaluate("=SUMPRODUCT(--EXACT(" & Target.Address & ",UPPER(" & Target.Address & ")))")
    End With
End Function

蒂姆的建议是简单地在循环中添加一个计数器,这对我来说是最简单的解决方案,在漫长的一天之后,我忽略了这一点

将来遇到此问题的任何人的代码示例:

AllCapsCount = 0
With ws
    For i = 2 To Lastrow
        ' checks if cells in company name col are uppercase
        If rngCompany.EntireColumn.Cells(i, 1).Value = UCase(rngCompany.EntireColumn.Cells(i, 1).Value) Then
            wbk1.Sheets(1).Rows(i).Interior.ColorIndex = 6 '6: Yellow
        AllCapsCount = AllCapsCount + 1
        Else
            End If
        
    Next i
End With
如果无LCase但无UCase,则突出显示并计数单元格
子测试GetAllCapsRange()
Dim RNG公司As范围
设置rngCompany=范围(“A2:E11”)
rngCompany.Interior.Color=xlNone
Dim rng As范围:设置rng=getAllCapsRange(rng公司)
如果不是,那么rng什么都不是
rng.Interior.Color=vbYellow
将AllCaps变长:AllCaps=rng.Cells.CountLarge
如果AllCaps>1,则
MsgBox“有”&所有上限_
&“要查看的大写公司名称。”
其他的
MsgBox“有1个大写的公司名称要查看。”
如果结束
其他的
MsgBox“没有大写的公司名称可供查看。”
如果结束
端接头
函数getAllCapsRange(rng作为范围)作为范围
如果不是,那么rng什么都不是
调光范围
Dim aRng As范围
暗淡的cel As范围
对于rng.区域内的每个aRng
对于aRng.Cell中的每个cel
如果不是IsError(cel),则
如果含有此类丁醇酶(cel.Value),则
建筑范围试验,cel
如果结束
如果结束
下一个细胞
下一个aRng
如果不是tRng,那就什么都不是了
设置getAllCapsRange=tRng
如果结束
如果结束
端函数
函数将SuCaseButnolCase(ByVal CheckString作为字符串)包含为布尔值
'检查是否有大写字符。
如果StrComp(CheckString、LCase(CheckString)、vbBinaryCompare)为0,则
'检查是否没有小写字符。
如果StrComp(CheckString、UCase(CheckString)、vbBinaryCompare)=0,则
containsUCaseButNoLCase=True
如果结束
如果结束
端函数
子构建范围(ByRef BuiltRange作为范围,AddRange作为范围)
如果不是AddRange,则为Nothing
如果不是BuiltRange,则什么都不是
设置BuiltRange=Union(BuiltRange,AddRange)
其他的
设置BuiltRange=AddRange
如果结束
如果结束
端接头

请包括代码中缺失的部分,例如设置
rngCompany
的位置-您的一些代码片段没有意义
rngCompany.entireclumn.Cells(i,1).Value
-为什么在这里包含
entireclumn
?第二个代码片段中的
With
语句的目的是什么?我没有看到你在那里的任何地方使用
ws
。什么是最后一行?你的拼图中有太多遗漏的部分。如果你的第二个块正在工作,如果你需要跟踪你有多少大写值,为什么不在循环中添加一个计数器呢?