【问题标题】:VBA FormulaR1C1 adds parentheses when HLOOKUP referances another workbook当 VLOOKUP 引用另一个工作簿时,VBA FormulaR1C1 添加括号
【发布时间】:2015-10-01 10:23:39
【问题描述】:

我正在使用以下代码来查找变量工作簿并检索该数据。它将公式输入到从其他工作簿中获取数据的单元格区域中。我的问题是,如果我在公式中使用 R1C1 样式来指示我要搜索的其他工作簿中的范围,VBA 会像 A1 样式一样输入公式。那么公式将不会返回正确的信息。

但是,如果我将那部分代码保留为 A1 样式,则 VBA 在将范围输入单元格时会在范围中添加括号,并且公式会失败。

这是代码行:

Range("R8:R" & FinalRow).FormulaR1C1 = "=IFERROR(HLOOKUP(IF(RIGHT(RC[-13],2)=""B4"",INDEX('[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]" & myUA _
                & "'!D:E,MATCH(RC4,'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]" & myUA & "'!E:E,0),1)," _
                & "INDEX(INDIRECT(""'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]""&RC5&""'!D:E"",TRUE)," _
                & "MATCH(RC4,INDIRECT(""'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]""&RC5&""'!E:E"",TRUE),0),1))" _
                & ",'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]SOP'!R1C3:R4C41,4,FALSE),""NP"")"

结果如下:

=IFERROR(HLOOKUP(IF(RIGHT(E13,2)="B4",INDEX('[5P1B 4520 5015 EVMS.xlsm]UA1B'!D:(E),MATCH($D13,'[5P1B 4520) 5015 EVMS.xlsm]UA1B'!E:(E),0),1),INDEX(INDIRECT("'[5P1B 4520 5015 EVMS.xlsm]"&$E13&"'!D:E",TRUE),MATCH($D13,INDIRECT("'[5P1B 4520 5015 EVMS.xlsm]"&$E13&"'!E:E",TRUE),0),1)),'[5P1B 4520 5015 EVMS.xlsm]SOP'!$C$1:$AO$4,4,FALSE),"NP")

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我看到您在此公式中使用了间接,并且仅当引用的工作簿打开时才有效。如果它是开放的,那么您可以使您的整个公式间接并以这种方式摆脱所有麻烦。您可以通过在公式中引用 Address(Row()-x,Column()-y) 来做到这一点,以便它们像 R1C1 样式公式一样工作,并且它们根据自己的位置引用不同的行/列,即使公式是在每个单元格中都相同。以这种方式工作的简单公式的示例如下:
    =INDIRECT("'[My Workbook.xlsx]Sheet1'!"&ADDRESS(ROW()-3,COLUMN()-1))

    我相信这会满足您的需求:

    Range("R8:R" & FinalRow).Formula = "=IFERROR(HLOOKUP(IF(RIGHT(INDIRECT(Address(Row()-13,Column()+2)))=""B4"",INDEX('[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]" & myUA _
                & "'!D:E,MATCH(INDIRECT(Address(Row(),Column()+4)),'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]" & myUA & "'!E:E,0),1)," _
                & "INDEX(INDIRECT(""'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]""&RC5&""'!D:E"",TRUE)," _
                & "MATCH(INDIRECT(Address(Row(),Column()+4)),INDIRECT(""'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]""&RC5&""'!E:E"",TRUE),0),1))" _
                & ",'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]SOP'!INDIRECT(ADDRESS(ROW()+1,COLUMN()+3 &":"& ADDRESS(ROW()+4, COLUMN()+41)),4,FALSE),""NP"")"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多