技術系

(VBA)SQL文が通らないときの注意点(「”」のあとは半角スペースを)

VBA半角スペース

VBAでSQL文を投げたとき、なぜかエラーが帰ってくることってよくありますよね。

原因は無限に考えられると思いますが、今回は私がいつもチェックしている基本的な項目の一つをご紹介します。
何回SQL文を見返してもエラーの原因がわからない場合はこちらもチェックしてみてください。

初めてこれがエラーの原因と解明したときは正直「これに気付くのは至難だ」と思いました…。

それでは早速ご紹介します!

「”」のあとは半角スペースを

次のVBAで書かれたSQL文ですが、これはエラーで通りません。
(「カラム名」や「テーブル名」は実際には具体的な名称が入ります。)

strSql =
"SELECT カラム名"& _
"FROM テーブル名"& _
"WHERE カラム名 = 値;"

エラーの原因になるのは「”From〜」と「”WHERE〜」の部分です。

これらは「”」と「FROM」それから「”」と「WHERE」の間にそれぞれ半角スペースが必要です。
もしくは一つ上の行で「名」の後に半角スペースでも構いません。

なぜかというと、VBAの改行文字「& _ 」はVBA画面上で改行されるだけで、実際には以下のようにそのまま連続して結合されるからです。

strSql = "SELECT カラム名FROM テーブル名WHERE カラム名 = 値;"

これでは「カラム名FROM」というように「カラム名」と「FROM」の間に区切りがなく、一つの単語として扱われるためエラーになってしまいますね。

したがって、以下のように書くのが正解です。

strSql =
"SELECT カラム名"& _
" FROM テーブル名"& _
" WHERE カラム名 = 値;"

少しわかりにくいですが、オレンジの部分 に半角スペースが入っています。
これで結合結果は以下のようになり、正常にSQLが通るようになります。

strSql = "SELECT カラム名 FROM テーブル名 WHERE カラム名 = 値;"

VBAでSQL文が通らないときの注意点(「”」のあとは半角スペースを):まとめ

VBAでSQLを書く際には特有の注意しなければいけない点がいくつかあり少し面倒ですが、慣れてくれば自然に書けるようになります。

どうしてもエラーの原因が分からないときは、SQL文の構造そのものだけでなく、VBA特有の注意点にも目を配ってみましょう。

穴太

この記事で救われる方がいらっしゃれば幸いです。
ご覧いただきありがとうございました

-技術系