excel - 我有一个很长的公式数组,替换函数没有填充单元格
问题描述
我正在尝试使用替换来输入我的长数组公式。我认为公式很好,但它不会填充单元格。我想替换J
,K
并W
在formula1
. 我没有收到错误消息,只有公式应该在的空列。
我尝试以 A1 参考样式输入它,但这也不起作用。
Dim formula1 As String
Dim formula2 As String
Dim formula3 As String
Dim formula4 As String
Dim origRS As Long
origRS = Application.ReferenceStyle
Application.ReferenceStyle = xlR1C1
formula1 = "=IFERROR(IFERROR(INDEX('C:\Name\Documents\[salesorders.txt]salesorders'!C17,JKW'C:\Name\Documents\[salesorders.txt]salesorders'!C9,0))),0)"
formula2 = "MATCH(RC[-17]&RC[-13]&RC[-12],'C:\Name\Documents\[salesorders.txt]salesorders'!C8&'C:\Name\Documents\[salesorders.txt]salesorders'!C34&"
formula3 = "'C:\Name\Documents\[salesorders.txt]salesorders'!C9,0)),INDEX('C:\Name\Documents\[salesorders.txt]salesorders'!C17,"
formula4 = "MATCH(RC[-17]&RC[-13]&-RC[-12],'C:\Name\Documents\[salesorders.txt]salesorders'!C8&'C:\Name\Documents\[salesorders.txt]salesorders'!C34&"
With ActiveSheet.Range("R2:R & Lastrow")
.FormulaArray = formula1
.Replace What:="J", Replacement:=formula2, lookat:=xlPart
.Replace What:="K", Replacement:=formula3, lookat:=xlPart
.Replace What:="W", Replacement:=formula4, lookat:=xlPart
End With
Application.ReferenceStyle = origRS
解决方案
您替换部分数组公式的方法是正确的,但是,您的代码存在一些问题:
With ActiveSheet.Range("R2:R & Lastrow")
需要替换为("R2:R" & Lastrow)
. 您还需要声明Lastrow
变量 (Dim Lastrow as Long
),然后以某种方式计算它。您还需要验证整个公式。您会注意到这
formula1
已经不正确 - 括号数无效并且“中间” IFERROR 没有第二个参数(这是强制性的)。当您将原始公式粘贴到 Excel 中时,它会引发错误。我怀疑您希望您的第一个公式看起来像这样:=IFERROR(IFERROR(INDEX('C:\Name\Documents\[salesorders.txt]salesorders'!C17,JKW&'C:\Name\Documents\[salesorders.txt]salesorders'!C9),0),0)
其余的公式formula2, 3, 4
也需要检查。
第三个潜在问题是您引用的是 .txt 文件 (
salesorders.txt
) - 是否正确?一旦这一切都解决了,你面临的第四个问题就是你的
replace
陈述。这些必须是公式的有效(完整)部分。对我来说,最简单的方法总是创建一个有效的公式(由 Excel 识别),例如,INDEX(1000,2000)
然后替换。1000
2000
下面是一个适合我的调整代码。不确定最终公式是否是您正在寻找的,但是 - 再次 - 它的某些部分是无效的。我剥离了整个文件路径并在最后添加了它,只是为了使分析formula1-4
更容易。另外请考虑不要混合 R1C1 和“标准”单元格引用(根据 Ron 的评论) - 这应该是标准化的。
Dim formula1 As String, formula2 As String, formula3 As String, formula4 As String
Dim origRS As Long, LastRow As Long, i As Long
Dim cell As Range
Dim varOrig As Variant, varRepl As Variant
origRS = Application.ReferenceStyle
Application.ReferenceStyle = xlR1C1
formula1 = "=IFERROR(IFERROR(INDEX(salesorders!C17,1000, 2000),0),0)"
formula2 = "MATCH(RC[-17]&RC[-13]&RC[-12],salesorders!C8&salesorders!C34&salesorders!C9,0)"
formula3 = "INDEX(salesorders!C17,MATCH(RC[-17]&RC[-13]&-RC[-12],salesorders!C8&salesorders!C34),3000)"
formula4 = "salesorders!C9"
LastRow = 5
varOrig = Array(1000, 2000, 3000)
varRepl = Array(formula2, formula3, formula4)
For Each cell In ActiveSheet.Range("R2:R" & LastRow)
With cell
.FormulaArray = formula1
For i = 0 To 2
.Replace varOrig(i), varRepl(i)
.Replace "salesorders!", "'C:\Name\Documents\[salesorders.txt]salesorders'!"
Next i
End With
Next cell
Application.ReferenceStyle = origRS
推荐阅读
- sockets - 有没有一种方法可以在不使用多播的情况下将一个数据包发送给 UDP 中的多个收件人?
- wordpress - Wordpress 中的插件管理页面
- angular - 如何仅将一个值从一个组件传递给Angular 6中的另一个组件?
- c# - 如何使用 Unity 初始化 Firebase 实时数据库?
- javascript - onselectionchange 更新时变量不更新
- python - Boto3 Python 只获取某些文件类型?
- c# - Visual Studio 2017 想要引用已使用不同程序集引用的内容
- javascript - Angular5 - 从类中新创建的对象返回未定义
- c# - Webrtc Capture Desktop Audio without using vb-audio cable driver for Native Windows
- python - 如何通过 Selenium 摆脱信息栏“Chrome 正在被自动化测试软件控制”