Excel 我有一个很长的公式数组,替换函数没有填充单元格

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

我正在尝试使用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.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

问题在于

替换数组公式部分的方法是正确的,但是,代码中存在一些问题:

  • 使用ActiveSheet.Range(“R2:R&Lastrow”)需要替换为
    (“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
    也需要检查

  • 第三个潜在问题是您正在引用一个.txt文件(
    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个字符限制的方法。