VBAでフォルダ内のサブフォルダのハイパーリンクをエクセルへ出力します。
ハイパーリンクをクリックすることで、各フォルダを開くVBAプログラムを紹介します。
・エクセルには、サブフォルダのハイパーリンクを挿入
以下で詳しく説明していきます。
目次
フォルダ内のサブフォルダをエクセルに出力してハイパーリンク挿入
この事例では、フォルダ内のサブフォルダをエクセルに出力し、そのハイパーリンクも挿入します。
ハイパーリンクは各フォルダにリンクしており、ここからフォルダを開くことができます。
VBAプログラムの紹介
今回紹介するプログラムは以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
'プログラム0|変数宣言の指定 Option Explicit 'プログラムA-1|メインプログラム開始 Sub Main() 'プログラムA-2|シートの設定 Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") 'プログラムA-3|情報を取得するフォルダURLを取得 Dim path As String path = ws.Range("B2").Value 'プログラムA-4|プログラムBを呼び出す Call GetSubFoldersFilesName(ws, path, 0, 0) 'プログラムA-5|プログラム終了 End Sub 'プログラムB-1|サブプログラム開始 Sub GetSubFoldersFilesName(ws, path, i, j) 'プログラムB-2|FileSystemObjectの設定 Dim fs As Scripting.FileSystemObject Set fs = New Scripting.FileSystemObject 'プログラムB-3|フォルダを取得 Dim basefolder As Scripting.Folder Set basefolder = fs.GetFolder(path) 'プログラムB-4|フォルダ内のフォルダを取得 Dim myfolders As Scripting.Folders Set myfolders = basefolder.SubFolders Dim myfolder As Scripting.Folder For Each myfolder In myfolders 'プログラムB-5|対象セルを設定 Dim rng As Range Set rng = ws.Range("A5").Offset(i, j) 'プログラムB-6|対象セルにフォルダ名を入力 rng.Value = myfolder.Name 'プログラムB-7|対象セルにハイパーリンク挿入 ws.Hyperlinks.Add Anchor:=rng, Address:=myfolder.path 'プログラムB-8|オブジェクト解放 Set rng = Nothing 'プログラムB-9|カウントアップ i = i + 1 'プログラムB-10|再帰的にプログラムBを呼び出す Call GetSubFoldersFilesName(ws, myfolder.path, i, j + 1) Next 'プログラムB-11|オブジェクト解放 Set myfolder = Nothing Set myfolders = Nothing Set basefolder = Nothing Set fs = Nothing 'プログラムB-12|プログラム終了 End Sub |
上記のプログラムは以下のページで紹介したVBAプログラムを参考に作成しています。
上記のページと異なる点は、以下のプログラムB-5~プログラムB-9です。
したがって、この部分のみ説明をします。
プログラムB-5|対象セルを設定
1 2 |
Dim rng As Range Set rng = ws.Range("A5").Offset(i, j) |
変数rngをRange型のオブジェクトで定義します。
「Set rng = ws.Range(“A5”).Offset(i, j)」で、セルA5からi行、j列ずれたセルをrngとして扱います。
iとjでエクセルの行列とフォルダ階層を連動させます。
プログラムB-6|対象セルにフォルダ名を入力
1 |
rng.Value = myfolder.Name |
プログラムB-5で設定したrngのセルに、フォルダ名(myfolder.Name)を出力します。
プログラムB-7|対象セルにハイパーリンク挿入
1 |
ws.Hyperlinks.Add Anchor:=rng, Address:=myfolder.path |
プログラムB-6で書き出したフォルダ名に、ハイパーリンクを挿入しています。
プログラムB-8|オブジェクト解放
1 |
Set rng = Nothing |
プログラムB-5で設定したrngのオブジェクトを解放します。
プログラムB-9|カウントアップ
1 |
i = i + 1 |
iを1ずつ加算して、カウントアップしていきます。
これによりフォルダ名を出力するたびに、セルを1行ずつ下にずらしていきます。
上記以外のプログラムは基本的に以下のページで紹介した内容を同じなので、省略します。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAでフォルダ操作する事例
VBAでフォルダを操作する事例について、以下で紹介しています。
本サイトで紹介しているVBAプログラムと解説ページ
内容としては、以下について紹介しています。
マクロVBAでセルの値(エクセル)で同じ階層に複数フォルダ一括作成
VBAで複数フォルダを階層別に一括作成|エクセルマクロ×フォルダ操作
VBAでフォルダ内のファイル名を取得!再帰的に階層別にサブフォルダも対象にしてエクセルへ一覧を出力
VBAでフォルダ内のファイル名とサブフォルダを取得し一覧化|拡張子も出力する方法
VBAでサブフォルダ含めフォルダ名とファイル名をテキストファイル出力
VBA×ファイル操作|フォルダ名とファイル名をテキストファイルへ出力
VBAでフォルダ内のフォルダ名・ファイル名を一括変更(まとめて変換)
VBAでShellを使ってフォルダを開く|最前面に表示(アクティブ化)
VBAでダイアログからフォルダ選択し複数ファイル名を取得・表示|エクセルに一覧化
VBAでフォルダ内のエクセルファイルを全てに処理するマクロを紹介
VBAでフォルダ内の全てのエクセルデータを一つにまとめる(集約)
エクセルVBA×Text|テキストファイルの文字列を一斉置換・変換
VBAでフォルダ内のファイル数とフォルダ数をカウントしてExcelに出力
VBAでフォルダ内のファイルや特定フォルダ(ファイルごと)一括削除
VBAで複数フォルダのセットを一括コピー(フォルダの名前変更も実行)
エクセルVBAで請求書PDF作成|複数の取引先別に自動転記(マクロテンプレートあり)
エクセルマクロVBAで資料送付状(Word)の作成・印刷を効率化
VBAでWord議事録メモを作成して最前面表示!ファイルコピーと一覧化で整理整頓
エクセルファイルをダウンロードしてそのままVBAを使えるようにしているので、ぜひご活用ください。