VBA ArrayFormula太长

时间:2019-09-23 23:31:40

标签: excel vba

我已经尝试了很长时间使用vba插入数组公式,但是它太长了,因此我使用replace函数将其拆分。但是替换仍然不会相应地更改公式。

任何帮助将不胜感激。

这是我最初的工作公式:WHEN MATCHED AND EXISTS (SELECT SRC.* EXCEPT SELECT TGT.*) THEN UPDATE ...

以下是相应的VBA代码:

{=IF(IFERROR(INDEX($F:$F;AGGREGATE(15;6;ROW($C$2:$C$1203)/($C$2:$C$1203=$J2);COLUMNS($F$1:F$1)));"")&" "&IFERROR(INDEX($E:$E;AGGREGATE(15;6;ROW($C$2:$C$1203)/($C$2:$C$1203=$J2);COLUMNS($E$1:E$1)));"")=$F2&" "&$E2;"dieselbe Person";IFERROR(VLOOKUP(SUBSTITUTE(SUBSTITUTE(IFERROR(INDEX($E:$E;AGGREGATE(15;6;ROW($C$2:$C$1203)/($C$2:$C$1203=$J2);COLUMNS($E$1:E$1)));"")&" "&IFERROR(INDEX($F:$F;AGGREGATE(15;6;ROW($C$2:$C$1203)/($C$2:$C$1203=$J2);COLUMNS($E$1:E$1)));"");"ß";"ss");"ö";"oe");Sheet2!$A:$B;2;FALSE);""))}

实际上,该代码不会带来任何错误,但是replace函数只是不会更改公式。

1 个答案:

答案 0 :(得分:1)

这里的问题是,您要传递的公式部分使用R1C1表示法表示,而已经在范围内的公式可能用A1表示法表示。

我使用“可能”一词,是因为这很可能是您为Excel公式设置的,因此在运行该行之后

rng.FormulaArray = "=IF(IFERROR(""F2"","""")&"" ""&IFERROR(""F3"","""")=RC6&"" ""&RC5,""dieselbe Person"",IFERROR(VLOOKUP(SUBSTITUTE(SUBSTITUTE(IFERROR(""F4"","""")&"" ""&IFERROR(""F5"",""""),""ß"",""ss""),""ö"",""oe""),Sheet2!C1:C2,2,FALSE),""""))"

该公式将转换为A1样式的公式,并且会阻止您的Replace方法按您期望的方式工作。

解决此问题的一种方法是在代码开始时将引用样式设置为R1C1,最后像这样将其恢复为A1:

Application.ReferenceStyle = xlR1C1

' You code

Application.ReferenceStyle = xlA1