[HOWTO] VB または VBA から ADOX を Excel データで使用する

文書翻訳 文書翻訳
文書番号: 303814 - 対象製品
この記事は、以前は次の ID で公開されていました: JP303814
すべて展開する | すべて折りたたむ

目次

概要

この資料は、Excel データを ADOX から使用するための方法を以下の内容に沿って説明しています。

注意 : この資料で紹介するサンプルは、Microsoft Windows 2000 Server Service Pack 2 (SP2) と Microsoft Data Access Components (MDAC) 2.6 SP1、Microsoft Visual Basic 6 SP5、および Microsoft Excel 2002 (XP) を使用して動作を確認しています。別のバージョンの Windows、MDAC、Visual Basic、または Excel を使用した場合、現象が異なる場合があります。

詳細

ADOX (ActiveX Data Objects Extensions for Data Definition Language and Security) は、データベース、テーブル、フィールド、またはほかのデータベース オブジェクトをプログラムで操作できる DAO (データ アクセス オブジェクト) の機能を ADO (ActiveX データ オブジェクト) 開発者に提供します。Microsoft OLE DB Provider for Jet Version 4.0 がリリースされてから、ADO 開発者は Microsoft Excel のブックとワークシートで ADO と ADOX の両方を使用できるようになりました。Microsoft OLE DB Provider for Jet Version 4.0 は、Jet エンジンが Microsoft Access 以外のデスクトップ データベースで使用する ISAM ドライバをサポートします。

ただし、Excel ワークシートは標準的なデータベースではないので、Excel で ADO を使用する場合にはいくつかの制限があります。特に、ADOX メソッドを Excel で使用すると、多くのメソッドは機能しないか、または予期しない結果を返す場合があります。
この資料では、ADOX と Excel の制限の多くについて説明します。Excel で ADO を使用する方法については、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
257819 [HOWTO] VB または VBA から ADO を Excel データで使用する

ADOX のカタログ

ADOX オブジェクト モデルでは、Catalog オブジェクトはデータベースを表します。Excel の場合はブックを表します。
  • ADO Connection オブジェクトまたは接続文字列を使用して、Catalog オブジェクトを作成したり、開いたりできます。以下のコード サンプルは、Book1.xls を ADOX Catalog オブジェクトとして開く方法を示しています。
    Dim cat As ADOX.Catalog
    Set cat = New ADOX.Catalog
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & App.Path & "\book1.xls;Extended Properties=Excel 8.0"
    Set cat = Nothing
  • Catalog オブジェクトは Create メソッドを持っていますが、Delete メソッドは持っていません。

カタログの作成

ADOX Catalog オブジェクトの Create メソッドを使用して、新しい Excel ワークブックを作成することはできません。この操作を行うと、次のエラー メッセージが表示されます。
この操作は、このタイプのオブジェクトには実行できません。

ただし、カタログ用に新しいブックのファイル名を指定し、以下で説明する技法を使用して少なくとも 1 つのテーブルを新しいカタログに追加することによって、新しい Excel ワークブックを作成できます。この方法を使用すると、ADOX テーブルとして作成したワークシートのみを持つ新しいブックが作成されます。つまり、Excelの [オプション] ダイアログ ボックスで指定したデフォルトの新しい Excel ブックのシート数と同じ数のワークシートは追加されません。

ADOX のテーブル

ADOX Table オブジェクトは、データのコンテナとして機能する Excel オブジェクト (ワークシートまたは範囲のいずれか) に対応しています。

テーブルの作成

ADOX を使用して Excel で新しいテーブルを作成できます。テーブルは列を作成せずに作成できないため、コード サンプルは「ADOX の列」 で示します。
  • 新しい ADOX のテーブルを作成すると、指定した名前を使用して、新しいワークシートと新しいワークシート上の名前付き範囲が作成されます。新しい名前付き範囲は列見出しのみに展開されます。たとえば、2 つの列を持つ MyTable という名前のテーブル (ワークシート) を作成すると、MyTable!$A$1:$B$1 として定義される名前付き範囲 MyTable も作成されます。
  • 空白を含むテーブル名を指定できます。ただし、ADOX は、作成したワークシートおよび範囲の名前では、空白をアンダースコアに置き換えます。
  • 新しいワークシートはブックの最後のシートとして作成されます。
  • Excel でブックを開いた状態で新しいテーブルを作成すると、次のエラー メッセージが表示されます。
    特定できないエラーです。
  • 列が定義されていないテーブルを作成しようとすると、成功したように見えますが、実際には何も作成されません。
  • 既存のテーブル名を変更しようとすると、次のエラー メッセージが表示されます。
    この操作は、このタイプのオブジェクトには実行できません。

テーブルの削除

Excel では、ADOX を使用してテーブル (ワークシート) または名前付き範囲を削除することはできません。この場合、ADOX によってテーブルや名前付き範囲が作成されたかどうかは無関係です。
  • ワークシート (MyTable$) を削除しようとすると、エラーが発生せずに成功したように見えますが、ワークシートはブックに残っています。繰り返し Delete メソッドを呼び出してもエラーは発生しませんが、ワークシートを削除することはできません。
  • 範囲 (MyTable) を削除しようとすると、エラーが発生せずに成功したように見えますが、範囲はブックに残っています。ただし、次にこの範囲を削除しようとするとエラー 3265 が表示されます。
    要求された名前または序数に対するコレクションがありません。
  • 名前付き範囲を削除しようとすると、名前付き範囲の定義は残りますが、範囲内のデータは削除されます。

