アクセスVBAテーブルとクエリをエクスポートしよう!

アクセス担当のまみです。

アクセスからデータをエクスポートって、エクセル出力だけじゃなくてCSVへの出力もできるんです。

エクセルに出力する方法もテーブルだけじゃなくクエリも出力できます。

VBAを使うとボタン1つでエクスポートできるようになるのでとっても便利ですよ。

 

今回は、色々なエクスポートをやってみましょう!

 

Contents

フォームの作成

 

テーブルとクエリのあるファイルなら何でもいいのですが、説明用に「住所録」ファイルを使用しますね。

 

関連記事
 
 
それでは、「住所録」ファイルを開いて、フォームにボタンを5つ配置しましょう。
 
 

名前と標題は下記のように設定しましょう。

一つ目

名前 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 "エクスポートされました"

 

フォームビューでエクセルを出力してみてくださいね!

 

エクセルの複数シートにエクスポート

 

(はてな君)
2つのテーブルのデータとかエクスポートできるの?
(あいちゃん)
テーブルでもクエリでも複数シートにエクスポートできますよ!

 

①「クエリ出力」を選択した状態で、プロパティーシートの②「イベント」タブを選択します。

クリック時に③「イベントプロシージャ」を選択してコードの画面を開きましょう。

(はてな君)
その説明は今日はいいかも~。3回目だし大丈夫だよ!
(あいちゃん)
じゃあ残りの2回は説明しないでも大丈夫ってことで省略しちゃいますね!

 

「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 "エクスポートされました"

 

実際にデータを出力してみてくださいね!

 

先頭行(フィールド名)なしでエクスポート

 

(はてな君)
フィールド名なしのデータ見たことある!CSVが多いかな~
(あいちゃん)
確かにCSVが多いかな。じゃあCSVで出力してみましょう!

 

    Dim Path As String
    Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "¥" & "住所録2.csv"
    
    DoCmd.TransferText acExportDelim, , "T_住所録", Path, , ""
    
    MsgBox "エクスポートされました"

 

 

Trueを記載していると、先頭行を表示してくれます。Trueの記載がないと、データのみのエクスポートになります。

エクセル出力も同じなので、やってみてくださいね!

 

色々やってみて今日はもう十分って思ったら、フォームには「F_エクスポート」って名前をつけておきましょう。

 

まとめ

 

アクセスのデータをエクセルで加工したい時ってよくあるので、エクスポートが簡単にできたらとっても便利ですね。

ぜひ活用してくださいね!

 

スポンサーリンク