ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO)

文書翻訳 文書翻訳
文書番号: 278973 - 対象製品
すべて展開する | すべて折りたたむ

概要

ExcelADO.exe は、ActiveX データ オブジェクト (ADO) と Microsoft Jet OLE DB 4.0 プロバイダを使用して、Microsoft Excel ブックのデータの読み取りおよび書き込みを行う方法を示したサンプル プログラムです。

詳細

下記のファイルは、「Microsoft ダウンロード センター」からダウンロードできます。
ExcelADO.exe
リリース日 : 2000 年 12 月 12 日

マイクロソフトのサポート ファイルのダウンロード方法を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
119591 オンライン サービスからマイクロソフトのサポート ファイルを入手する方法
マイクロソフトでは、アップロード時点の最新のウイルス検査プログラムを使用して、配布ファイルのウイルス チェックを行っています。配布ファイルはセキュリティで保護されたサーバー上に置かれており、権限のない第三者が無断でファイルを変更できないようになっています。

ADO の利点

Excel を利用した開発で、Excel ブックへのデータ転送や Excel ブックからのデータ取得に ADO を使用する場合、Excel のオートメーションを使用する場合と比較して、以下のようないくつかの利点があります。
  • パフォーマンス : Microsoft Excel は、アウトプロセス ActiveX サーバーです。ADO はインプロセスで実行されるため、リソース消費量の多いアウトプロセスを呼び出した場合のオーバーヘッドが生じません。
  • スケーラビリティ : Web アプリケーションの場合、Microsoft Excel のオートメーション化が望ましくない場合もあります。ADO は、より高いスケーラビリティを持つ、ブックのデータ処理のソリューションです。
ADO は、ブックに生データを転送する場合にのみ使用できます。ADO を使用して、セルに書式または数式を適用することはできません。ただし、あらかじめ書式が設定されているブックにデータを転送した場合、ブックの書式は保持されます。データの挿入後に、条件付き書式を設定する必要がある場合、オートメーションまたはブック内のマクロを使用して設定できます。

Excel ブックにおける Jet OLE DB プロバイダの仕様

Microsoft Jet データベース エンジンを使用して、インストール可能な ISAM (Indexed Sequential Access Method) ドライバ経由で、Excel ブックなどの他のデータベース ファイル形式のデータにアクセスできます。Microsoft Jet 4.0 OLE DB プロバイダでサポートされている外部形式を開くには、接続の拡張プロパティでデータベースの種類を指定します。Jet OLE DB プロバイダでは、以下の Microsoft Excel ブックのデータベースの種類がサポートされています。
  • Excel 3.0
  • Excel 4.0
  • Excel 5.0
  • Excel 8.0
: Microsoft Excel 5.0 および 7.0 (95) のブックには、Excel 5.0 のソース データベースの種類を使用し、Excel 8.0 (97) および 9.0 (2000) のブックには、Excel 8.0 のソース データベースの種類を使用します。ExcelADO.exe では、Excel 97 および Excel 2000 の形式の Excel ブックを使用します。

以下のサンプルでは、Excel 97 (Excel 2000) のブックに ADO 接続を行います。
Dim oConn As New ADODB.Connection
With oConn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .Properties("Extended Properties").Value = "Excel 8.0"
    .Open "C:\Book1.xls"
    '....
    .Close
End With
				
または
Dim oConn As New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Data Source=C:\Book1.xls;" & _
           "Extended Properties=""Excel 8.0;"""
oConn.Close
				
テーブルの命名規則

Excel ブックでテーブル (または範囲) を参照するには、以下のようにいくつかの方法があります。
  • 末尾にドル記号を付加したシート名 (Sheet1$ や My Worksheet$ など) を使用します。この方法でブックのテーブルを参照すると、ワークシートの使用されている範囲全体が含まれます。
    oRS.Open "Select * from [Sheet1$]", oConn, adOpenStatic
    					
  • 定義済みの名前を持つ範囲 (Table1 など) を使用します。
    oRS.Open "Select * from Table1", oConn, adOpenStatic
    					
  • 特定のアドレスを持つ範囲 (Sheet1$A1:B10 など) を使用します。
    oRS.Open "Select * from [Sheet1$A1:B10]", oConn, adOpenStatic
    					
テーブル ヘッダー

