【AccessVBA】Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートする方法

この記事では、Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートする方法についてご説明します。

【動画】Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートする実際の動き

本題に入る前に、まずは次のツイートをご覧ください。

見て頂きたいのは1:38~2:09です。

Accessのテーブルデータに含まれる空白データにもダブルクォーテーションが付くようにCSVファイルをエクスポートしています。

Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートする方法

Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートするには、次の流れの通りにコードを書いていきます。

Accessのマクロ

STEP.1
Accessで現在開いているデータベースに接続
Accessで現在開いているデータベースに接続します。
STEP.2
テーブルデータにダブルクォーテーションが付くように設定したselect文を用意
NZ関数を使ってテーブルデータにダブルクォーテーションが付くように設定したselect文を用意します。
STEP.3
一時クエリの作成
STEP.2で用意したselect文のクエリを一時的に作成します。(後ほど削除します)
STEP.4
AccessのテーブルデータをCSVファイルにエクスポート
AccessのテーブルデータをCSVファイルにエクスポートします。
CSVファイルへのエクスポートは、TransferTextメソッドを使います。
TransferTextメソッドの3つ目のパラメタに、STEP.3で作成したクエリ名を指定します。
STEP.5
一時クエリを削除
不要になったので、STEP.3で作成した一時クエリを削除します。

コードの例

Accessのマクロのコード(例)

    Dim DB As DAO.Database
    Dim QD As DAO.QueryDef
    Dim SQL As String
    
    'Accessで現在開いているデータベースに接続する
    Set DB = CurrentDb
    
    'テーブルデータを取得するSelect文(NZ関数でデータにダブルクォーテーションをつける)
    SQL = "SELECT "
    SQL = SQL & "Nz([tbl_score_list]![stdname],"""") AS stdname, "
    SQL = SQL & "Nz([tbl_score_list]![japanese],"""") AS japanese, "
    SQL = SQL & "Nz([tbl_score_list]![classics],"""") AS classics, "
    SQL = SQL & "Nz([tbl_score_list]![mathematics],"""") AS mathematics, "
    SQL = SQL & "Nz([tbl_score_list]![world_history],"""") AS world_history, "
    SQL = SQL & "Nz([tbl_score_list]![japanese_history],"""") AS japanese_history, "
    SQL = SQL & "Nz([tbl_score_list]![physics],"""") AS physics, "
    SQL = SQL & "Nz([tbl_score_list]![advanced_chemistry],"""") AS advanced_chemistry, "
    SQL = SQL & "Nz([tbl_score_list]![english],"""") AS english "
    SQL = SQL & "FROM tbl_score_list"

    '(一時)クエリの作成
    Set QD = DB.CreateQueryDef("qry1", SQL)
    
    'テーブルデータをCSVファイルにエクスポートする
    DoCmd.TransferText acExportDelim, , "qry1", CSVFile, True
    
    'クエリの削除
    CurrentDb.QueryDefs.Delete "qry1"
    
    '後処理
    Set QD = Nothing: Set DB = Nothing
【参考】NZ関数を使ったSelect文の例

先ほどご紹介したコードのSQL文です。(9行目から19行目)

先ほどのコードではSQL文が分かりにくいと思いますので、実際のSQL文をご紹介します。

SELECT
 Nz([tbl_score_list]![stdname],"") AS stdname
,Nz([tbl_score_list]![japanese],"") AS japanese
,Nz([tbl_score_list]![classics],"") AS classics
,Nz([tbl_score_list]![mathematics],"") AS mathematics
,Nz([tbl_score_list]![world_history],"") AS world_history
,Nz([tbl_score_list]![japanese_history],"") AS japanese_history
,Nz([tbl_score_list]![physics],"") AS physics
,Nz([tbl_score_list]![advanced_chemistry],"") AS advanced_chemistry
,Nz([tbl_score_list]![english],"") AS english
 FROM tbl_score_list

上記のSQL文では、データがNull値の場合はダブルクォーテーションを返し、データがNull値でない場合はデータをそのまま返します。

コードの解説

注目すべきコード①

最初に見て頂きたいのは9行目から19行目です。

    'テーブルデータを取得するSelect文(NZ関数でデータにダブルクォーテーションをつける)
    SQL = "SELECT "
    SQL = SQL & "Nz([tbl_score_list]![stdname],"""") AS stdname, "
    SQL = SQL & "Nz([tbl_score_list]![japanese],"""") AS japanese, "
    SQL = SQL & "Nz([tbl_score_list]![classics],"""") AS classics, "
    SQL = SQL & "Nz([tbl_score_list]![mathematics],"""") AS mathematics, "
    SQL = SQL & "Nz([tbl_score_list]![world_history],"""") AS world_history, "
    SQL = SQL & "Nz([tbl_score_list]![japanese_history],"""") AS japanese_history, "
    SQL = SQL & "Nz([tbl_score_list]![physics],"""") AS physics, "
    SQL = SQL & "Nz([tbl_score_list]![advanced_chemistry],"""") AS advanced_chemistry, "
    SQL = SQL & "Nz([tbl_score_list]![english],"""") AS english "
    SQL = SQL & "FROM tbl_score_list"

このコードは、CSVファイルに出力するための、accessのテーブルデータを抽出するselect文を作成するコードです。

注目してほしいのは、列名に対しNz関数を使っているところです。

データがNull値の場合はダブルクォーテーションを返し、データがNull値でない場合はデータをそのまま返します。

このNz関数を使うことで、空白のデータにダブルクォーテーションを付けることができるというわけです。

注目すべきコード②

次に見て頂きたいのは22行目です。

    '(一時)クエリの作成
    Set QD = DB.CreateQueryDef("qry1", SQL)

このコードでクエリを一時的に作成し、先ほどのselect文を設定します。

クエリを作成するにはCreateQueryDefメソッドを使います。

CreateQueryDefメソッドのパラメタに、作成するクエリ名と、そのクエリに設定する先ほどのselect文の2つを指定します。

注目すべきコード③

次に見て頂きたいのは25行目です。

    'テーブルデータをCSVファイルにエクスポートする
    DoCmd.TransferText acExportDelim, , "qry1", CSVFile, True

TransferTextメソッドを使いCSVファイルにエクスポートします。

TransferTextメソッドはAccessのテーブルデータをCSVファイルにエクスポートするメソッドです。

TransferTextメソッドを実行するのに、デリミタの種類やCSVファイル名、そして先ほど作成したクエリの名前などをパラメタに指定します。

注目すべきコード④

次に見て頂きたいのは28行目です。

    'クエリの削除
    CurrentDb.QueryDefs.Delete "qry1"

CSVファイルをエクスポートしたら一時的に作成したクエリは必要がないので、クエリを削除します。

クエリを削除するには、QueryDefsオブジェクトのDeleteメソッドを使います。

最後に

本記事では、Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートする方法についてご説明しました。

Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートする流れは次の通りです。

  • ①NZ関数を使ってテーブルデータにダブルクォーテーションが付くように設定したselect文を用意
  • ② ①のselect文のクエリを一時的に作成
  • ③AccessのテーブルデータをCSVファイルにエクスポート

Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートしたい場合は、ぜひ参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら