• ベストアンサー

【Excel-VBA】アクティブセルが参照しているブックを開くには?

いろいろ検索したのですが、見つからないので質問させていただきます。 対象のセルが他ブックのセルを参照しているとき、そのブックが開かれていない場合、正しい値にはなりません。 (例:A1に =[Book2.xls]Sheet1!$A$3 が入力されている) そこで、そのセルが参照しているブックをVBAで自動的に開く方法を考えています。 つまり、例で言えば、Book2.xlsを開きたいのです。 文字列関数を使ってひとつひとつの文字を取得し、ファイル名を得て開く方法しかないのでしょうか? 何かいい方法があれば教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

#1です。 > 参照しているブック以外をすべて閉じるという操作で補うしかないようですね…。 ActiveCell.Formulaと見比べて開けば良いのかも。 Sub Test1()  myLinks = ThisWorkbook.LinkSources(xlExcelLinks)  If Not IsEmpty(myLinks) Then    s1 = WorksheetFunction.Substitute(ActiveCell.Formula, "[", "")    s1 = WorksheetFunction.Substitute(s1, "]", "")    For i = 1 To UBound(myLinks)      If InStr(1, UCase(s1), UCase(myLinks(i)), 1) > 0 Then        Workbooks.Open myLinks(i)        Exit Sub      End If    Next i  End If End Sub --- 文字列操作パターンだとこんな感じでもイケるのかなぁ、、、 Sub Test2()  On Error Resume Next  With WorksheetFunction     Workbooks.Open .Substitute(Mid(ActiveCell.Formula, 3, _       .Find("]", ActiveCell.Formula) - 3), "[", "")  End With End Sub

yoko14820
質問者

お礼

ありがとうございます。 サンプルマクロをご教授いただいたおかげで、ほぼ目標としたマクロが完成しました!! papayukaさま、ありがとうございました!!

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >対象のセルが他ブックのセルを参照しているとき、そのブックが開かれていない場合、正しい値にはなりません。 通常、リンクしているセルが正しい値にならない場合は、  メニュー-編集-リンクの編集 ---値の更新 をすればよいと思います。よほど、数が多くなければ、以下のようなマクロは必要ないと思います。 Sub LinkUpDateMacro()   Dim ar As Variant   Dim v As Variant   ar = ActiveWorkbook.LinkSources(xlExcelLinks)   If Not IsEmpty(ar) Then     For Each v In ar       ActiveWorkbook.UpdateLink v, xlExcelLinks     Next v   End If End Sub ---------------------------------------------------------- ひとつのブックを開くなら、  メニュー-編集-リンクの編集 ---リンク元を開く で開ければよいと思うのです。リンクしているブックのひとつを、マクロという手段で開けなくてはならないのか、理由が良く分かりません。かなり、複雑なのでしょうか? たとえば、ダブルクリックして、開くというなら以下のようなコードになります。つまり、ハイパーリンクと同じ役割をしています。 'シートモジュール Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   Dim i As Integer   Dim j As Integer   Dim n As Integer   Dim k As String   Cancel = True   If Target.HasFormula = False Then Exit Sub   k = Target.Formula   i = InStr(k, "[")   j = InStr(i, k, "]")   n = InStr(k, "\")   Application.ScreenUpdating = False   If i > 0 And j > 0 And n > 0 Then     k = Mid$(k, 3, j - 3)     k = Replace(k, "[", "")     On Error Resume Next     Workbooks.Open k     On Error GoTo 0   End If   Application.ScreenUpdating = True   k = Target.FormulaR1C1   If i > 0 And j > 0 Then     Application.Goto k   End If End Sub

yoko14820
質問者

お礼

yoko14820です。 >で開ければよいと思うのです。 >リンクしているブックのひとつを、マクロという手段で >開けなくてはならないのか、理由が良く分かりません。 >かなり、複雑なのでしょうか? 質問の内容に余計な文を加えて混乱させて申し訳ございません。 とどのつまりは、参照元のセルにジャンプするマクロを作成させたかったのです。 同一ブック内であれば、簡単に参照できたものの、それ以外の処理方法を考えていたのです。 サンプルマクロのご提供ありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

> 対象のセルが他ブックのセルを参照しているとき、そのブックが開かれていない場合、 > 正しい値にはなりません。 これは使用する関数によってだと思います。 アクティブセルのって言うより、ブックの参照リンクを開けば良いのでは無いでしょうか? ヘルプの LinkSources メソッド使用例のほとんどまんまですが、、 Sub Test()  myLinks = ThisWorkbook.LinkSources(xlExcelLinks)  If Not IsEmpty(myLinks) Then    For i = 1 To UBound(myLinks)      Workbooks.Open myLinks(i)    Next i  End If End Sub

yoko14820
質問者

お礼

さっそくの回答ありがとうございます! 今回は参照しているブックのセル値を取り出すのが目的ではなくて、参照しているブック自体を開きたいので、使用する関数うんぬんではないのです…。 LinkSourcesメソッドでの解決方法を伝授いただきありがとうございます! 目的は、そのセルが参照しているブックのみ開きたいので… この方法の場合は、暫定対策として、参照しているブック以外をすべて閉じるという操作で補うしかないようですね…。 ありがとうございます。 大変参考になりました!

関連するQ&A