The Tips for Developers > ADO から EXCEL を検索する方法

ADOからEXCELを検索する方法(最終更新日 2002/02/23)

UDL ファイルの作成
ADO 経由で EXCEL にアクセスする際、接続文字列による接続か、UDL ファイルによる接続の二種類がある。ここでは、UDL ファイルを使用した接続方法を紹介する。(UDL ファイルの作成の概要に関しては、「UDLファイルの作り方」を参照。)

まず、「プロバイダ」タブを指定し、OLEプロバイダの中から、「Microsoft Jet 4.0 OLE DB Provider」を選択する。

次に「接続」タブを指定し、対象のEXCELファイルを指定する。

このとき、対象のEXCELファイルがパスワード保護されていないことを確認する。パスワード保護されている場合は、正しいパスワードを入力しても、エラーが発生してしまう。

次に、「すべて」タブを選択し、「Extended Properties」の値を「値の編集」ボタンを押下して、「Excel 8.0;」と変更する。

最後に接続のテストを行い、接続に成功することを確認する。
VB側アプリケーションの設計
UDLファイルが正常に接続できれば、VBアプリケーションの作成になるわけだが、通常のADOによる設計と全く同じである。

例として、このファイルを検索するアプリケーションを作成する。(年を入力し、その年の出来事を表示する。)

まず、Form のソース内の Private 変数として、ADO の Connection 変数を定義する。
01: Option Explicit
02: Private cn As ADODB.Connection
次に、Form が Load されたときのコードを記載する。
01: Private Sub Form_Load()
02:     Dim rs As ADODB.Recordset
03:     Dim rCount As Long
04:
05:     Set cn = New ADODB.Connection
06:
07:     cn.ConnectionString = "File Name=.\roma.udl"
08:     cn.Open
09:
10:     Set rs = cn.Execute("select * from [EVENTSHEET$]", _
11:                        rCount, adCmdText)
12:
13:     rs.MoveFirst
14:     Do While (rs.EOF = False)
15:          Combo1.AddItem (rs!年)
16:          rs.MoveNext
17:     Loop
18:
19:     Set rs = Nothing
20: End Sub
まず、Connection 変数の実体を作成し(5行目)、ConnectionString プロパティに上記で作成した UDL ファイルを指定する(7行目)。

Connection をオープンしたのち、Excel シートから、全レコードを検索している(10〜11行目)。この際のSQL文だが、対象テーブル名は [(シート名)$] と記述する。
(上記例では、シート名が EVENTSHEET なので、[EVENTSHEET$] となっている。)

Execute メソッドの戻り値を rs という Recordset オブジェクト変数に代入し、コンボボックスに「年」情報を編集している(10〜17行目)。

次に検索ボタンを押下した際のコードは以下のようにしてある。
01: Private Sub Command1_Click()
02:    Dim SqlStr As String
03:    Dim rCount As Long
04:    Dim rs As ADODB.Recordset
05:
06:    SqlStr = "select 事項 from [EVENTSHEET$] where 年 = '" & _
07:                    Combo1.Text & "'"
08:
09:    Set rs = cn.Execute(SqlStr, rCount, adCmdText)
10:
11:    Label1.Caption = rs!事項
12:
13:    Set rs = Nothing
14:
15: End Sub
Form を Load した際のコードと全く同様であるので、説明は省略する。


サンプルプログラム
roma.lzh へのリンク