以下のExcelで作られた表は、その各データとエクスプローラー上のフォルダをハイパーリンクで紐づけています。

このようなハイパーリンクを作成する場合、1つ1つ手動で設定するのは大変です。

そこで今回は、「フォルダ」の項目をダブルクリックするだけで、管理フォルダとハイパーリンクを自動で作成する仕組みを作っていきます。

※こちらで作成したファイルは、記事の最後にて配布しています。
1. 開発準備
以下の表を元に作成していきます。

セルA2には、管理フォルダを自動で作成する位置のパスを入力しています。

今回は、「フォルダ」の項目をダブルクリックすることで、その行のデータと紐づいた管理フォルダとハイパーリンクを作成する仕組みを実現します。

そのような、特定のシートのセルをダブルクリックしたときに何かしら処理を実行するには、「シートモジュール」の「イベントプロシージャ」を活用します。
シートモジュールは、該当するシートのタブ上で右クリックし、[コードの表示]を選択することで表示できます。

選択すると、以下のエディタ画面(VBE)が表示されます。
また、該当するシートのシートモジュールが表示された状態になります。
「Option Explicit」は、VBEの設定次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

次に、該当するシートのセルをダブルクリックしたときに処理が実行される特殊なプロシージャ(イベントプロシージャ)を用意する必要があります。
そのためには、シートモジュールの左上のリストから「Worksheet」を選択します。

「Worksheet」を選択すると、自動で「Worksheet_SelectionChange」というプロシージャが表示されます。
このプロシージャは、該当するシートのいずれかのセルが選択されると同時に処理が実行されるイベントプロシージャです。

ただ、今回使用するイベントプロシージャは、セルをダブルクリックしたときに処理が実行されるものになります。
そのため、右上のリストから「BeforeDoubleClick」を選択します。

表示された「Worksheet_BeforeDoubleClick」というプロシージャを活用します。
「Worksheet_SelectionChange」というプロシージャは削除して問題ないです。

2. コードの記述
以下のコードを記述します。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim t As Range: Set t = Target
Dim fPath As String
If t.Row >= 5 And t.Column = 5 And _
t.Value = "" And _
Cells(t.Row, "A").Value <> "" And _
Cells(t.Row, "B").Value <> "" Then
Cancel = True
fPath = Range("A2").Value & _
"\" & _
Cells(t.Row, "A").Value & _
"_" & _
Cells(t.Row, "B").Value
MkDir fPath
Me.Hyperlinks.Add _
Anchor:=t, _
Address:=fPath, _
TextToDisplay:="開く"
End If
End Sub
では、コードについて解説していきます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim t As Range: Set t = Target
Dim fPath As String
If t.Row >= 5 And t.Column = 5 And _
t.Value = "" And _
Cells(t.Row, "A").Value <> "" And _
Cells(t.Row, "B").Value <> "" Then
'省略
End If
End Sub
「Worksheet_BeforeDoubleClick」というプロシージャの引数「Target」に、ダブルクリックされたセルの情報が渡されます。
そのセルの情報を「t」という名前の入れ物(変数)に格納し、以下の条件を満たしているセルがダブルクリックされたかどうかを確認します。
| ・行番号が5以上 ・列番号が5(E列) ・セルが空 ・同じ行のA列が空でない(「ID」の項目) ・同じ行のB列が空でない(「プロジェクト」の項目) |
この条件は、管理フォルダを作成する際に必要な条件になります。
すでに管理フォルダが作成されている場合は再度作成する必要はないですし、
今回は管理フォルダを「ID_プロジェクト」という名前で自動作成するので、表の「ID」と「プロジェクト」の項目が空の場合は管理フォルダを作成することができません。
そのため、上記の条件を満たした場合のみに、Ifの中の処理(’省略)を実行するようにしています。
Cancel = True
fPath = Range("A2").Value & _
"\" & _
Cells(t.Row, "A").Value & _
"_" & _
Cells(t.Row, "B").Value
MkDir fPath
条件を満たしたセルがダブルクリックされたときは、セルの編集モードをキャンセルします。
次に、「fPath」という名前の入れ物(変数)に作成するフォルダのパスを格納し、「MkDir」でフォルダを作成します。
「fPath」に格納しているパスは以下になります。
| セルA2のパス + 「\」 + 対象行のA列のID + 「_」 + 対象行のB列のプロジェクト |

Me.Hyperlinks.Add _
Anchor:=t, _
Address:=fPath, _
TextToDisplay:="開く"
シートモジュールに対応したシート内に、ダブルクリックされたセル(t)に「管理フォルダ(fPath)を表示するハイパーリンク」を作成します。
セルには「開く」と表示します。
3. 完成
以上の内容で実現できます。
ハイパーリンクが設定されていない「フォルダ」の項目をダブルクリックするだけで、対象データの管理フォルダとハイパーリンクが自動で作成されます。

▼サンプルファイル▼

































































































