使用Evaluate函数批量计算单元格长度结果异常求助
解决Evaluate使用Len函数返回固定值的问题
你的问题出在代码逻辑上:Len(rng.Offset(0, -14).Address)会先计算出目标区域的地址字符串(比如$E$2:$E$7)的长度,这个固定值是9,Evaluate返回的就是这个长度,所以整个S2:S7都被填充成9,根本没去计算E列单元格内容的长度。
给你两种正确的写法:
方法一:拼接A1样式公式字符串
Sub Evaluate_Test() Dim rng As Range Set rng = Range("S2:S7") ' 构造对整个E列目标区域计算Len的公式字符串 rng.Value = Evaluate("LEN(" & rng.Offset(0, -14).Address & ")") End Sub
这样Evaluate会对$E$2:$E$7区域的每个单元格单独计算内容长度,返回的数组会自动对应填充到S2:S7。
方法二:使用R1C1相对引用
Sub Evaluate_Test() Dim rng As Range Set rng = Range("S2:S7") ' RC[-14]表示当前行向左偏移14列的单元格(也就是对应行的E列) rng.Value = Evaluate("LEN(RC[-14])") End Sub
这种写法更灵活,不用计算偏移后的地址,Evaluate会自动适配每个单元格的位置,计算对应E列单元格的内容长度。
原来的Range("S2:S7").Formula = "=LEN(E2)"能正常工作,是因为Excel会自动把每个单元格的公式里的E2转换成E3、E4这类相对引用,而Evaluate需要你明确指定要处理的是区域内的每个单元格,不能直接去计算地址字符串的长度。
内容的提问来源于stack exchange,提问作者Peace
相关产品推荐
相关产品推荐

