器用貧乏の独り言

器用貧乏なおっさんが気の向くままに。

【VBA】配列を使ってSQL文(CREATE TABLE)をすっきりまとめる方法

◇前置き

私の勤め先ではMicrosoft Accessが至るところで利用されています。
昔から使われているようで、別のデータベースに切り替える予定もなさそうです。

そのため、データベース操作は基本的にVBAを使って行っています。

VBASQL文を定義・実行するのですが、カラムの定義を1個ずつしなくてはいけないため、CREATE句を使ったSQL文は長くなりがちです。

今日は、配列を使ってSQL文を定義する方法を紹介します。

◇概要

以下のようなテーブルを作成するSQL文を書いていきます。
テーブル名は「Table1」とします。

◇配列を使わない場合

まずは比較対象として配列を使わない場合のSQL文を見てみましょう。
こんな感じになります。

Dim strSQL As String
   strSQL = "CREATE TABLE Table1(" & _
                   "Column1 DATE," & _
                   "Column2 LONG," & _
                   "Column3 DOUBLE," & _
                   "Coulmn4 STRING," & _
                   "Column5 INTEGER)"

カラム数が少なく、他の句(PRIMARY KEY等)がないのでスッキリして見えますが、カラム数が数十個になってくるとかなり見づらくなってしまいます。

※ちなみにVBAでは改行記号「& _」は1つのコード中に24回までしか使えません。
 ↑少し凝ったSQLを定義しようとするとあっさり足りなくなったりします。

◇配列を使った場合

ここからが本題になります。
配列を使ったSQL文はこんな感じになります。

Dim strSQL As String
Dim myarr(4) As String
   myarr(0) = "Column1 DATE"
   myarr(1) = "Column2 LONG"
   myarr(2) = "Column3 DOUBLE"
   myarr(3) = "Coulmn4 STRING"
   myarr(4) = "Column5 INTEGER"
   strSQL = "CREATE TABLE Table1(" & Join(myarr, ",") & “)”


配列の定義があるのでプログラム全体の長さは大差ありません。
しかし、SQL文のみで比較するとかなりスッキリしたと思います。

SQL文だけを比較するとこんな感じですね。

‘配列なし
strSQL = "CREATE TABLE Table1(" & _
               "Column1 DATE," & _
               "Column2 LONG," & _
               "Column3 DOUBLE," & _
               "Coulmn4 STRING," & _
               "Column5 INTEGER)"
‘配列あり
strSQL = "CREATE TABLE Table1(" & Join(myarr, ",") & “)”


今回の肝はJoin()の部分ですね。
Join()は、一つ目の引数に配列名、2つ目の引数に区切り文字を指定して使います。
指定した配列を指定した区切り文字で区切って、1つの文字列にしてくれます。

◇最後に

いかがだったでしょうか。

割とマニアックな内容ではあるのですが、日頃の業務で重宝している方法なので、ご紹介させていただきました。

この記事の例のようにシンプルなケースでは、あまり重宝しないかもしれません。

しかし、SQL文の中に変数をねじ込んだり、そもそものカラム数がめちゃくちゃ多かったり、何段階にもネストしないといけなかったり 等々、複雑なことをやる時には非常に役に立つ知識だと思います。

この記事も誰かの役に立つと嬉しいです。