ACCESS VBA csvファイル出力機能(VBAコード公開)
ACCESSで入力したデータは、csvファイルに出力して他のシステムに取り込むことが可能です。
csvファイルへの出力はACCESSの機能を利用して手動で操作することも可能ですが、頻度が多くなると処理が煩雑です。
そんな時に利用できる、VBAを使ってcsvファイル出力を自動化する機能の作成方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。
csv出力機能完成形
最初に、完成したcsv出力機能をお見せしましょう。
フォームにcsv出力ボタンを作成しました。
出力ボタンを押すと、確認メッセージが表示されます。
OKを押すと出力処理がされ、処理完了メッセージが表示されます。
指定したフォルダを見てみると、あらかじめ定めておいた内容のcsvファイルが出力されています。
csv出力機能作成方法
それでは作成方法を解説していきます。
まず、フォームを作成し出力ボタンを配置します。
そして、プロパティシートから出力ボタンのクリック時イベントを設定します。
VBAでクリック時イベントに設定したプロシージャは下記の通りです。
Private Sub 出力_ボタン_Click()
If vbOK = MsgBox("csvファイルを出力します。" & vbCrLf & "同名のファイルは上書きされますのでご注意ください。", vbInformation + vbOKCancel, "csv出力") Then
DoCmd.TransferText acExportDelim, , "TRN_売上サンプル", "C:\import\売上.csv", True
MsgBox "csvファイルを出力しました。", vbInformation + vbOKOnly, "出力完了"
End If
End Sub
これで、 TRN_売上サンプルというテーブルの内容を、C:\importフォルダに、売上.csvというファイル名で出力できます。
If文で囲っているのは出力前にMsgBox関数でメッセージを表示し、OKを選択した時だけ出力処理を実行するためです。
DoCmd.TransferTextメソッド
作成方法を詳しく解説しましょう。
ACCESSからcsvに出力するためには、DoCmd.TransferTextメソッドを使用します。
構文は以下の通りです。
本当はもう少し引数がありますが、最小限使用するものでご説明します。
DoCmd.TransferText 変換の種類 , エクスポート定義 , 出力対象テーブル名 , 出力ファイル名
それぞれの引数の説明は以下の通りです。
変換の種類 | インポートするか、エクスポートするのかを選択します。 csvファイルのインポートの場合は「acImportDelim」を設定します。 |
エクスポート定義 | 定義ファイルを使ってエクスポートする際に使用しますが、ここはほぼ省略で問題ないでしょう。 |
出力対象テーブル名 | csvファイルに出力したいテーブル / クエリ名を指定します。 |
出力ファイル名 | 出力するcsvファイルの名称を記載します。 ファイルパスを含めて記載する必要があることに注意ください。 C:\Data\export.csv、等 |
フィールド名 | 出力するファイルにフィールド行(見出し)を入れるか否かを指定します。 Trueにするとフィールド行が入ります。 |
今回は、下記のように設定しました。
DoCmd.TransferText acExportDelim, , "TRN_売上サンプル", "C:\import\売上.csv", True
TRN_売上サンプルというテーブルの内容を、C:\importフォルダに、売上.csvというファイル名で出力 する、という指定ですね。
応用例:ACCESSファイルの場所にファイルを出力する
上記では、ファイルの出力場所をVBAのコード内で指定しています。「C:\import」などですね。
この場合は、指定のフォルダがないとエラーが出てしまいます。
様々なパソコンで使用されるACCESSにおいて、出力先を固定すると運用上の問題が発生する原因になります。
そこで、ACCESSのファイルが置いてあるフォルダにcsvファイルを出力する方法が便利です。
上記のプロシージャを一部書き換えました。
Private Sub 出力_ボタン_Click()
Dim FileName As String
If vbOK = MsgBox("csvファイルを出力します。" & vbCrLf & "同名のファイルは上書きされますのでご注意ください。", vbInformation + vbOKCancel, "csv出力") Then
FileName = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & "売上.csv"
DoCmd.TransferText acExportDelim, , "TRN_売上サンプル", FileName, True
MsgBox "csvファイルを出力しました。", vbInformation + vbOKOnly, "出力完了"
End If
End Sub
FileNameという変数を用いて、csvファイルを出力するフォルダを指定しています。
ACCESSの置いてあるフォルダの指定については、
FileName = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & "売上.csv"
で行っています。
InStrRev関数は、対象の文字列を後ろから検索し、指定した文字が発見された際の文字位置(最初から数えた文字数)を変える関数です。
CurrentDb.Nameは現在使用しているACCESSファイルの、フルパスを含めたファイル名を表します。
例えば、C:\importに売上.accdbというACCESSファイルを置いてあれば、C:\import\売上.accdbという文字列が返されます。
この文字列に対して、後ろから「\」が見つかるまで検索し、その位置を返すという指定なのですが、つまりフルパスから最後のACCESSファイル名を除いた文字数を調べているわけです。
そして、その文字数を使ってLeft関数でCurrentDb.Nameで取得されるフルパスからACCESSファイル名を取り除き、代わりに売上.csvというcsvファイルのファイル名を付与して出力する、というわけです。
この機能を使えるとかなりファイル出力の汎用性が増しますのでお試しください。
以上、csvファイル出力機能をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。