VBA宏公式仅生效首行未填充至末行问题求助
VBA宏H列公式仅首行生效的问题解决
我编写了一段VBA宏,用于检查A列客户名称与B列客户编号:当二者拼接后的字符数超过30时,截取客户名称前15位再与编号拼接;否则直接拼接。其中E列的XLOOKUP公式宏可正常填充至末行,但H列的宏仅在首行生效,未应用至下方行,尝试添加.FillDown也未解决问题。
原代码:
Range("E2", Range("C65536").End(xlUp).Offset(0, 2)).FormulaR1C1 = "=IF(XLOOKUP(RC[-3],DB!C[1],DB!C[-2])=0,""NO EMAIL"",XLOOKUP(RC[-3],DB!C[1],DB!C[-2]))" Range("H2", Range("F65536").End(xlUp).Offset(0, 2)).FormulaR1C1 = "=IF(LEN(CONCATENATE(RC[-7],""-"",RC[-6])>30),CONCATENATE(LEFT(RC[-7],15),"-",RC[-6]),CONCATENATE(RC[-7],""-"",RC[-6]))"
问题原因
H列的公式存在语法错误:LEN函数的括号闭合位置错误,把>30写到了LEN的括号内部,导致Excel无法识别正确的条件判断逻辑,只有首行可能因巧合显示结果,下方行无法正常计算。
修正后的代码
' E列XLOOKUP公式填充(原代码正常,保留) Range("E2", Range("C" & Rows.Count).End(xlUp).Offset(0, 2)).FormulaR1C1 = "=IF(XLOOKUP(RC[-3],DB!C[1],DB!C[-2])=0,""NO EMAIL"",XLOOKUP(RC[-3],DB!C[1],DB!C[-2]))" ' H列修正后的公式填充 Range("H2", Range("F" & Rows.Count).End(xlUp).Offset(0, 2)).FormulaR1C1 = "=IF(LEN(CONCATENATE(RC[-7],""-"",RC[-6]))>30,CONCATENATE(LEFT(RC[-7],15),"-",RC[-6]),CONCATENATE(RC[-7],""-"",RC[-6]))"
额外优化建议
- 用
Rows.Count替代固定的65536,适配Excel 2007及以上版本的大行数支持 - 用
&替代CONCATENATE函数,简化公式写法,代码更易读:
Range("H2", Range("F" & Rows.Count).End(xlUp).Offset(0, 2)).FormulaR1C1 = "=IF(LEN(RC[-7]&""-""&RC[-6])>30,LEFT(RC[-7],15)&""-""&RC[-6],RC[-7]&""-""&RC[-6])"
内容的提问来源于stack exchange,提问作者David Lopez
相关产品推荐
相关产品推荐

