excel
  • excel-formula
  • 2015-02-11 512 views 6 likes 
    6

    我想引用另一個單元格的值已關閉帶公式的工作簿(不是VBA!)。工作表名稱存儲爲變量(在以下示例中,C13是「Sheet2」)。使用INDIRECT在已關閉的Excel工作簿中引用值?

    如果另一個文件是開放的,那麼以下工作:

    =INDIRECT("[myExcelFile.xlsm]" & C13 & "!$A$1") 
    

    如果文件被關閉,上述公式是不行的,因爲有沒有給出絕對路徑。但我得到了它具有以下(兼顧「的工作,而不是「:

    ='C:\data\[myExcelFile.xlsm]Sheet2'!$A$1 
    

    現在我想更換硬編碼‘有一個動態的參考價值Sheet2中’,意味着C13(如出現在第一個代碼段)。

    有誰知道不使用VBA或其他圖書館解決方案?

    回答

    6

    有明確no way to do this標準公式。然而,一個瘋狂的排序答案可以發現here。它仍然避免了VBA,它會讓你動態獲得你的結果

    1. 首先,製作會生成您的配方的配方,但不要在開頭添加=

    2. 讓我們假裝您已經在Sheet1B2單元格中創建了此公式,並且您希望在c列中對公式進行評估。

    3. 現在,轉到公式選項卡,然後選擇「定義名稱」。給它命名爲myResult(或者不管你選擇),然後在指爲了寫=evaluate(Sheet1!$B2)(注意$

    4. 最後,去C2,寫=myResult。向下拖動,然後... 瞧!

    +0

    感謝您的回答,+1。 但是,正如您已經添加到您的答案:這隻給我一個動態創建的公式。但是我想複製整個表格並將這些公式應用到這些表格中 - 而不用創建幾個名稱定義。 你爲什麼確定(按設計),確實沒有別的辦法? – Chris 2015-02-12 09:35:23

    +2

    我之所以引用我爲什麼如此明確以至於沒有其他方法(缺少VBA),並且我刪除了「通過設計」(因爲我沒有參與Excel的設計 - 「將文本評估爲常規函數「似乎並不符合Excel的精神,我可能誇大了我的情況)。此外,我找到了更好的答案引用,這導致了更有用的可拖動功能。希望這可以更好地滿足您的需求! – 2015-02-12 13:04:28

    +0

    我不知道爲什麼(和我沒有添加「=」),但不幸的是上面的解決方案(名稱定義中的評估函數)沒有適用於我的問題(#REF錯誤)。與其他例子一起工作(簡單的1 + 2操作等) - 也有你的第二個提示,通過拖拽工作 - 但不是封閉的工作簿。 – Chris 2015-02-13 16:47:18

    1

    檢查INDEX函數:

    =INDEX('C:\path\[file.xlsm]Sheet1'!A10:B20;1;1) 
    
    -1

    = INDIRECT( 「'C:\數據[」 & A8 &「] SHEETNAME'!$ G9" )

    其中A8包含myExcelFile .xlsm

    和G9包含您的源工作簿珍貴數據。

    +0

    問題與可變表單名稱有關,意味着在所提出的解決方案中使「SheetNAME」更加靈活。 – Chris 2016-09-09 08:38:44

    0

    如果你知道你想參考的工作表的數量,你可以使用下面的函數來找出名字。比你可以在間接功能中使用它。

    Public Function GETSHEETNAME(address As String, Optional SheetNumber As Integer = 1) As String 
    
        Set WS = GetObject(address).Worksheets 
        GETSHEETNAME = WS(SheetNumber).Name 
    
    End Function 
    

    此解決方案不需要參考工作簿打開 - Excel會自行打開它(但它會被隱藏)。

    +0

    親愛的Stefan,您的VBA示例中的「地址」是什麼?它是文件路徑嗎? – 2017-05-03 16:57:46

    +0

    是的,這是一個完整的文件路徑,例如C:\用戶\斯特凡\桌面\ file.xlsx。通常我會輸入單元格中的文件路徑以方便使用。 – Stefan 2017-05-04 15:48:10

    0

    OK,

    這兒有你在Office 2010中的恐龍方法。

    使用連接編寫你想要的完整地址(「&」合併文本的方法)。

    爲您需要的所有地址執行此操作。它應該看起來像:

    = 「=」 & 「'\完整網絡地址,包括[表格名稱]」 & W3 &「'$ W4" !

    的W3是一個動態參考我是什麼片使用,W4是我想從工作表獲得的單元格。

    一旦你有了這個,啓動一個宏記錄會話。複製單元格並將其粘貼到另一箇中。我將它粘貼到合併的單元格中,它給了我經典的「相同大小」錯誤。但它做的一件事就是粘貼我的連接(包括額外的「=」)的結果文本。

    不管你做了多少,然後,進入每個粘貼的單元格,選擇他的文本,然後按回車。它將其更新爲活動的直接引用。

    一旦你完成了,把光標放在好的地方並停止宏。分配給一個按鈕,你就完成了。

    這是第一次做這件事的PITA,但是一旦你做完了它,你剛剛做出了適合圓孔的方形釘。

    0

    我也在尋找在封閉工作簿中引用單元格的答案。以下是解決方案(正確公式)的鏈接。我已經在我當前的項目上嘗試了它(引用單個單元格和單元格數組),並且沒有錯誤,它運行良好。我希望它能幫助你。

    https://www.extendoffice.com/documents/excel/4226-excel-reference-unopened-file.html

    在式中,E:\Excel file\是未開封的工作簿的完整的文件路徑,test.xlsx是工作簿的名稱,Sheet2是包含需要從引用單元格的值的表名稱,以及A:A,2,1意味着單元格A2將在封閉的工作簿中引用。你可以根據你的需要改變它們。

    如果你想手動選擇一個工作表引用,請用這個公式

    =INDEX('E:\Excel file\[test.xlsx]sheetname'!A:A,2,1)

    應用該公式後,你會得到一個選定工作表對話框,請選擇一個工作表,然後點擊OK按鈕。然後,此工作表的特定單元格值將立即引用。

    相關問題