ADOX の列

ADOX の列は、データベースの列またはフィールドと対応しており、Excel ワークシートの列とも正しく対応しています。

Excel で使用する ADO データ型

列を作成するときに Excel データソースで使用でき、ADO が認識するデータ型は下記の 6 つです。

  • adDouble, type 5
  • adDate, type 7
  • adCurrency, type 6
  • adBoolean, type 11
  • adVarWChar, type 202
  • adLongVarWChar ("memo"), type 203

一般的な列

  • 以前に作成したテーブルに新たに列を追加できます。
  • 空白を含む列名を指定できます。
  • ADOX は、常に先頭に単一引用符を持つ列見出しを作成します。たとえば、'F1、'Col1、'Col2 などです。ただし、名前は単一引用符なしで取得されるので、このことが原因で後で問題が発生することはほとんどありません。

テーブルの作成時に列を作成する

ADOX を使用して新しいテーブルが作成されるのと同時に列を作成すると、最も適切な状態で機能します。

以下のコードは、2 つの列 (数値型とテキスト型) を持つ新しいテーブル (ワークシート) を作成します。
    
    Dim cat As ADOX.Catalog
    Dim tbl As ADOX.Table
    Dim col As ADOX.Column

    Set cat = New ADOX.Catalog
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & App.Path & "\book1.xls;Extended Properties=Excel 8.0"

    Set tbl = New ADOX.Table
    tbl.Name = "TestTable"

    Set col = New ADOX.Column
    With col
        .Name = "Col1"
        .Type = adDouble
    End With
    tbl.Columns.Append col
    Set col = Nothing

    Set col = New ADOX.Column
    With col
        .Name = "Col2"
        .Type = adVarWChar
    End With

    tbl.Columns.Append col
    cat.Tables.Append tbl

    Set cat = Nothing
    Set tbl = Nothing
    Set col = Nothing


列の削除

Excel では ADOX で作成した Table から列を削除することはできません。
  • 列にデータが含まれていない場合、エラーが発生せずに削除処理は成功したように見えますが、列と列見出しは残ります。
  • 列にデータが含まれている場合、次のエラーが表示され、削除処理は失敗します。
    無効な操作です。

既存のワークシートに列を作成する

Excel では ADOX を使用して既存のワークシートに列を追加することができます。ただし、Excel では ADOX で作成した Table から列を削除できないため、既存の空のワークシートに列を追加すると、予期しない結果が生じる場合があることに注意する必要があります。


既存の列のデータ型を変更する

テーブルに列を追加した後、Type プロパティに別のデータ型を設定しようとすると、次のエラー メッセージが表示されます。
このコンテキストで操作は許可されません。

Excel のテーブルと列にデータを追加する

Visual Basic のデザイン環境で Excel を使用して ADO コードをテストしている場合、初めてレコードセットの処理を実行すると、次のエラー メッセージが表示されることがあります。
選択された CollatingSequence は OS でサポートされていません。

このエラー メッセージは無視できます。アプリケーションをコンパイルした後は、このエラー メッセージは表示されません。
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
246167 PRB: Collating Sequence Error Opening ADODB Recordset the First Time Against an Excel XLS

ADOX で作成した Excel の列にデータを追加する

ADOX を使用して Excel で作成したテーブルや列に ADO を使用してデータの挿入または変更を行うとき、列に指定されているデータ型の情報が格納される場所は明らかではありませんが、ADO は列に指定されているデータ型を尊重します。
  • すべてのテキスト文字列の値は、先頭に単一引用符を付けて格納されます。ただし、この値は単一引用符なしで取得されるので、このことにより後で問題が発生することはほとんどありません。
  • 数値型として定義されている列にテキスト文字列を、またはテキスト型の列に数値を挿入しようとすると、次のエラー (80040e21) が表示されます。
    多段階の OLEDB の操作でエラーが発生しました。 各 OLEDB の状態の値をチェックしてください。

標準の Excel の列にデータを追加する

ADOX を使用せずに作成または変更された Excel ワークシートまたは範囲に ADO を使用してデータの挿入または変更を行う場合、挿入するデータの型に制限はありません。
  • テキスト文字列は格納時に、先頭に単一引用符が付きません。
  • 数値は左詰めで表示されます。Excel 2002 では、数値は "テキスト形式の数値" を警告するスマート タグが付けられます。特に、数値を解析する目的で Excel にデータを格納している場合、後でデータを使用して作業するときに、このことが原因で問題が発生することがあります。

SQL の CREATE、ALTER、および DROP ステートメントを使用する

Excel データベース オブジェクトに対して CREATE、ALTER、および DROP などの Microsoft SQL DDL (データ定義言語) ステートメントを実行して、上記で説明した対応する ADOX メソッドと同じ結果を得ることができます。

結論

  • 新しいテーブルと列がすべて同時に作成される場合、ADOX は Excel と最も適切な状態で機能します。
  • ADOX を使用して作成されたワークシートにデータが格納されている場合、ADO は Excel データと最も適切な状態で機能します。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 303814 (最終更新日 2001-08-24) をもとに作成したものです。


プロパティ

文書番号: 303814 - 最終更新日: 2003年9月5日 - リビジョン: 2.1
この資料は以下の製品について記述したものです。
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
キーワード:?
kbhowto adox テーブル 列 方法 kbiisam kbdatabase kbgrpdsvbdb kbmdac kbgrpdsmdac excel kbatm 作成 データベース KB303814
"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