【问题标题】:Index() & Indirect() on a closed Excel关闭 Excel 上的 Index() 和 Indirect()
【发布时间】:2017-05-16 11:30:08
【问题描述】:

我有一些封闭的 Excel 工作簿,我愿意在不打开它们的情况下使用 =INDEX(MATCH) 访问它们。

不幸的是,我想间接引用它们,因此基于我所在的当前工作表。

例如- 如果我在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,但是如果不打开另一个工作簿,我就无法通过一个范围。想法?

【问题讨论】:

  • 也许可以尝试根据链接的问题显示您的代码,以便其他人可以看到您所做的事情,并且可能能够发现您出错的地方。
  • @FreeMan - 刚刚完成。我不想与VBA 合作,这实际上是我最后的手段......
  • 另外,您是否尝试过Choirbean 的答案中链接的“疯狂的方法”?看起来这可能对你有用。
  • @FreeMan - 试过了,但太复杂了。我宁愿开始打开文件并使用Indirect 解决问题,也不愿这样做。

标签: vba excel excel-formula


【解决方案1】:

经过一番尝试,我发现在封闭的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2021-05-17
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多