器用貧乏の独り言

器用貧乏なおっさんが気の向くままに。

【VBA】フォームコントロールのボタンを使ったリンク集

◇前置き

先日、いろんなところに保存されたExcelを開くためのショートカット集を作ってほしいという依頼があり、ショートカット集を作る機会がありました。

最初は「ハイパーリンクでいいや」と思っていたのですが、「見た目がかっこ悪い!」的な指摘を受け、コントロールフォームのボタンを採用することになりました。

今日はボタンに登録したマクロのコードを紹介します。

◇概要

今回のショートカット集はこんな感じです。
※仕事で作った実物はファイルパスを別シートに記載しています。
 ↑分かりやすいようにボタンの隣に並べてみました。

F列にファイルパスを入力すると対応するボタンにリンクが張られます。

ソースコード

ソースコードはこんな感じです。

Sub Link1()
 
   Dim book1 As Workbook
   Set book1 = ActiveWorkbook
   Workbooks.Open Filename:=Range("F4").Value
   
End Sub
 
Sub Link2()
 
   Dim book1 As Workbook
   Set book1 = ActiveWorkbook
   Workbooks.Open Filename:=Range("F5").Value
   
End Sub
 
Sub Link3()
 
   Dim book1 As Workbook
   Set book1 = ActiveWorkbook
   Workbooks.Open Filename:=Range("F6").Value
   
End Sub
 
Sub Link4()
 
   Dim book1 As Workbook
   Set book1 = ActiveWorkbook
   Workbooks.Open Filename:=Range("F7").Value
       
End Sub

この仕様だと1ボタンに1プロシージャ必要です。
今回の例ではボタンを4つ配置しているのでプロシージャも4つ用意します。

それぞれのプロシージャで内容が異なるのはここだけです。

Workbooks.Open Filename:=Range("F4").Value

Range()でファイルパスを参照しているので、ここの中身だけ合わせてあげればコピペで何個でもプロシージャを増やせます。

◇使い方

実際に動かしていきましょう。
今回はデスクトップに「リンク先」というフォルダを作り、その中に適当なExcelファイルを4つ用意しました。

※実際に使う時はリンク先がバラバラでもOKです。

まずはF列にファイルパスを入力します。

リンク①をクリックしてみると……

無事リンク先のリンク①.xlsxが開きました!

◇最後に

リンクを貼るだけならハイパーリンクの方が楽なのですが、見た目的にはボタンの方が多少スッキリしますね。

ファイルパスについてはVBEから直打ちでも良いのですが、そうすると使用感がハイパーリンクに劣ってしまう気がします。
※いちいちVBEを開かないとリンク先の編集ができませんから。

そこで今回は、特定のセルに入力したファイルパスをRange()でプログラム中に反映させる手法を用いました。

使う人がVBAを使えないケースも往々にしてありますので、こういった工夫は意外と大切だと思います。

※そもそも自分でコードをかける人は、わざわざこんなこと頼んできませんよね。

この記事も誰かの役に立つと嬉しいです。