Excel VBA Countif大写字母
我试图计算包含用户定义范围内所有大写字符的单元格实例的数量,我已经有一些代码可以正确循环并突出显示这些大写单元格,但我很难将该逻辑应用到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
'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
。什么是最后一行?你的拼图中有太多遗漏的部分。如果你的第二个块正在工作,如果你需要跟踪你有多少大写值,为什么不在循环中添加一个计数器呢?