ダブルクリックでリンク

 エクセルシートでセルの値にリンクを追加し、セルをダブルクリックすることで

設定したリンク先を呼び出せる機能があります。

ただし、値にリンク先を設定することに手間がかかり、ほかのエクセルシート

でも一からリンク先を設定しなければなりません。

そこで、リンク先リストを別エクセルブックで作成しておき、それを参照して

リンク先を呼び出せるマクロをご紹介します。

流れとしては下図のように、エクセルシート上の例えば「商品A」のセルをダブルクリックすると、設定ファイルxlsmが開き、そこで「商品A」の文字を検索し、ヒットすればその右のパス(「商品A」の詳細を記述しているファイル(リンク先))を開きます。ここで、設定ファイルxlsmを作成する訳ですが、この作成もマクロを使って

簡単にできるようにします。

設定ファイルのエクセルシート
リンク表.xlms

NO キーワード 参照元ファイル 参照元パス
1 商品A A商品仕様書.pdf C:\Users\81903\Documents
2 商品B B商品仕様書.xlsx C:\Users\81903\Documents
3 会社A A社会社案内.pdf C:\Users\81903\Desktop
4 会社B B社会社案内.pdf C:\Users\81903\Desktop
5 A社地図 A社マップ.JPG C:\Users\81903\Documents
6 商品B図面 商品B図面.JPG C:\Users\81903\Documents
7

※キーワードは適宜、適当なものを記入する

 

   
8      
9      
10      
11      
12      
13      

 

設定ファイルのマクロコード(新規入力支援)

Sub 新規入力()
    
    Dim 参照元ファイル As String
    Dim A_path '参照元ファイルパス
    Dim findRng As Range, srcRng As Range
    Dim 参照元Fパス As String '参照元ファイルの1段上フォルダのパス
    Dim ans As single
     '参照元ファイルをダイアログから選択する。
    MsgBox "参照するファイルを選択してください。"
    
    A_path = Application.GetOpenFilename
    ’選択をキャンセルした時の処理
    If A_path = False Then
        MsgBox "処理を中断しました。"
        Exit Sub
    Else

     MsgBox "A_path=" & A_path
    
    End If
    ’A_pathの後ろから最初の「¥」が最初から何文字目かを調べる。
    N = InStrRev(A_path, "¥")

    ’¥の後ろの文字列、つまり「参照元ファイル名」を変数の参照元ファイル名に

    '代入する。
    参照元ファイル = Mid(A_path, N + 1)
    
    'MsgBox "参照元ファイル=" & 参照元ファイル & N
    

    '参照元ファイルの一段上のディレクトリまでのパスを参照元Fパスに代入する。
    参照元Fパス = Left(A_path, N - 1)
    
    'MsgBox "参照元パス=" & 参照元Fパス & " " & N
    
    'リンク表Bの最終行+1の行番号を変数rに代入する。
    r = ThisWorkbook.Worksheets("リンク表").Range("B" &_             Rows.Count).End(xlUp).Offset(1).Row
     ’参照元ファイルが既に登録されている場合の処理
    Set srcRng = ThisWorkbook.Worksheets("リンク表").Range("C1:Q100")
   Set findRng = srcRng.Find(what:=参照元ファイル)
    
    If Not findRng Is Nothing Then
        ans = MsgBox("データがあります。上書きしましか?", 4)
               
            If ans = 6 Then
                r = findRng.Row
            Else
                MsgBox "中止します"
                Exit Sub
            End If
    End If
    
    ThisWorkbook.Worksheets("リンク表").Range("D" & r).Value = 参照元Fパス
    ThisWorkbook.Worksheets("リンク表").Range("C" & r).Value = 参照元ファイル
   

End Sub

 

ダブルクリックリンクを設定したいエクセルシート例。

               
    仕入れ先 商品名 数量      
    会社A 商品A 10      
    会社B 商品B 2      
               
               
               
               
               
               
               
               

 

このエクセルシートをマクロ有効のxlsmの拡張子にしてダブルクリックマクロ.xlsmで

保存し、

ダブルクリックマクロ.xlsmのsheet1(表紙)にダブルクリックのイベントプロシージャ

コードを作成する。

 

 

ダブルクリックリンクのマクロコード

 

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim fndRng As Range, srcRng As Range
    Dim キーワード As String
   
    キーワード = Target.Value
    
    MsgBox "キーワード=" & キーワード
    
    '以下のパスはリンク集エクセルブックが保存されたパスを記述する。
    Workbooks.Open "C:\Users\81903\Desktop\マクロ\ダブルクリックリンク_マクロ\参照元リンク集.xlsm"
    Workbooks("参照元リンク集.xlsm").Activate
    
    Set srcRng = Worksheets("リンク表").Range("B2:B500")
    
    Set fndRng = srcRng.Find(What:=キーワード)
 
    
    If fndRng Is Nothing Then
    
        MsgBox "該当するキーワードがありません。 処理を終了します。"
        Workbooks("参照元リンク集.xlsm").Close savechanges:=False
        Exit Sub
    
    End If


    Dim str As String
    Dim r As Long, num As Long
    
    r = fndRng.Row    

   'キーワードの参照元フォルダパスを取得する
    str = Worksheets("リンク表").Range("D" & r).Value   
    Shell "C:\Windows\Explorer.exe " & str, vbNormalFocus
    'リンク集エクセルブックを保存なしで閉じる。    
    Workbooks("参照元リンク集.xlsm").Close savechanges:=False


End Sub

 

以上です。上記マクロコードをコピーペーストしてマクロを記述してください。