VBA ArrayFormula слишком долго - PullRequest
0 голосов
/ 24 сентября 2019

Я долго пытался вставить формулу массива с помощью 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);""))}

Вот соответствующий код 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

На самом деле этот код не влечет за собой никакой ошибки, а просто заменяет функциюне меняет формулу.

1 Ответ

1 голос
/ 24 сентября 2019

Проблема здесь в том, что части формулы, которые вы пытаетесь передать, выражаются с использованием нотации 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...