VBA中Formula2R1C1写入TEXTJOIN合并公式报错求助
VBA Formula2R1C1输入合并列公式报错解决建议
问题描述
手动输入可正常运行的合并公式,通过VBA的Formula2R1C1方法输入时触发运行时错误'1004':应用程序定义或对象定义错误。公式功能为将A列值相同的行对应的D列内容合并,相关报错代码如下:
原始报错代码:
Range("O2").Formula2R1C1 = "=IF($A1<>$A2,IFERROR(TEXTJOIN(",",0,$D2:INDEX($D2:$D$11,MATCH(1,--($A2:$A$11<>$A2),0)-1)),TEXTJOIN(",",0,$D2:$D$11)),O1)"
修改后仍报错的代码:
Range("O2").Formula2R1C1 = "=IF($A1<>$A2,IFERROR(TEXTJOIN(""",""",0,$D2:INDEX($D2:$D$11,MATCH(1,--($A2:$A$11<>$A2),0)-1)),TEXTJOIN("""""","""""",0,$D2:$D$11)),O1)"
解决建议
修正字符串转义规则
VBA字符串中的双引号需用两个双引号转义,TEXTJOIN的逗号分隔符在VBA中应写为""","""(即转义后表示","),你之前的转义格式错误导致语法异常。统一使用R1C1引用格式
Formula2R1C1方法要求必须使用R1C1样式引用,不能混用A1格式(如$A1、$D2),这是报错的核心原因。对应转换规则:
$A1→R[-1]C1(当前单元格O2为R2C15,向上1行、第1列)$A2→RC1(当前行第1列)$D2:$D$11→RC4:R11C4(当前行第4列到第11行第4列)O1→R[-1]C15(上一行第15列)
- 修正后的完整代码
Range("O2").Formula2R1C1 = "=IF(R[-1]C1<>RC1,IFERROR(TEXTJOIN("""","""",0,RC4:INDEX(RC4:R11C4,MATCH(1,--(RC1:R11C1<>RC1),0)-1)),TEXTJOIN("""","""",0,RC4:R11C4)),R[-1]C15)"
- 逻辑验证
这段代码保留原公式逻辑:判断当前行A列值是否与上一行不同,不同则合并当前A值对应的所有D列内容,相同则继承上一行O列的合并结果。
内容的提问来源于stack exchange,提问作者Sally Lim
相关产品推荐
相关产品推荐

