別のワークブックからセルの値を読み取るセルに次の式があるとします
='c:\temp\[external book.xlsx]SheetX'!$E$4
の値をc:\temp\[external book.xlsx]SheetX
このシートの別のセルから取得したいと思います。この式をどのように書き直して、この値を連結し、"!$E$4"
セルA1
に含まれているとしましょうc:\temp\[external book.xlsx]SheetX
別のワークブックからセルの値を読み取るセルに次の式があるとします
='c:\temp\[external book.xlsx]SheetX'!$E$4
の値をc:\temp\[external book.xlsx]SheetX
このシートの別のセルから取得したいと思います。この式をどのように書き直して、この値を連結し、"!$E$4"
セルA1
に含まれているとしましょうc:\temp\[external book.xlsx]SheetX
編集:以下は閉じたワークブックでは機能しないため、VBAでそれを行う方法の不格好な概念実証があります(これを行うためのより良い方法があると思います):
Sub ClosedWorkbook()
Dim currSht As Worksheet
Dim targetWbk As Workbook
Dim Path As String
' Turn off updating
Application.ScreenUpdating = False
' Set a reference to the current sheet
Set currSht = ActiveWorkbook.ActiveSheet
' Get the value in the formula cell (A1 here, could be ActiveCell if in a loop, etc.)
PathSheet = currSht.Range("A1").Value
' Split out the path - this is very clunky, more of a proof (?) of concept
' This is depends on the path being as you mentioned, and the IF block is to
' check if the apostrophe is present in the cell (since it is the escape character,
' it is usually skipped)
If Left(PathSheet, 1) = "'" Then
Path = Replace(Mid(PathSheet, 2, InStr(PathSheet, "]") - 2), "[", "")
Sheet = Mid(PathSheet, InStr(PathSheet, "]"))
Sheet = Left(Sheet, Len(Sheet) - 2)
Else
Path = Replace(Mid(PathSheet, 1, InStr(PathSheet, "]") - 1), "[", "")
Sheet = Mid(PathSheet, InStr(PathSheet, "]") + 1)
Sheet = Left(Sheet, Len(Sheet) - 2)
End If
' Open the target workbook
Set targetWbk = Workbooks.Open(Path)
' Grab the value from E4 and drop it in a cell (D1 here, could be ActiveCell, etc.)
MyValue = targetWbk.Sheets(Sheet).Range("E4").Value
currSht.Range("D5").Value = MyValue
' Close the target
targetWbk.Close
Application.ScreenUpdating = True
End Sub
OLD WAY(閉じたブックでは機能しません)
これはあなたが探しているものを捉えていると思います。この例では、セルA1
にシートパスがあります。
'C:\temp\[externalworkbook.xlsx]Sheet1'!
セルB1には、次の数式があります。
=INDIRECT(A1 & "$E$4")
$E$4
これは、フルパスを生成するためにシートの値を連結します。フルパスは、によって値に変換されINDIRECT
ます。注意すべき点の1つは、アポストロフィはエスケープ文字であるため、データによっては、数式で特別にアポストロフィを考慮する必要がある場合があります。
=INDIRECT("'" & A1 & "$E$4")
Excel 2007以降を使用している場合は、IFERROR
数式でラップして当て推量を取り除くことができます。
=IFERROR(INDIRECT(A1 & "$E$4"),INDIRECT("'" & A1 & "$E$4"))