どうもマサヤです!
コード説明不要!サクッとコードだけ知りたい 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:Visual Basic Editorで、コードを書ける画面のことです。
手順2:URLが存在しているシートを選択
ここがポイントですね。
VBEの左上にあるMicrosoft Excel Objects箇所の下に、Excelに存在しているSheet一覧が並んでいるので、URLを書いてあるシートをクリックで選択してください。
今回、紹介しているコードではSheet1なので、Sheet1をクリックしています。
手順3:コード画面へコピペ
先に上記コードをコピーしましょう。
その上で、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の内容に応じて処理を分岐させることが可能となります。
今回コードの挙動は下記のようになります。
- 何かしらのセルが選択 or クリック。
- Worksheet_selectionChangeが発動し、コードを実行。
- 選択したセルにhttpという文字列が含まれているかをInstr関数で確認。
- 含まれていたらWebサイトを開かせるため、独自関数であるNoHyperLinkを実行。
イベントプロシージャの使いどころ
今回のようなケース以外にも、選択したセルに応じて、別セルの値や状態などをリアルタイムで変動させたり、アラートをポップアップさせたり、オセロといったゲーム系に使ったりと色々使えますよ。
イベント関数を使うことで、「セルを選択してから、ボタンを押してVBA実行」といった2工程を、「セルを選択してVBA実行」といった1工程で処理することができます。
ボタンを押してVBA実行が有効な時ももちろんあるので、実現したい内容に合わせて使い分けましょう。
WSHのRunで、Webサイトを開く
では、次のポイントであるWSHのRunメソッドを説明します。
Set wsh = CreateObject("Wscript.Shell") wsh.Run myUrl Set wsh = Nothing
Runメソッドの構文
WSHオブジェクトのRunメソッドを使うことで、アプリを起動・実行させることができます。
今回のようにブラウザを起動してWebサイトを開く以外にも、メモ帳等の他のアプリを起動することもできます。
例えば、メモ帳を起動するコードは下記となります。
wsh.Run "notepad"
もちろん、下記のようにファイル名を指定しても起動できます。
wsh.Run "C:\Users\Desktop\aaa.txt"
WSHオブジェクトとは
WSHオブジェクトでは、Runメソッド以外にも特殊フォルダを取得したり、指定したアプリのウインドウをアクティブにしたり等のメソッドが用意されてます。
例えば、利用者デスクトップのパスを取得できるメソッド『SpecialFolders』があります。
デスクトップにファイル保存したいけど、事前に利用者のデスクトップパスが事前にわからない時に使います。
まとめ
ハイパーリンクを使わずに、Webサイトを起動させる方法をお伝えしました!
ハイパーリンクを手動で付けるといった単純作業は時間の浪費なので、リンクが多い場合などは是非使ってみてくださいね。
そして、浮いた時間を他の仕事やプライベートに使ってくださいね。
コメント