Excelのセルにハイパーリンクを設定し、一括削除する:VBA/マクロ便利Tips
業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、HyperlinksオブジェクトのAddメソッドでセル内の文字列にWebサイトのURLを設定し、Deleteメソッドでリンクを一括削除する方法を解説します。
今回は「ハイパーリンク」に関するTipsを紹介しよう。
まずは「ハイパーリンクの挿入」から解説していくが、「ハイパーリンクの挿入」は一体どんな場面で利用できるだろうか。
例えば、お得意先がWebサイトを立ち上げたときに、管理するお得意先名のデータが何百件あるとしても、Excelで各社のWebサイト名を管理できるのではないだろうか。
Excelで「サイト名」「URL」を入力するセルを作り、データを入力して「OK」ボタンをクリックすると、順次、お客さまのURLがデータとして登録されていくようにすればいいのではないだろうか。
次に、「ハイパーリンクの削除」について解説しよう。
例えば、お得意先名と、そのWebサイト名、URLを関連付けて表示させていても、「お得意先名の一覧」だけを印刷したい場合などが当てはまるのではないだろうか。そうした際に、ボタン1つクリックするだけで、ハイパーリンクが削除できれば便利になるはずだ。
HyperlinksオブジェクトのAddメソッドでハイパーリンクを設定
今回作成するサンプルでは、Sheet1の次にSheet2を追加し、このSheet2を「サイト登録」という名前に変更しておく。Sheetを追加するには、以下の図1に示した赤丸で囲んだアイコンをクリックするだけだ。
「Sheet1」には、図1のような「サイト名」と「URL」を入力するセルと、「OK」ボタンがある。また「サイト登録」シートには「サイト名」のデータを表示させるセルを用意しておく。
ハイパーリンクを設定するには、下記のようなHyperlinksオブジェクトのAddメソッドを使う。
HyperlinksオブジェクトのAddメソッドの書式
Hyperlinks.Add Anchor:={Anchor},Address:={Address},TextToDisplay:={TextToDisplay}
{Anchor}にはハイパーリンクのアンカーを指定する。セル(Rangeオブジェクト)やShapeオブジェクトを指定する。必須項目だ。{Address}にはハイパーリンクのアドレスを指定する。これも必須項目だ。
{TextToDisplay}には、ハイパーリンクで表示されるテキストを指定する。これは、省略可能だ。
こうしたAddメソッドをVBE(Visual Basic Editor)に入力する。コードは以下のリスト1だ。これで、図1のような、各「サイト名」「URL」を入力して、「OK」ボタンをクリックし、「サイト登録」シートにデータが順次登録されていく仕組みが完成する。
Sub ハイパーリンクの挿入() If Range("H2").Value = "" Or Range("H3").Value = "" Then MsgBox "「サイト名」と「URL]を入力してください。" Exit Sub Else Dim lastRow As Long With Worksheets("サイト登録") lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 .Cells(lastRow, 1).Hyperlinks.Add Anchor:=.Cells(lastRow, 1), _ Address:=Range("H3").Value, _ TextToDisplay:=Range("H2").Value End With End If Worksheets("サイト登録").Select End Sub
「Sheet1」の「サイト名」または「URL」にデータが入力されていない場合は、警告メッセージを表示して処理を抜ける。
きちんとデータが入力されている場合は、まず、Long型の変数lastRowを宣言しておく。
次に、記事「Excelの基本オブジェクト「セル」の参照、移動、コピー、選択、挿入、削除」でも解説した、終端セルを参照するEndプロパティを使用して、「サイト登録」シートの「A列」の最終行から上方向の終端セルを選択し、すなわち「A列」の最終行を取得してデータが入っていると、次の行にデータが追加されるようにする。
このためには、まず「A列」のセルに順次データが追加されるように、Hyperlinks.Addメソッドを使って、{Anchor}に「.Cells(lastRow,1)」と指定する。これで変数lastRow行の1列目のセル(A列)から順次データが追加されていくことになる。{Address}には「H3」セルに入力された値を指定、{TextToDisplay}には「H2」セルに入力された値を指定している。
なお、VBAでは引数を改行して表す際に「_」で連結するので、覚えておくといいだろう。
これで、「サイト名」「URL」を入力して「OK」ボタンをクリックすると、「サイト登録」シートにハイパーリンクが順次登録されていく。
このマクロを「OK」ボタンに関連付けて実行すると、図2のように表示される。
HyperlinksオブジェクトのDeleteメソッドでハイパーリンクを一括削除
ハイパーリンクはお得意先のWebサイトを管理するのには大変便利だが、お得意先名だけを印刷したい場合など、ハイパーリンクが邪魔になることがある。そこで、「リンクの削除」という角丸四角形のボタンを配置して、このボタンをクリックすることで、ハイパーリングを一括削除できるマクロを紹介しよう。
図3のように「顧客サイト」としてハイパーリンクの設定された得意先名があったとしよう。
「リンクの削除」ボタンをクリックしてハイパーリンクを削除するには下記の書式を使用する。
HyperlinksオブジェクトのDeleteメソッドの書式
Hyperlinks.Delete
VBEを起動してModule1内にリスト2のコードを記述する。
Option Explicit Sub ハイパーリンクの削除() With Range("B3:B6") .Hyperlinks.Delete .Font.Name = "Meiryo UI" .Font.Size = 18 End With End Sub
お得意先名の入力されている「B3」から「B6」のセルに対して、Hyperlinks.Deleteメソッドでハイパーリンクを削除する。
このマクロを「リンクの削除」ボタンに関連付け、「リンクの削除」ボタンをクリックすると、図4のように表示される
次回もハイパーリンクに関するTips
今回はハイパーリンクの設定と削除のTipsを紹介したが、いかがだっただろうか。なお、Deleteメソッドを使うと、そのセルに設定していた書式も削除されるため、再度「書体」「文字サイズ」を設定し直している。けい線も削除されるが、けい線の再設定は行っていない。記事「セルの数値、フォント、文字位置、背景色、けい線など表示形式/書式設定の使い方」の「セルのけい線の設定」などを参照して、各自でけい線の設定を試してほしい。
次回は、引き続きハイパーリンクに関するTipsを紹介する。メールアドレスや別シートの任意のセルにリンクするTipsなので、お楽しみに。
著者プロフィール
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Copyright © ITmedia, Inc. All Rights Reserved.