索引()&闭合Excel上的间接()

时间:2017-05-16 11:30:09

标签: excel vba excel-vba excel-formula

我有一些已关闭的Excel工作簿,我愿意使用=INDEX(MATCH)访问它而不打开它们。

不幸的是,我想间接地引用它们,因此基于我当前的表格。

E.g。 - 如果我在sheet - > then file path

AAB - > 'C:\Users\vityata\Desktop\[AAB]Test'!$A:E

BBC - > 'C:\Users\vityata\Desktop\[BBC]Test'!$A:E

这似乎是一项微不足道的任务,但是做这样的事情的唯一选择似乎如下:

  • 打开工作表,然后使用Indirect()(但我不想打开工作表)
  • 使用VBA代码(但它应该以某种方式重用并且真的是最后的手段)
  • 使用数据连接(我不想要)
  • 使用INDIRECT.EXT(但我不想要3.派对加载项)

我在这里检查过类似的问题:How to referencing value in closed excel workbook by formula incl. variable sheetname?但是第一个解决方案实在太复杂了。

任何新想法或最佳做法?

更新 到目前为止,我已经用VBA实现了以下目标(尽管我希望有一个非VBA解决方案):

Option Explicit

Public Sub VlookupClosedWb(Optional strLookFor As String = "Erteilung Baugenehmigung", _
                        Optional strSheet As String = "APF", _
                        Optional lngColIndex As Long = 2)

    Dim strRange As String

    strRange = "'" & ThisWorkbook.Path & "\[" & strSheet & ".xlsx]" & "Monatsbericht'!$A:$E"
    ActiveCell.Formula = "=VLOOKUP(""" & strLookFor & """," & strRange & "," & lngColIndex & ",0)"

End Sub

Public Function fVlookupClosedWb(Optional strLookFor As String = "Erteilung Baugenehmigung", _
                        Optional strSheet As String = "APF", _
                        Optional lngColIndex As Long = 2)

    Dim strRange    As String

    strRange = "'" & ThisWorkbook.Path & "\[" & strSheet & ".xlsx]" & "Monatsbericht'!$A:$E"

    fVlookupClosedWb = WorksheetFunction.VLookup(""" & strLookFor & """, " & strRange & ", " & lngColIndex & ", 0)

End Function

长话短说 - Sub按预期工作,提供了我想要的活跃单元格。该功能不起作用。任何想法如何使其工作?我认为它不起作用,因为我滥用了一点WorksheetFunction.VLookup,但是我无法在不打开其他工作簿的情况下传递范围。想法?

1 个答案:

答案 0 :(得分:0)

经过一些尝试后,我发现在封闭的Excel工作簿中使用某些公式的方法,而不是引用路径是使用Sumproduct() function

例如为: 如果你想使用Sumproduct()作为Sumifs()的替代品,这就是两种情况下的样子:

=SUMPRODUCT(((B2:B6=C2)*1)*(A2:A6=D2))
*SUMPRODUCT(((B8:B13=C8)*1)*(A8:A13=D8))
*SUMPRODUCT(((B16:B20=C16)*1)*(A16:A20=D16))

我放了some more examples of it here