CSV を Access VBA にインポートする

Bilal Shahid 2023年10月8日
  1. CSV ファイルを Access データベースにリンクする方法
  2. セミコロン区切りの CSV ファイル
  3. テキスト ファイルを MS Access に手動でエクスポートする
  4. まとめ
CSV を Access VBA にインポートする

VBA は開発者にさまざまな機能を提供します。 この記事では、CSV を Access VBA にインポートする方法について説明します。

CSV ファイルを Access データベースにリンクする方法

他のオプションがあるのに、なぜ VBA コードを使用してデータをインポートするのでしょうか? VBA コードを介してデータをインポートすると、ビジュアル インターフェイスを使用してデータをインポートするときに利用できないさまざまな形式をナビゲートして操作するのに役立ちます。

また、より実用的なレベルでは、同じインポートを数回行う必要がある場合、VBA コードを使用してデータをインポートすると、効率的で、よりアクセスしやすく、より迅速に作業を行うことができます。

毎回使用できる機能を作成し、毎回インポート ウィザードを実行するよりもプロセスを迅速かつ簡単にします。

CSV はカンマ区切り値の略です。 これは、デフォルトのインポート機能がファイル内のコンマを検索することを意味します。

ただし、コンマ以外を使用している場合は、次の手順を試して機能させることができます。

  • まず、ファイルを手動でインポートします。
  • 設定を指定したら、Finish を選択する直前に、Advanced を選択していくつか変更します。
  • 名前を付けて保存 を選択し、Access によって提案された名前を選択するか、自分で名前を指定します。
  • 選択した名前をメモしておいてください。 たとえば、データインポートの仕様
  • OK を 2 回選択し、インポートをキャンセルします。
  • 次に、以下のコードで作成したインポート仕様を使用します。
DoCmd.TransferText acImportDelim, "Specification of Data Import", "T1", "D:\Data.csv", False

CSV を Access VBA にインポートする最も簡単な方法の 1つは、CSV ファイルを Access データベースにテーブルとしてリンクすることです。 これらのテーブルは、他の通常の Access テーブルと同じように操作できます。

たとえば、テーブルに基づいて適切なクエリを作成すると、必要なものが返されます。

テーブルは、手動で、または次の方法で VBA を使用してリンクできます。

DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tableToImport", _
    FileName:="C:\MyData.csv", HasFieldNames:=true

次に、次のコードを実行して CSV テーブルを再リンクし、インポートを実行します。

Dim DB As DAO.Database
' Re-linking the CSV Table
Set DB = CurrentDb
On Error Resume Next:   DB.TableDefs.Delete "tableToImport":   On Error GoTo 0
DB.TableDefs.Refresh
DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tableToImport", _
    fileName:="C:\MyData.CSV", HasFieldNames:=True
DB.TableDefs.Refresh
' Now perform the import
DB.Execute "INSERT INTO anyTable SELECT c1, c2, ... FROM tableToImport " _
   & "WHERE NOT F1 IN ('A1', 'A2', 'A3')"
DB.Close:   Set DB = Nothing

最初からいくつかの行を Access にインポートし、最後からいくつかの行をインポートする必要がある場合も、それを行うことができます。 CSV ファイルを Access にリンクしたら、次の方法で必要な行をインポートできます。

INSERT INTO anyTable SELECT c1, c2, ... FROM tableToImport WHERE NOT F1 IN ('A1', 'A2', 'A3')

このステートメントでは、列 F1 に値 'A1''A2'、および 'A3' を持つ行がスキップされ、最終的な結果セットから除外されます。 ただし、CSV ファイルにフィールド名がある場合、HasFieldNames:=true でインポートすると、これらの名前が列名として使用されることに注意することが重要です。

それ以外の場合、Access は独自に列名を割り当てます (たとえば、'F1''F2''F3' など)。 ファイルが小さい場合は、行を簡単に読み書きできます。

セミコロン区切りの CSV ファイル

CSV ファイルがセミコロンで区切られている場合は、インポート仕様 が必要です。 この特定の仕様を作成するには、一度データを手動でインポートする必要があります。

これにより、仕様を保存して、後で VBA コードで使用できます。 これは、次の方法で行うことができます。

  • 外部データ > 新しいデータ ソース > ファイルから > テキスト ファイル を選択します。
  • オプションをブラウズし、テーブルにインポートする CSV ファイルを選択します。
  • これにより、[テキストのインポート ウィザード] ダイアログが開きます。
  • それに応じてインポート プロパティを設定します。 ただし、まだウィザードを閉じないでください。
  • 左下の詳細ボタンをクリックします。 これにより、指定ダイアログが開きます。
  • 名前を付けて保存 をクリックし、"SemiColonImportSpecification" のように適切な名前を付けて、最終的なファイルを保存します。
  • ここで行う必要があるのは、仕様ファイルを保存することだけなので、インポートをキャンセルできます。
  • 最初の VBA コードに戻り、次の方法で specifications というパラメーターをもう 1つ含めます。
    DoCmd.TransferText _
    TransferType:=acImportDelim, _
    SpecificationName:="SemiColonImportSpec", _
    TableName:="TEST", _
    FileName:="C:\TEST.CSV", _
    HasFieldNames:=True
    

テキスト ファイルを MS Access に手動でエクスポートする

テキスト ファイルを手動で MS Access にインポートすることもできます。 これにより、テキスト区切り記号とセル区切り記号を選択できます。

これを機能させるには、メニューから外部データを選択し、使用するファイルを選択して、ウィザードを進める必要があります。

ウィザードを使用してインポートを実行したら、特定のインポート仕様を簡単に保存して、次の DoCmd.TransferText で使用できます。 これを行うと、単一引用符テキストやセミコロンなどの非標準の区切り文字を使用できるようになります。

まとめ

CSV を Access VBA にインポートするのは複雑な場合があります。 ただし、正しいテクニックを知っていれば、プロセスははるかに簡単になります。 この記事では、正確な方法と、これを正しく行う方法の詳細について概説します。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub