VBA匹配Excel含多值单元格时匹配数少于实际值如何解决
问题描述:我正在读取Excel工作表Water的F2:F11区域数据,具体如下:
|SAT|
|SAT|
|SAT|
|SAT|
|M, T, TH, SAT|
|SUN, W|
|SUN, W, F|
|SAT|
|T, F, SUN|
|W|
我使用如下VBA代码匹配周六(SAT):Sub Test() Dim WaterDays As Range Set myWKS = Worksheets("Water") Set WaterDays = myWKS.Range("F2:F11") For Each y In WaterDays vParts = Split(y, ",") For Each dy In vParts If StrComp(dy, "SAT") = 0 Then Debug.Print ("Yes") End If Next dy Next y End Sub运行后仅输出5次Yes,但该区域实际共有6个SAT,请问代码存在什么问题?
问题根源
核心原因是多值单元格分割后的字符串带前导空格,导致精确匹配失败:
当你用Split(y, ",")分割包含多个值的单元格内容时,比如M, T, TH, SAT分割后得到的数组元素为["M", " T", " TH", " SAT"],其中SAT前面带有一个空格。StrComp默认执行严格的二进制比较,会将带空格的" SAT"和纯"SAT"判定为不相等,因此第5行的SAT没有被计数,最终只输出5次Yes。
修复方案
最稳妥的修复方式是在比较前先清除每个分割元素的前后空格,修改判断行即可:
If StrComp(Trim(dy), "SAT") = 0 Then
如果要进一步优化匹配容错,也可以给StrComp添加不区分大小写的参数,避免大小写导致的匹配失败:
If StrComp(Trim(dy), "SAT", vbTextCompare) = 0 Then
内容的提问来源于stack exchange,提问作者Allen
相关产品推荐
相关产品推荐

