1.セル内のURLを開く
特定の特許の詳細をJ-platpatで参照しようとしたとき、所定の形式でURL化することでWebページが開けます。たとえば特開2023-123456のページは
https://www.j-platpat.inpit.go.jp/c1801/PU/JP-2023-123456/11/ja
で開けます。URLをExcelのセルにハイパーリンクとして埋め込んでワンクリックで開くこともできます。
2.セル内の複数のURLを一気に開く
しかしながら以下のように、1つのセルに複数のURLを記入した場合はハイパーリンクが動作しません。
今回やろうとしていることは「複数のJ-platpatのURLを1つのセルに記入して、ワンクリックで複数のWebページを一気に開く」処理です。
サンプルデータとしてURLリストをtxt形式で貼りつけました。メモ帳にコピペしてエンコード「ANSI」で保存、拡張子(txt)をcsvにするとExcelで開けます。
https://www.j-platpat.inpit.go.jp/c1801/PU/JP-2018-012345/19/ja
"https://www.j-platpat.inpit.go.jp/c1801/PU/JP-2021-012345/10/ja
https://www.j-platpat.inpit.go.jp/c1801/PU/JP-2023-123456/11/ja"
上記サンプルをExcelで開き、マクロ有効のファイル形式(sample.xlsm)で保存、VBEを開いて、プロジェクトウインドウのSheet1をダブルクリックします。
プログラム編集ウインドウ(コードウインドウ)に以下のVBAコードを貼付けます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'ダブルクリックで起動
Dim arr() As String
Dim a As String
Dim item As Variant
If Target.Column = 1 Then '任意のキー入力検知対象の列番号を設定
a = Cells(Target.Row, Target.Column).Value 'ダブルクリックしたセルの値を変数aに代入
a = Replace(a, vbCrLf, vbLf) '改行コードをLFに統一する
arr = Split(a, vbLf) '改行コードで文字列を分割する
For Each item In arr
CreateObject("WScript.Shell").Run ("chrome.exe -url " & item) 'chromeでURLを開く
Application.Wait Now() + TimeValue("00:00:01") '1秒待機
Next item
End If
End Sub
Sheet1を開いて、
A1セルをダブルクリックするとA1セルのURLに対応するJ-platpatのWebページが1つ開き、
A2セルをダブルクリックすると、A2セル内の2つのURLに対応するJ-platpatのWebページが2つ開きます。(セル内の2つのURLはセル内改行で区分されている)
ただA1セルのようにURLが1つの場合だと副作用があります(後で説明)
プログラムのポイント
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
→セルをダブルクリックしたときにVBAが起動します
If Target.Column = 1 Then
→1列目(A列)のセルがダブルクリックされたら、それ以降の処理を実行します。
今回の処理のポイントとなる部分は、改行コードで文字列を分割(split)し文字列ごとにループ処理(For Each item In arr)してブラウザを開くコマンドにURLを渡す以下の処理になります。
arr = Split(a, vbLf) '改行コードで文字列を分割する
For Each item In arr
CreateObject("WScript.Shell").Run ("chrome.exe -url " & item) 'chromeでURLを開く
サンプルデータのようなテキストデータにおける改行コード(CRLF)とExcelのセル内でalt+Enterで改行する場合の改行コード(LF)は違うので、CRLFをLFに変換(replace)しておき、その後の処理ではすべてLFとして処理するようにしました。
(注意事項)
A1セルのようなURLが1つの場合だと、1回ダブルクリックするとオートコンプリートで勝手にハイパーリンクになってしまうことがあります。いったんこうなると次回から同じURLについてハイパーリンクとVBAの2つの処理が実行され、同じWebページが2つ開いてしまいます。
オートコンプリートを防止するには一般的には①Excelのオートコンプリートの設定をオフにする ②セル内文字列の先頭に「’」をつける
などの方法がありますが、一番簡単なのはURLが入っているセルをB列にしてA列はB列を参照するセルにしてしまいそれをダブルクリックする方法かと思います。単なる参照セルなので勝手にハイパーリンクになったりしません。
3.最後に
1つのセルに複数の情報を詰め込むのは原則あまり推奨されないようですが、実務上どうしてもこのように使いたい場合もあり、VBAの優れた文字列処理機能のおかげで今回実現できました。
今回の記事が何らかの助けになれば幸いです。