アクセス担当のまみです。
アクセスからデータをエクスポートって、エクセル出力だけじゃなくてCSVへの出力もできるんです。
エクセルに出力する方法もテーブルだけじゃなくクエリも出力できます。
VBAを使うとボタン1つでエクスポートできるようになるのでとっても便利ですよ。
今回は、色々なエクスポートをやってみましょう!
Contents
フォームの作成
テーブルとクエリのあるファイルなら何でもいいのですが、説明用に「住所録」ファイルを使用しますね。
名前と標題は下記のように設定しましょう。
一つ目
名前 | btnテーブル |
標題 | テーブル出力 |
二つ目
名前 | btnクエリ |
標題 | クエリ出力 |
三つ目
名前 | btn複数 |
標題 | 複数シート出力 |
四つ目
名前 | btnCSV |
標題 | CSV出力 |
五つ目
名前 | btn先頭 |
標題 | 先頭行なし |
これで準備はOKです。
さっそくエクスポートのコードを記載していきましょう!
テーブルをエクセルにエクスポート
まずはテーブルをエクセルにエクスポートしてみましょう。
①「テーブル出力」を選択した状態で、プロパティーシートの②「イベント」タブを選択します。
クリック時に「イベントプロシージャ」を選択してコードの画面を開きましょう。
「Private Sub btnテーブル_Click()」と「End Sub」の間に下記のコードを追加しましょう。
Dim Path As String Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "¥" & "住所録.xlsx" DoCmd.TransferSpreadsheet acExport, 10, "T_住所録", Path, True, "" MsgBox "エクスポートされました"
コードをコピーされたい場合は下記の記事を参考にしてください。
acSpreadsheetTypeExcel12Xmlの値は10なので、「10」をコードに記載していますが、「acSpreadsheetTypeExcel12Xml」を使用してもどちらでも同じ結果になります。
エクセルのバージョンによって指定ができるので参考までに下記の表をどうぞ!
acSpreadsheetTypeExcel12 | 9 | .xlsb Excel2007~ |
acSpreadsheetTypeExcel12Xml | 10 | .xlsx Excel2007~ |
acSpreadsheetTypeExcel3 | 0 | |
acSpreadsheetTypeExcel4 | 6 | |
acSpreadsheetTypeExcel5 | 5 | |
acSpreadsheetTypeExcel7 | 5 | |
acSpreadsheetTypeExcel8 | 8 | Excel97 |
acSpreadsheetTypeExcel9 | 8 | .xls Excel2000~2003 |
フォームビューでエクセルを出力してみてくださいね!
[quads id=2]クエリをエクセルにエクスポート
テーブルだけじゃなく、クエリのデータもエクセルにエクスポートできます!
テーブルをクエリにかえるだけでOKです。
せっかくご紹介したので、今度は「acSpreadsheetTypeExcel12Xml」を使ってみましょう。
①「クエリ出力」を選択した状態で、プロパティーシートの②「イベント」タブを選択します。
クリック時に③「イベントプロシージャ」を選択してコードの画面を開きましょう。
「Private Sub btnクエリ_Click()」と「End Sub」の間に下記のコードを追加しましょう。
Dim Path As String Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "¥" & "住所録クエリ.xlsx" DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Q_住所録", Path, True, "" MsgBox "エクスポートされました"
フォームビューでエクセルを出力してみてくださいね!
エクセルの複数シートにエクスポート
①「クエリ出力」を選択した状態で、プロパティーシートの②「イベント」タブを選択します。
クリック時に③「イベントプロシージャ」を選択してコードの画面を開きましょう。
「Private Sub btn複数_Click()」と「End Sub」の間に下記のコードを追加しましょう。
Dim Path As String Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "¥" & "住所録複数.xlsx" DoCmd.TransferSpreadsheet acExport, 10, "T_住所録", Path, True, "" DoCmd.TransferSpreadsheet acExport, 10, "Q_住所録", Path, True, "" MsgBox "エクスポートされました"
テーブルとクエリのデータの命令を並べただけなんです。
これで、シートを分けて同じファイルに出力してくれます。
エクスポートすると、上の図のようになります。
CSVへエクスポート
CSVへエクスポートもできちゃいます。
「Private Sub btnCSV_Click()」と「End Sub」の間に下記のコードを追加しましょう。
Dim Path As String Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "¥" & "住所録.csv" DoCmd.TransferText acExportDelim, , "T_住所録", Path, True, "" MsgBox "エクスポートされました"
実際にデータを出力してみてくださいね!
先頭行(フィールド名)なしでエクスポート
Dim Path As String Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "¥" & "住所録2.csv" DoCmd.TransferText acExportDelim, , "T_住所録", Path, , "" MsgBox "エクスポートされました"
Trueを記載していると、先頭行を表示してくれます。Trueの記載がないと、データのみのエクスポートになります。
エクセル出力も同じなので、やってみてくださいね!
色々やってみて今日はもう十分って思ったら、フォームには「F_エクスポート」って名前をつけておきましょう。
まとめ
アクセスのデータをエクセルで加工したい時ってよくあるので、エクスポートが簡単にできたらとっても便利ですね。
ぜひ活用してくださいね!