excel - VBA ArrayFormula 太长
问题描述
我一直在尝试使用 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
实际上这段代码不会产生任何错误,但替换函数不会改变公式。
解决方案
这里的问题是您尝试传递的公式部分使用 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
推荐阅读
- authentication - 如何根据远程 Active Directory 凭据自动对公共网站的用户进行身份验证
- apache-spark - Spark迭代逻辑将按日期过滤的数据集写入镶木地板格式失败OOM
- dataframe - Julia Dataframe group by 在另一个 group by
- javascript - React 组件不使用“mapStateToProps”从减速器读取状态
- javascript - 使用javascript只创建一个按钮?
- javascript - React / Redux:登录后标题不会重新加载
- javascript - 如何创建多个 monaco javascript 编辑器,使它们不共享全局命名空间?
- python - 在 Python 中弹出不同的列表时,类实例变量会减少
- android - 如何将 Firebase Crashlytics 连接到 Android 应用
- r - 如何将行名分配给 Shiny 中的反应性数据框?