Excel 我有一个很长的公式数组,替换函数没有填充单元格
我正在尝试使用replace输入我的长数组公式。我认为这个公式很好,但它无法填充单元格。我想替换Excel 我有一个很长的公式数组,替换函数没有填充单元格,excel,vba,Excel,Vba,我正在尝试使用replace输入我的长数组公式。我认为这个公式很好,但它无法填充单元格。我想替换formula1中的J、K和W。我没有收到错误消息,只是在公式应该是的地方有一个空列 我试着以A1参考风格输入,但也不起作用 Dim formula1 As String Dim formula2 As String Dim formula3 As String Dim formula4 As String Dim origRS As Long origRS = Application.Refere
formula1
中的J
、K
和W
。我没有收到错误消息,只是在公式应该是的地方有一个空列
我试着以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
问题在于替换数组公式部分的方法是正确的,但是,代码中存在一些问题:
(“R2:R&Lastrow”)
。您还需要声明Lastrow
变量(Dim Lastrow as Long
),然后以某种方式计算它公式1
已经不正确-括号的数量无效,“中间”IFERROR没有第二个参数(这是必需的)。当您将原始公式粘贴到Excel中时,它将抛出一个错误。我想你会希望你的第一个配方看起来有点像:
=IFERROR(IFERROR(INDEX('C:\Name\Documents\[salesorders.txt]salesorders'!C17,JKW&'C:\Name\Documents\[salesorders.txt]salesorders'!C9),0),0)
公式2、3、4
也需要检查
salesforders.txt
)-是否正确replace
语句。这些必须是公式的有效(完整)部分。对我来说,最简单的方法总是创建一个有效的公式(由Excel识别),比如INDEX(10002000)
,然后替换1000
和2000
公式1-4
更容易。也请考虑不要混合R1C1和“标准”单元引用(根据罗恩的评论)-这应该是标准化的。
Dim formula1作为字符串,formula2作为字符串,formula3作为字符串,formula4作为字符串
朦胧的边缘一样长,最后一排一样长,我一样长
暗淡单元格作为范围
Dim varOrig作为变体,varRepl作为变体
origRS=Application.ReferenceStyle
Application.ReferenceStyle=xlR1C1
公式1=“=IFERROR(IFERROR(索引(salesorders!C1710002000),0),0)”
公式2=“匹配(RC[-17]&RC[-13]&RC[-12],salesorders!C8&salesorders!C34&salesorders!C9,0)”
公式3=“索引(salesorders!C17,匹配(RC[-17]&RC[-13]&RC[-12],salesorders!C8&salesorders!C34),3000)”
公式4=“销售订单!C9”
最后一行=5
varOrig=Array(100020003000)
varRepl=数组(公式2、公式3、公式4)
对于ActiveSheet.Range(“R2:R”和LastRow)中的每个单元格
带电池
.FormulaArray=公式1
对于i=0到2
.替换varOrig(i),varRepl(i)
。替换为“salesorders!”,“'C:\Name\Documents\[salesorders.txt]salesorders'!”
接下来我
以
下一个细胞
Application.ReferenceStyle=origRS
随机向下投票总是好的!如果你认为这不是一个好答案,也许可以提供一些反馈。同意,我认为你的答案不应该被否决。然而,尽管.FormulaArray
属性有255个字符的“官方”限制,但VBA中有一个诡计,可以用相关字符串替换数组的一部分(与OP要求的相同),从而可以将数组公式扩展到该限制之外。我没有投反对票,但原因很可能是你的回答没有回答问题。OP试图使用一种公认的方法来绕过255个字符的限制,只是做得不正确。你到底是怎么让它运行的?您是否以某种方式关闭了错误?由于“R2:R&Lastrow”
是一个无意义的地址,因此在使用ActiveSheet.Range的行上应该会出现1004错误。(字符串中有Lastrow
,因此将按字面意思使用)。此外,公式在R1C1
和A1
样式中使用混合引用。我建议您在工作表单元格中开发一个有效的公式,然后查看它在VBE中的外观。当我把这个公式放到excel中时,它就起作用了。我将再次检查以确保。如您所示,当它嵌入到字符串中时不正确<代码>“R2:R&Lastrow”
的计算结果正好如此,无论您是否声明了Lastrow。它需要写成“R2:R”&Lastrow
。注意引号的位置。很好地解释了实现绕过255个字符限制的方法。