使用VBA遍历工作表及区域数组统计子字符串出现次数的问题
问题解决方法
根因分析
你使用的CountIf默认执行完全匹配逻辑,仅当单元格内容和传入的subStr完全一致时才会被计数。你的目标单元格均以Day (#)格式开头、后续存在其他内容,无法命中完全匹配规则,因此统计结果始终为0。
修复方案
根据你的匹配需求选择对应修改方式:
- 需统计子字符串出现在单元格任意位置的次数:在子字符串前后拼接通配符
*subStrCount = subStrCount + Application.WorksheetFunction.CountIf(Rng, "*" & subStr & "*") - 仅需匹配以目标子字符串开头的单元格(和你的场景完全契合):仅拼接后缀通配符,匹配精度更高,避免误命中内容中间出现的子字符串
subStrCount = subStrCount + Application.WorksheetFunction.CountIf(Rng, subStr & "*")
额外注意事项
CountIf默认不区分大小写,如果需要大小写敏感的统计规则,需要遍历区域内每个单元格,通过InStrB等函数逐格判断计数。- 如果目标子字符串本身包含
*、?、~这类通配符,需要在对应字符前加转义符~处理,例如要匹配Day*12的子字符串,需先将子字符串处理为Day~*12再传入。
内容的提问来源于stack exchange,提问作者codeEnthusiast
相关产品推荐
相关产品推荐

