2017-05-16 47 views
0

我有幾個封閉的Excel工作簿,如果不打開它們,我願意在=INDEX(MATCH)之間訪問。已關閉的Excel上的Index()&Indirect()

不幸的是,我想引用它們間接,因而基於當前工作表我在上。

例如 - 如果我在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 

長話短說 - 分按預期工作,提供準確我想要在活動單元格中。該功能不起作用。任何想法如何使其工作?我想這不起作用,因爲我在濫用WorksheetFunction.VLookup,但是如果不打開其他工作簿,我無法傳遞一個範圍。想法?

+0

也許嘗試根據鏈接問題顯示您的代碼,以便其他人可以看到您做了什麼,並可能能夠發現您出錯的位置。 – FreeMan

+0

@FreeMan - 剛剛完成。我不想用'VBA'工作,這實際上是我最後的手段...... – Vityata

+0

另外,你是否嘗試過在[Choirbean]中鏈接的「瘋狂的方法」(https://stackoverflow.com/a/28463798/2344413)的答案?看起來這可能只適用於你。 – FreeMan

回答

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