この記事では、Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートする方法についてご説明します。
【動画】Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートする実際の動き
本題に入る前に、まずは次のツイートをご覧ください。
AccessのテーブルのデータをTransferTextメソッドでCSVファイルに出力すると、ブランクのデータはダブルクォーテーションが付かない
そこで、クエリとAccesVBAのNZ関数を使う
NZ関数でブランクのデータにダブルクォーテーションを付けてからSelect文でデータを取得すればOK😊#ExcelVBA#AccesVBA pic.twitter.com/vFvAd8TNXc
— まさ@Excel、VBA、マクロ(経験年数17年) (@masamasa9785) July 28, 2021
見て頂きたいのは1:38~2:09です。
Accessのテーブルデータに含まれる空白データにもダブルクォーテーションが付くようにCSVファイルをエクスポートしています。
Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートする方法
Accessのテーブルの空白データにダブルクォーテーションを付けてCSVファイルにエクスポートするには、次の流れの通りにコードを書いていきます。
Accessのマクロ
CSVファイルへのエクスポートは、TransferTextメソッドを使います。
TransferTextメソッドの3つ目のパラメタに、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
先ほどご紹介したコードの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週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。