【VBA】ダブルクォーテーションを含んだSQL文を変数に格納する方法
皆さんこんにちは。
今日は少々マニアックな内容になります。
ダブルクォーテーションとは、VBAで文字列を扱う際によく使う記号です。
“ ←こんな記号です。
SQL文にも、このダブルクォーテーションが登場することがあります。
VBAでSQLを扱う際、SQL文を一旦文字列型の変数に格納することがよくあります。
こんなイメージです。
※オブジェクト定義等 小難しい話は一旦省略します。
Dim strSQL As String strSQL = "SELECT * FROM Table_Name" DoCmd.RunSQL(strSQL)
このくらい短いSQL文なら良いのですが、長いSQL文の場合は、変数に格納した方が見た目がきれいに収まります。
さて、ここからが本題です。
SQL文の中にダブルクォーテーションが登場するとどうなるでしょうか。
例としてこんなケースを取り上げたいと思います。
元データが入っているテーブルが、こんな感じだったとします。
※テーブル名は「Table1」ということにしましょう。
クエリを実行して、「連番」と「文字」のフィールドを結合させます。
実行結果はこんな感じになります。
このクエリのSQL文はこんな感じになります。
SELECT [連番] & "_" & [文字] AS [連番+文字],データ1 ,データ2 FROM Table1
VBAでこのSQLを実行させるとして、変数にこのままSQL文を格納するとエラーが出ます。
※SQL文中のダブルクォーテーションが悪さをするんですね。
このエラーを避けるためには、こんな感じの記述になります。
Dim strSQL As String strSQL = "SELECT [連番] " & Chr(34) & "_" & Chr(34) & "[文字] " & _ "AS [連番+文字],データ1 ,データ2 " & _ "FROM Table1" DoCmd.RunSQL(strSQL)
「""で囲まれた文字を文字列として扱う」
というルールなので、「""」自体を文字列として扱うためには一工夫必要になります。
このコードの場合、
Chr(34) = “
として扱われます。
もう一つの記述方法としてこんな書き方もあります。
Dim strSQL As String strSQL = "SELECT [連番] “ & """"& "_" & """" & "[文字] " & _ "AS [連番+文字],データ1 ,データ2 " & _ "FROM Table1" DoCmd.RunSQL(strSQL)