様々な業務を進める上で、基幹システムのデータをAccessへ取り込みたいといったニーズがあります。このような場合にはcsvファイルといったテキスト形式でデータを授受することが多く、このため、定型のテキストファイルをAccessへインポート処理することが必要になります。
Accessには、インポート機能が備え付けられていますが、VBAで処理を実装することでより応用が利き、汎用性も高くなります。
そこで、今回は、VBAによるコーディングを主眼に置いて実装方法を紹介していきます。なお、Accessに搭載されているインポート機能については以下の記事をご参照ください。
TransferTextメソッドの活用
さて、テキストファイルをAccessへインポートするには、「Docmd.TransferText」を用いれば良いのですが、実はこのメソッドはAccessからテキストファイルをエクスポートする際にも用い、その方法を以下の記事で紹介しています。
引数の詳細等については、上記記事で確認していただければと思いますが、今回の場合、テキストファイルとしてcsvファイルをAccessへインポートしますので、次のようなコーディングをします。
Docmd.TransferText acImportDelim, , “T_TextImport”, FilePath, True, , 65001
ここで、第1引数「acImportDelim」は区切り記号付きのテキストファイルをインポートする場合に指定し、第3引数「”T_TextImport”」はAccessインポート先のテーブル名を、第4引数の「FilePath」はインポート元のcsvファイルのファイルパスを格納した変数です。また、第5引数の「True」はテキストファイルの1行目をフィールド名として使用することを意味しています。1行目もデータとして使用する場合は「False」にします。
また、最後の引数に「65001」と記載しましたが、これはインポート元ファイルの文字コードを指定しています。
例えば、Shift-JISの場合は「932」、Unicode(UTF-8)の場合は「65001」となります。
次に、今回のために用意したサンプルデータを紹介します。
サンプルデータ
今回は、csvファイル(csv形式)で以下添付のとおりサンプルデータを作成しました。なお、サンプルファイルの文字コードはUTF-8形式で保存していますので、Excel等で開くと文字化けを起こす可能性があります。メモ帳などで開くことをお勧めします。
サンプルデータの中身は、「登録ID」、「氏名」、「生年月日」及び「出身地」のフィールドで構成された20レコードから成ります。
また、作成したサンプルファイルは「C:\TEST¥csv2AccessSample.csv」のファイルパスとなるように保存します。
これを基に、次からはVBAによる実装をしていきます。
VBAによる実装
まずは、VBA画面で次のコードを実装します。
Private Sub TextImport() '変数宣言 Dim FilePath As String 'csvインポート元のファイルパス FilePath = "C:\TEST\csv2AccessSample.csv" 'csvファイルのインポート DoCmd.TransferText acImportDelim, , "T_TextImport", FilePath, True, , 65001 'csvファイルをインポートした旨を通知する。 MsgBox "csvファイルをインポートしました。" End Sub
上記コードを一つずつ確認していきましょう。まずはお約束の変数宣言ですが、ここで宣言している変数を用いて、次にインポート元のcsvファイルパスを格納しています。
続いて、Docmd.TransferTextによりAccessファイルに「T_TextImport」というテーブルを作成して「FilePath」で指定したcsvファイルの1行目をフィールド名としてインポートするという指示をしています。該当テーブルがなければ新たに、既に存在していれば、レコードを追加する形での処理が行われますので、データ型が不一致とならないように注意も必要です。
また、今回のサンプルファイルはUTF-8形式で保存していますので、文字コードである「65001」を忘れずに指定することも大事です。文字コード指定を忘れると文字化けしますので、注意してください。
最後に、csvファイルをインポートしたことを示すために、メッセージボックスを表示させて処理が完了します。
図1にAccessへ取り込んだ結果である「T_TextImport」テーブルの中身を示します。
また、作成された「T_TextImport」テーブルをデザインビューで開くと図2のように、それぞれのデータの種類に応じたデータ型が設定されていることが分かります。
このように、TransferTextによるインポート処理の実装は非常に簡単にできますが、処理を繰り返すと同じレコードが重複して登録されますので、注意してください(図3参照)。
まとめ
今回は、テキストファイルをAccessへインポートするためのVBAによる実装方法を紹介しました。簡単なコードで実装でき、また、他のコーディングと組み合わせて汎用性を高めることでより業務効率の向上に繋げることもできますので、まずは基本的なコードの内容を知っていただく良い機会になったのではないかと思います。
ここで紹介した内容は、専門書などでも紹介されていますので、是非お手元に用意されておくことで、今後のAccess開発にも役立つかと思います。
スポンサーリンク
コメント