Excel ブックでは、デフォルトで範囲の最初の行が見出し行 (フィールド名) と見なされます。最初の行に見出しが含まれていない場合は、接続文字列の拡張プロパティで HDR=NO と指定します。最初の行にヘッダーが含まれていない場合は、OLE DB プロバイダによって、フィールドに自動的に名前が付けられます (最初のフィールドは F1、2 番目のフィールドは F2 など)。

データ型

Excel テーブルは、従来のデータベースとは異なり、列に直接データ型を指定する方法がありません。代わりに、列の中の一定数の行が OLE DB プロバイダによりスキャンされ、そのフィールドのデータ型が推測されます。スキャンされる行数は、デフォルトでは 8 行ですが、接続文字列の拡張プロパティで、MAXSCANROWS 設定に 1 〜 16 の値を指定することでスキャンされる行数を変更できます。

サンプルに含まれているファイル

ExcelADO.exe ファイルには、Visual Basic 標準 EXE プロジェクト、ASP (Active Server Pages)、テンプレートとして機能する Excel 97 と Excel 2000 のブック、および Microsoft Access 2000 データベースが含まれています。含まれているファイルは、以下のとおりです。

Visual Basic 標準 EXE プロジェクト ファイル
  • ExcelADO.vbp
  • Form1.frm
  • Form1.frx
Active Server Pages
  • EmpData.asp
  • Orders.asp
Microsoft Excel ブック
  • OrdersTemplate.xls
  • EmpDataTemplate.xls
  • ProductsTemplate.xls
  • SourceData.xls
Microsoft Access データベース
  • Data.mdb

サンプルの使用方法

.exe ファイルのコンテンツをフォルダに抽出します。

Visual Basic プロジェクトを使用するには、以下の手順を実行します。
  1. Visual Basic で、ExcelADO.vbp ファイルを開きます。
  2. [プロジェクト] メニューの [参照設定] をクリックし、Microsoft ADO Ext. for DDL and Security と Microsoft ActiveX Data Objects Library への参照を設定します。このサンプル コードは、ADO 2.5 と ADO 2.6 の両方で機能するため、使用しているコンピュータに適したバージョンを選択します。
  3. F5 キーを押してプログラムを実行します。デモンストレーション用のフォームが表示されます。
  4. [Sample 1] をクリックします。OrdersTemplate.xls のコピーが作成されます。その後、ADO を使用してブックへの接続が確立され、ブック内の定義済みの範囲であるテーブルの Recordset が開かれます。この範囲の名前は、Orders_Table です。Orders_Table では、ADO の AddNew メソッドや Update メソッドを使用して、ブックの定義済みの範囲にレコード (行) が追加されます。行の追加処理が完了すると、ADO の Connection が閉じられ、Microsoft Excel でブックが表示されます。この処理を行うには、以下の手順を実行します。
    1. Excel で、[挿入] メニューの [名前] をポイントし、[定義] をクリックします。
    2. 定義済みの名前の一覧の [Orders_Table] をクリックします。この定義済みの名前に、新しく追加されたレコードが含まれていることを確認します。定義済みの名前と Excel の OFFSET 関数を併用して、ワークシートに追加されたデータの合計が計算されます。
    3. Microsoft Excel を終了し、Visual Basic アプリケーションに戻ります。
  5. [Sample 2] をクリックします。EmpDataTemplate.xls のコピーが作成されます。このサンプルでは、ADO を使用してブックに接続し、ADO 接続の Execute メソッドを使用してブックにデータを挿入 (SQL の INSERT INTO) します。データはブック内の定義済みの範囲 (テーブル) に追加されます。データの転送後、接続が切断され、結果として生成されたブックが Excel に表示されます。そのブックを確認したら、Microsoft Excel を終了し、Visual Basic アプリケーションに戻ります。

  6. [Sample 3] をクリックします。ProductsTemplate.xls のコピーが作成されます。このサンプルでは、Microsoft ADOX (ADO Extensions 2.1 for DDL and Security) オブジェクト ライブラリを使用して、ブックに新しいテーブル (新しいワークシート) が追加されます。その後、新しいテーブルの ADO Recordset が取得され、AddNew メソッドや Update メソッドを使用してデータが追加されます。行の追加処理が完了すると、ADO の Connection が閉じられ、Excel でブックが表示されます。このブックの Open イベントには、VBA (Visual Basic for Applications) のマクロ コードが含まれています。ブックを開くとこのマクロが実行されます。ブックに新しい "Products" ワークシートが存在する場合、マクロ コードによりワークシートに書式が設定され、その後マクロ コードは削除されます。Web 開発者は、この手法を使用することで、書式設定用のコードを Web サーバーからクライアントに移動できます。Web アプリケーションにより、データを含む書式設定されたブックをクライアントに転送し、テンプレートだけでは実行できない可能性がある任意の "条件付き" 書式の設定を実行するマクロ コードをクライアントで実行できます。

    : マクロ コードを確認するには、ProductsTemplate.xls の VBAProject の ThisWorkbook モジュールを表示します。

  7. [Sample 4] をクリックします。このサンプルでは、Sample 1 と同じ結果が生成されますが、データの転送に使用される方法が若干異なります。Sample 1 では、レコード (行) が 1 つずつワークシートに追加されます。Sample 4 では、Excel テーブルを Access データベースにアタッチし、追加クエリ (INSERT INTO..SELECT FROM) を実行して Access テーブル内の 1 つのテーブルのレコードを Excel テーブルに追加することで、レコードが一括して追加されます。転送が完了すると、Excel テーブルが Access データベースからデタッチされ、作成されたブックが Excel で表示されます。Excel を終了し、Visual Basic アプリケーションに戻ります。

  8. 最後のサンプルでは、Excel ブックからデータを読み取る方法を示します。ドロップダウン リスト ボックスからテーブルを選択し、[Sample 5] をクリックします。イミディエイト ウィンドウに、選択したテーブルの内容が表示されます。テーブルのワークシート全体 ("Sheet1$" または "Sheet2$") を選択した場合は、イミディエイト ウィンドウに、そのワークシートの使用範囲の内容が表示されます。使用範囲は、ワークシートの 1 行目の 1 列目から始まっていない場合もあることに注意してください。使用範囲は、ワークシート内のデータを含むセルのうち最も左上のセルから始まります。

    特定の範囲のアドレスまたは定義済みの範囲を選択した場合は、イミディエイト ウィンドウに、ワークシートのその範囲の内容のみが表示されます。
