セルを選んでポチッと検索したい!
選択中のセルを取得して、Excel(エクセル)から直接ウェブブラウザ(Firefox, Chrome)を呼び出す方法です。
ExcelVBA(エクセルブイビーエー)のマクロで作りました。
ざっくり説明すると、セルのテキストからウェブサイトのURLを作って、それをブラウザに渡す感じです。そのコード例と解説です。
『銘柄リストのチェックを効率化したい!』
そのために、Excelでマクロ開発を考えていらっしゃる方の参考になれば幸いです。
マクロのコード例ってどんな感じ?
こんな感じです!ここで作った『SearchTwitter()』を、エクセルのクイックアクセスツールバーに追加して使います。
ウェブブラウザの実行ファイルパスだけ変更すれば、たぶん動くと思います。
コードのポイントは3つだけ。
- セルの値はどうやって取得するのか?
- どうやって日本語URLの文字化けを防ぐのか?
- どうやってブラウザを起動するのか?
以下のコード例は、セルのテキストでツイッターを検索する例です。
Excel 2007で開発しました。
'サーチツイッター関数
Sub SearchTwitter()
'ウェブブラウザの実行ファイルパスを定義
Dim browser_exe As String
'browser_exe = "F:\apps\FirefoxPortable\FirefoxPortable.exe"
browser_exe = "F:\apps\IronPortable64\IronPortable.exe"
'(※ ファイルパスは、ご自身の環境に合わせて変更してください。)
'ウェブブラウザの引数(ひきすう)を定義
Dim browser_param As String
browser_param = "" '今回は使わないので空(から)文字列を設定
'ウェブサイトのURL文字列を定義
'検索キーワードの前に来る部分と後ろに来る部分で、
'2つに分けて定義しておきます。
Dim url_1 As String
Dim url_2 As String
url_1 = "https://twitter.com/search?q="
url_2 = "" '今回は使わないので空(から)文字列を設定
'ウェブブラウザで開く
Call OpenBrowser(browser_exe, browser_param, url_1, url_2)
End Sub
'オープンブラウザ関数
Sub OpenBrowser( _
ByRef browser_exe As String, _
ByRef browser_param As String, _
ByRef url_1 As String, _
ByRef url_2 As String _
)
'■ OpenBrowser()が受け取った変数は何か?
'browser_exe: ブラウザの実行ファイルパス
'browser_param: ブラウザに渡す引数
'url_1: 検索キーワードの前に来るURL
'url_2: 検索キーワードのうしろに来るURL
'■ OpenBrowser()がすることは?
'選択中のセルからテキストを取得して、ウェブブラウザに渡す。
'■ どうやってやるの?
' 1. 選択中の『セル』を取得 ActiveWindow.RangeSelection
' 2. 複数選択してたら即終了 Exit Sub
' 3. 選択セルから『テキスト』を取得 .Value
' 4. テキストが文字化けしないようにエンコード encodeURIComponent()
' 5. URLを組み立てる 文字列連結
' 6. Shell()の引数を組み立てる 文字列連結
' 7. ブラウザを起動 Shell()
' 1. 選択中の『セル』を取得
Dim o_selection As Range
Set o_selection = ActiveWindow.RangeSelection
' 2. 複数選択してたら即終了
If o_selection.count <> 1 Then
Exit Sub
End If
' 3. 選択セルから『テキスト』を取得
'(このテキストが検索キーワードになります)
Dim t As String
t = o_selection.Value
If t = "" Then
Exit Sub
End If
' 4. テキストが文字化けしないようにエンコード
'(UnicodeのUTF-8エンコーディングの16進数に変換)
'(たとえば、『あ』は『%E3%81%82』になります)
'(半角スペースなら『%20』)
With CreateObject("ScriptControl")
.Language = "JavaScript"
t = .CodeObject.encodeURIComponent(t)
End With
' 5. URLを組み立てる
'(検索キーワードの後ろが空(から)文字列なら省略)
'(4つの連続ダブルクオーテーション『""""』は、
'1つのダブルクオーテーションを出すためのものです)
Dim site_url As String
If url_2 = "" Then
'検索キーワードの後ろを省略
site_url = """" & url_1 & t & """"
Else
site_url = """" & url_1 & t & url_2 & """"
End If
' 6. Shell()の引数を組み立てる
'(半角スペースで区切って連結しています)
Dim p As String
If browser_param = "" Then
p = """" & browser_exe & """" & " " & site_url
Else
p = """" & browser_exe & """" & " " & site_url & " " & browser_param
End If
' 7. ブラウザを起動 (windowstyleは省略)
Call Shell(p)
'(参考) シェル関数の引数
'Shell(pathname[,windowstyle])
'(参考) Shell()のエラー処理を作りこむなら、
'『On Error』や『Resume』などの機能を使います。
'(参考) 引数をメッセージボックスに表示
'MsgBox (p)
End Sub
どうやってツールバーに追加するの?
Excelのクイックアクセスツールバーで右クリックして、『クイック アクセス ツール バーのカスタマイズ(C)…』を選びます。
ひだり側の『コマンドの選択(C)』で『マクロ』を選びます。
『SearchTwitter』を選んで『追加(A) >>』ボタンを押すと追加できます。
みぎ側上部の『クイック アクセス ツール バーのカスタマイズ(Q)』は、『.xlsm』のファイル名を選ぶのがお勧めです。
もし、『すべてのドキュメントに適用』を選んで追加すると、関係のないファイルを開いたときにもマクロが表示されてしまいます。
これで、マクロが使えるようになりました。
(1)セルを選択して(2)ツールバーのアイコンを押せば、ブラウザが開いて『財務分析』をTwitterで検索してくれます。
以上です。
コード例ではツイッター検索を作りましたが、もともとは、4ケタの証券コードから各種情報サイトの銘柄ページを開くために作ったものです。
検索用のURLを変更すれば、さまざまなウェブサイトを簡単に開けるようになります。
また、シェル関数Shell()はブラウザ以外でも実行できますので、ExcelからPython(パイソン)にセルの内容を渡すといったこともできます。
そこから派生して、Excelから開示情報のPDFを正規表現で検索できるようにしたりと、いろいろな機能を作ってきました。
あれこれ作るのは大変でしたが、銘柄管理や開示情報のチェックはとても効率的になりましたね。『あの情報はどこに載ってたっけ?』を簡単に探し当てられるのは、やはり快適です。
マクロ開発の参考になれば幸いです。
(追記)コード例のコメント無しバージョン
見やすくするために、コメント部分を削除したものを作りました。実際のコード量は結構少ないです。
'サーチツイッター関数
Sub SearchTwitter()
Dim browser_exe As String
'browser_exe = "F:\apps\FirefoxPortable\FirefoxPortable.exe"
browser_exe = "F:\apps\IronPortable64\IronPortable.exe"
Dim browser_param As String
browser_param = ""
Dim url_1 As String
Dim url_2 As String
url_1 = "https://twitter.com/search?q="
url_2 = ""
Call OpenBrowser(browser_exe, browser_param, url_1, url_2)
End Sub
'オープンブラウザ関数
Sub OpenBrowser( _
ByRef browser_exe As String, _
ByRef browser_param As String, _
ByRef url_1 As String, _
ByRef url_2 As String _
)
Dim o_selection As Range
Set o_selection = ActiveWindow.RangeSelection
If o_selection.count <> 1 Then
Exit Sub
End If
Dim t As String
t = o_selection.Value
If t = "" Then
Exit Sub
End If
With CreateObject("ScriptControl")
.Language = "JavaScript"
t = .CodeObject.encodeURIComponent(t)
End With
Dim site_url As String
If url_2 = "" Then
site_url = """" & url_1 & t & """"
Else
site_url = """" & url_1 & t & url_2 & """"
End If
Dim p As String
If browser_param = "" Then
p = """" & browser_exe & """" & " " & site_url
Else
p = """" & browser_exe & """" & " " & site_url & " " & browser_param
End If
Call Shell(p)
End Sub