Excelのセルにハイパーリンクを設定し、一括削除するVBA/マクロ便利Tips

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、HyperlinksオブジェクトのAddメソッドでセル内の文字列にWebサイトのURLを設定し、Deleteメソッドでリンクを一括削除する方法を解説します。

» 2014年07月01日 18時00分 公開
[薬師寺国安ITmedia]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprize(64ビット)+Excel 2013


 今回は「ハイパーリンク」に関するTipsを紹介しよう。

 まずは「ハイパーリンクの挿入」から解説していくが、「ハイパーリンクの挿入」は一体どんな場面で利用できるだろうか。

 例えば、お得意先がWebサイトを立ち上げたときに、管理するお得意先名のデータが何百件あるとしても、Excelで各社のWebサイト名を管理できるのではないだろうか。

 Excelで「サイト名」「URL」を入力するセルを作り、データを入力して「OK」ボタンをクリックすると、順次、お客さまのURLがデータとして登録されていくようにすればいいのではないだろうか。

 次に、「ハイパーリンクの削除」について解説しよう。

 例えば、お得意先名と、そのWebサイト名、URLを関連付けて表示させていても、「お得意先名の一覧」だけを印刷したい場合などが当てはまるのではないだろうか。そうした際に、ボタン1つクリックするだけで、ハイパーリンクが削除できれば便利になるはずだ。

HyperlinksオブジェクトのAddメソッドでハイパーリンクを設定

 今回作成するサンプルでは、Sheet1の次にSheet2を追加し、このSheet2を「サイト登録」という名前に変更しておく。Sheetを追加するには、以下の図1に示した赤丸で囲んだアイコンをクリックするだけだ。

 「Sheet1」には、図1のような「サイト名」と「URL」を入力するセルと、「OK」ボタンがある。また「サイト登録」シートには「サイト名」のデータを表示させるセルを用意しておく。

図1 「サイト名」「URL」「OK」ボタンの表示されたシート(Sheet1)と「サイト名」と表示された「サイト登録」シートが用意されている

 ハイパーリンクを設定するには、下記のような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
リスト1 入力したハイパーリンクのデータを順次登録していくコード

 「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のように表示される。

図2 「サイト名」と「URL」を入力して「OK」ボタンをクリックし、「サイト登録」シートにハイパーリンクが順次登録されていった

HyperlinksオブジェクトのDeleteメソッドでハイパーリンクを一括削除

 ハイパーリンクはお得意先のWebサイトを管理するのには大変便利だが、お得意先名だけを印刷したい場合など、ハイパーリンクが邪魔になることがある。そこで、「リンクの削除」という角丸四角形のボタンを配置して、このボタンをクリックすることで、ハイパーリングを一括削除できるマクロを紹介しよう。

 図3のように「顧客サイト」としてハイパーリンクの設定された得意先名があったとしよう。

図3 「顧客サイト」にお得意先名が表示されハイパーリンクでWebサイトのURLがリンク付けされている

 「リンクの削除」ボタンをクリックしてハイパーリンクを削除するには下記の書式を使用する。

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
リスト2 ハイパーリンクを削除するコード

 お得意先名の入力されている「B3」から「B6」のセルに対して、Hyperlinks.Deleteメソッドでハイパーリンクを削除する。

 このマクロを「リンクの削除」ボタンに関連付け、「リンクの削除」ボタンをクリックすると、図4のように表示される

図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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。