ASP (Active Server Pages) を使用するには、以下の手順を実行します。
  1. Web サーバーのホーム ディレクトリに、ExcelADO という名前の新しいフォルダを作成します。ホーム ディレクトリのデフォルトのパスが、C:\InetPut\WWWRoot であることを確認します。
  2. 上記の手順で作成したフォルダに、以下のファイルをコピーします。
    • EmpData.asp
    • Orders.asp
    • Data.mdb
    • EmpDataTemplate.xls
    • OrdersTemplate.xls

  3. このサンプルの ASP スクリプトでは、FileSystemObject の Copy メソッドを使用してブック テンプレートのコピーが作成されます。Copy メソッドが正常に実行されるためには、スクリプトにアクセスしているクライアントに、ASP が格納されているフォルダに対する書き込みのアクセス許可が付与されている必要があります。
  4. Orders.asp (http://YourServer/ExcelADO/Orders.ASP) に移動し、Visual Basic アプリケーションの Sample 1 に含まれているものと同様の Excel ブックがブラウザに表示されることを確認します。
  5. EmpData.asp (http://YourServer/ExcelADO/EmpData.ASP) に移動し、Visual Basic アプリケーションの Sample 2 に含まれているものと同様の Excel ブックがブラウザに表示されることを確認します。
(c) Microsoft Corporation 2000, All Rights Reserved. Contributions by Lori B. Turner, Microsoft Corporation.

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
195951 ASP から ADO を使用して Excel のデータのクエリおよび更新を行う方法
194124 [PRB] DAO の OpenRecordset を使用すると Excel の値として NULL が返される
193998 ASP でバイナリ データの読み取りと表示を行う方法
247412 [XL2003] [INFO] Visual Basic から Excel にデータを転送する方法
257819 [HOWTO] Visual Basic または VBA から ADO を Excel データで使用する

プロパティ

文書番号: 278973 - 最終更新日: 2005年10月19日 - リビジョン: 6.0
この資料は以下の製品について記述したものです。
  • Microsoft Excel 2000 Standard Edition
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Active Server Pages 4.0
キーワード:?
kbdownload kbdownload kbautomation kbfile kbprogramming KB278973
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com