VBA コピペで使える!ハイパーリンクを不要でリンク化してHPを開く方法

この記事は約7分で読めます。

リンクを使わずに開くサムネイル

どうもマサヤです!

コード説明不要!サクッとコードだけ知りたい or 使いたい方向けの記事です。

いつのまにか「コピペで使える!」記事がシリーズ化しそうです)笑

 

さて今回は、「ハイパーリンクを付ける箇所が50個もある・・・一つずつ付けるのが面倒すぎる!」

数個ならハイパーリンクを付けるのは苦でもないですが、数十・数百個になってくると面倒極まりないですよね。

最近は大きなデータを扱う機会も増えてきて、WebサイトのURLを大量に取得してデータベース化するケースもあるかもしれません。

この場合、ハイパーリンクを手動で一つずつ貼るとかなり時間を要してしまいます。

 

そこで、こういった悩みをVBAでサクッとコピペで解決できるコードをご紹介します。

余計な説明が不要!そういうあなたは目次の【これをコピペ!】・・・をクリックしてくださいね。

 

スポンサーリンク

【これをコピペ!】ハイパーリンク不要でWebサイトを開く

 

早速、コードを紹介します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    '選択したセルがURLだった場合、Webサイトを開く関数を呼び出す
    If InStr(Cells(Target.Row, Target.Column), "http") Then
        Call NoHyperLink(Cells(Target.Row, Target.Column))
    End If

End Sub

Sub NoHyperLink(myUrl) 'ハイパーリンクを使わずにWebサイトを開く

    Set wsh = CreateObject("Wscript.Shell")
    wsh.Run myUrl
    Set wsh = Nothing

End Sub

 

コードの内容は、セルがクリックされた際、そのセル内に文字列がhttpを含んでいたらリンクと見なしWebサイトを開きます。

では、本コードの使用手順と解説していきます!

使用方法が解る方は、コードを自分好みにカスタマイズして利用してください。

 

【動画】使用手順

 

手順を説明する前に一連の操作の流れを動画でごらんください!

ハイパーリンク不要コード動画

動画では、Sheet1のD列にある当ブログの記事URLに対して、ハイパーリンクを使わずコードを使ってリンク化しています。

では、手順を説明していきます!・・・と、言っても3STEPで簡単ですよ!

 

手順1:VBEを起動

まずはExcelを開いた状態で『Alt+F11』を押してVBEを起動しましょう。

VBE起動画面

※VBE:Visual Basic Editorで、コードを書ける画面のことです。

 

手順2:URLが存在しているシートを選択

ここがポイントですね。

VBEの左上にあるMicrosoft Excel Objects箇所の下に、Excelに存在しているSheet一覧が並んでいるので、URLを書いてあるシートをクリックで選択してください。

VBEシート選択画面

今回、紹介しているコードではSheet1なので、Sheet1をクリックしています。

URLが入力されていないシートを選んでもコードは動きませんので注意しましょう。

 

手順3:コード画面へコピペ

先に上記コードをコピーしましょう。

その上で、VBE画面右の大きな白い画面内にコピーしたコードをペースト(貼付)しましょう。

VBEコード記入画面へコピペ

これで完成です。

Excel画面に戻ってURLが記入されている箇所をクリックして、ブラウザが起動してクリックしたURLのWebサイトが立ち上がれば成功です。

 

スポンサーリンク

コードの解説

 

これ以降は、VBAの知識についてもっと知りたい!といったアナタに向けた主要コードのポイント解説です。

これを知れば「VBAってこんなことが出来るんだ!」と知識が得られ、似たようなコード実装時に役立てることが出来ます。

自分で応用できれば、仕事の生産性をより上げることで出来るでしょう。

では、解説していきます。

 

セル選択時にプログラムを実行させる

今回紹介したコードの一番の肝とになります。

'選択したセルがURLだった場合、Webサイトを開く関数を呼び出す
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If InStr(Cells(Target.Row, Target.Column), "http") Then 
        Call NoHyperLink(Cells(Target.Row, Target.Column))  
    End If
End Sub

セル選択する度に、関数であるWorksheet_selectionChangeが実行されます。

 

Worksheet_selectionChangeとは

イベント関数(プロシージャ)の一つで、セルを選択する度にVBA発動(実行)します。

要するにVBA実行にボタンを用意する必要がないわけです。

 

特徴としては、選択したセル情報を持つ引数『Target』の存在です。

このTargetはセルの値だけでなく、書式・色・行・列・高さ・幅など様々なセルの情報を保持しています。

セル選択の度に変動するのでTargetの内容に応じて処理を分岐させることが可能となります。

 

今回コードの挙動は下記のようになります。

  1. 何かしらのセルが選択 or クリック。
  2. Worksheet_selectionChangeが発動し、コードを実行。
  3. 選択したセルにhttpという文字列が含まれているかをInstr関数で確認。
  4. 含まれていたらWebサイトを開かせるため、独自関数であるNoHyperLinkを実行。

Worksheet_selectionChangeの他にも、下記のようなイベント関数があります。

  • セルが更新されたら発動するWorksheet_Change
  • ダブルクリックで発動するWorksheet_BeforeDoubleClickなどがあります。

 

イベントプロシージャの使いどころ

今回のようなケース以外にも、選択したセルに応じて、別セルの値や状態などをリアルタイムで変動させたり、アラートをポップアップさせたり、オセロといったゲーム系に使ったりと色々使えますよ。

イベント関数を使うことで、「セルを選択してから、ボタンを押してVBA実行」といった2工程を、「セルを選択してVBA実行」といった1工程で処理することができます。

ボタンを押してVBA実行が有効な時ももちろんあるので、実現したい内容に合わせて使い分けましょう。

 

WSHのRunで、Webサイトを開く

では、次のポイントであるWSHのRunメソッドを説明します。

Set wsh = CreateObject("Wscript.Shell")
wsh.Run myUrl
Set wsh = Nothing

 

Runメソッドの構文

WSHオブジェクトのRunメソッドを使うことで、アプリを起動・実行させることができます。

wsh.Run   Command, [WindowStyle], [Wait]

  • Command  : 必須。アプリ名やファイル名を指定。
  • WindowStyle  : 省略可(省略時は1:ウインドウをアクティブにして表示)。ウインドウスタイルを指定。他にもありますが興味のある方は調べてみてください。
  • Wait : 省略可(省略時はFalse)。コマンドの終了を待つかを指定。これをうまく使えば非同期処理のようにタスクを複数走らせることができますが、今回はそこまでのコードでは無いので触れません。

今回のようにブラウザを起動してWebサイトを開く以外にも、メモ帳等の他のアプリを起動することもできます。

 

例えば、メモ帳を起動するコードは下記となります。

wsh.Run "notepad"

もちろん、下記のようにファイル名を指定しても起動できます。

wsh.Run "C:\Users\Desktop\aaa.txt"

 

WSHオブジェクトとは

WSHオブジェクトでは、Runメソッド以外にも特殊フォルダを取得したり、指定したアプリのウインドウをアクティブにしたり等のメソッドが用意されてます。

例えば、利用者デスクトップのパスを取得できるメソッド『SpecialFolders』があります。

デスクトップにファイル保存したいけど、事前に利用者のデスクトップパスが事前にわからない時に使います。

 

まとめ

 

ハイパーリンクを使わずに、Webサイトを起動させる方法をお伝えしました!

ハイパーリンクを手動で付けるといった単純作業は時間の浪費なので、リンクが多い場合などは是非使ってみてくださいね。

そして、浮いた時間を他の仕事やプライベートに使ってくださいね。

コメント