ダブルクリックでリンク
エクセルシートでセルの値にリンクを追加し、セルをダブルクリックすることで
設定したリンク先を呼び出せる機能があります。
ただし、値にリンク先を設定することに手間がかかり、ほかのエクセルシート
でも一からリンク先を設定しなければなりません。
そこで、リンク先リストを別エクセルブックで作成しておき、それを参照して
リンク先を呼び出せるマクロをご紹介します。
流れとしては下図のように、エクセルシート上の例えば「商品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
以上です。上記マクロコードをコピーペーストしてマクロを記述してください。