Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA阵列公式太长_Excel_Vba - Fatal编程技术网

Excel VBA阵列公式太长

Excel VBA阵列公式太长,excel,vba,Excel,Vba,我已经尝试了很长时间使用vba插入数组公式,但是它太长了,所以我使用replace函数将其拆分。但“替换”并不会相应地改变公式 任何帮助都将不胜感激 这是我最初的工作公式:{=IF($F:$F;聚合(15;6;ROW($C$2:$C$1203)/($C$2:$C$C$1203=$J2);COLUMNS($F$1:F$1));“)”和“&IFERROR(索引($E:$E;聚合(15;6;ROW($C$2:$C$C$1203=$J2);COLUMNS($E$1:E$1));”)”);“)=$F2&$

我已经尝试了很长时间使用vba插入数组公式,但是它太长了,所以我使用replace函数将其拆分。但“替换”并不会相应地改变公式

任何帮助都将不胜感激

这是我最初的工作公式:
{=IF($F:$F;聚合(15;6;ROW($C$2:$C$1203)/($C$2:$C$C$1203=$J2);COLUMNS($F$1:F$1));“)”和“&IFERROR(索引($E:$E;聚合(15;6;ROW($C$2:$C$C$1203=$J2);COLUMNS($E$1:E$1));”)”);“)=$F2&$E2;“Diebe-Person”和“;替代品($E:$selooku;聚合(替代品:$rore)(替代品:替代品)(15;6;行($C$2:$C$1203)/($C$2:$C$1203=$J2);列($E$1:E$1));“”)和“&IFERROR(索引($F:$F;聚合(15;6;行($C$2:$C$1203)/($C$C$2:$C$1203=$J2);列($E$1:E$1));“;”;“ß”;“ss”);“ö”;“oe”);表2!$A:$B;2;假);

以下是相应的VBA代码:

Sub Macro1()

Dim sht As Worksheet


Dim formulapart2 As String

Dim formulapart3 As String

Dim rng As Range

shtName = InputBox("Respective Sheetname:")

Set sht = ThisWorkbook.Sheets(shtName)

formulapart2 = "INDEX(C6,AGGREGATE(15,6,ROW(R2C3:R1203C3)/(R2C3:R1203C3=RC10),COLUMNS(R1C6:R1C[-6])))"

formulapart3 = "INDEX(C5,AGGREGATE(15,6,ROW(R2C3:R1203C3)/(R2C3:R1203C3=RC10),COLUMNS(R1C5:R1C[-7])))"

Set rng = sht.Range("L2:O11")

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),""""))"

rng.Replace """F2""", formulapart2, xlPart

rng.Replace """F3""", formulapart3, xlPart

rng.Replace """F4""", formulapart3, xlPart

rng.Replace """F5""", formulapart3, xlPart


End Sub

实际上,这段代码不包含任何错误,但replace函数不会更改公式。

这里的问题是,您试图传递的公式部分使用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

是否确实需要输入数组?在VBA中,不允许输入长度超过255个字符的数组公式直接在excel中输入公式时不会出现问题-使用定义的名称缩短公式的部分;-尝试缩短公式本身;-(尽可能避免发生错误,避免更糟糕的后果,但这是我的观点。)