業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、「その他のコントロール」を追加する方法に加えて、WebBrowserコントロールの追加の仕方と、URLを開くNavigateメソッドの使い方を解説します。
今回は「リストビュー」や「ツリービュー」のコントロールについて解説する予定だったのだが、残念ながら64ビット版のExcelでは、これらのコントロールは使用できないようである。
筆者のExcelのバージョンを調べてみると、図1のように「64ビット」と表示されている。
Excel VBAで「リストビュー」「ツリービュー」を使用可能にするには、[開発]タブからVBE(Visual Basic Editor)を起動させ、[挿入]→[ユーザーフォーム]を選択して「フォーム」を追加する。そして、同時に表示される「ツールボックス」上にマウスカーソルを持っていき、マウスの右クリックで表示される、「その他のコントロール」を選択する。
通常なら、この画面に「リストビュー」なら「Microsoft ListView Control 6.0」が表示され、また「ツリービュー」なら「Microsoft TreeView Control 6.0」が表示されるはずであるが、筆者のExcel 2013 64ビット版では何も表示されていない(図2)。
いろいろWebで調べると、「リストビュー」は64ビット版のExcelでは使用できない旨の情報を発見したが、「ツリービュー」に関しては、はっきりとした情報を見つけることができなかった。しかし、図2の「コントロールの追加」に、該当するコントロールが表示されない以上、使用できないと判断する以外にないだろう。
このことは、今後、VBAでの開発を行う上で知っておくとよいと思う。読者の皆さんのExcelが32ビット版か64ビット版かをぜひ確認していただきたい。
ここからは、追加できる「その他のコントロール」のうち、WebBrowserコントロールの使い方を解説する。
WebBorowserコントロールを使用可能にするためには、図2の「コントロールの追加」の中に「Microsoft Web Browser」コントロールがあるので、これにチェックを付ける。すると「ツールボックス」にWebBrowserコントロールのアイコンが追加される(図3)
新しい、「WebBorwser」という名前のシートを追加し、その中に「タイトル」と「URL」を記述したデータと、「ブラウザ起動」ボタンを配置する(図4)。
次に、ユーザーフォームを作成し、UserForm1のCaptionプロパティに、「ブラウザフォーム」と指定しておく。
ユーザーフォーム上には「リストボックス」を1個と、「WebBrowser」コントロールを1個配置しておく。
「リストボックス」の「オブジェクト名」には「タイトルリストボックス」としておく。「WebBrowser」コントロールはデフォルトの「WebBrowser1」のままにしている。
今回は、UserForm1を画面一杯に広げ、コントロールを図5のように配置している。
WebBrowserコントロールでURLを開くNavigateメソッドの書式は下記の通りだ。
{オブジェクト}.Navigate {URL}
{オブジェクト}には、WebBrowserオブジェクトを指定する。{URL}には、表示したいサイトのアドレスを指定する。
まず、ユーザーフォームがアクティブになったときに、「タイトルリストボックス」に、図4の「タイトル」を表示させるコードはリスト1だ。UserForm_Activateイベント内に記述する。
Option Explicit Private Sub UserForm_Activate() Dim i As Integer For i = 3 To 12 タイトルリストボックス.AddItem Cells(i, 2) Next End Sub
まず3行目でInteger型の変数「i」を宣言し、4〜6行目で変数「i」を「3」から「12」まで繰り返す。この値は「行番号」に該当する。
5行目で「タイトルリストボックス」に、AddItemメソッドで、「i」行目の「2列目(B列)」のデータを追加する。これで、「タイトルリストボックス」にタイトルが表示される。
次に「タイトルリストボックス」から、「タイトル」が選択されたときのコードはリスト2になる。タイトルリストボックス_Changeイベント内に記述する。
Private Sub タイトルリストボックス_Change() Dim URL As String URL = Cells(タイトルリストボックス.ListIndex + 3, 3) UserForm1.WebBrowser1.Navigate URL End Sub
まず2行目で文字列型の変数「URL」を宣言する。3行目では、変数「URL」には、図4の「URL」のアドレスを格納しておく。
4行目でUserForm1のWebBrowser1コントロールのNavigateメソッドで、変数「URL」が格納されているサイトに遷移する。
次に、Module1内にリスト3のコードを追加する。
Sub ブラウザ起動フォーム() UserForm1.Show vbModeless End Sub
ShowメソッドでUserForm1をモードレスで表示する。
リスト3のコードを図4の「ブラウザ起動」ボタンに関連付け、実行した結果が図6だ。
今回のサンプルは、実際の日常業務に必要なTipsかを問われれば、直接は関係のないTipsの紹介だったかもしれない。しかし「ExcelのVBAを使用すると、こういった処理も実現できるのだ」という学びになったと思う。
今回のTipsをカスタマイズすることで、読者の皆さんの今後の業務に役に立つことがきっとあると思う。
次回からは、Excelの関数に関する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)。
Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。
Copyright © ITmedia, Inc. All Rights Reserved.