ACCESS VBA シングルクォーテーションの使い方

ACCESS VBAでは文字列を指定する際に”(ダブルクォーテーション)で囲うというルールがあります。
しかし、まれに’(シングルクォーテーション)で文字列が囲われているケースがあります。
この違いは何でしょうか?
今回は、シングルクォーテーションの使い方をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
VBAで文字列を扱う際の記述方法
VBAでシングルクォーテーションを利用するのは、文字列型のデータを扱う時です。
特に、ダブルクォーテーションですでに囲われた文字列の中で、入れ子で文字列型を表現する場合に利用します。
基本的には文字列型のデータはダブルクォーテーションで区切って表現します。
しかし、ダブルクォーテーションが使えない場合に、代わりにシングルクォーテーションを利用するケースがあるのです。
例えば、filter_txtという文字列型の変数に「りんご」という文字列を代入する場合は以下のように記述します。
tilter_txt = "りんご"
この際、りんごをダブルクォーテーションで囲って表現することで、文字列型のデータとして扱うことができます。
これであればシングルクォーテーションは必要ありません。
シングルクォーテーションを利用するケース
VBAで文字列型データを扱う中でも、シングルクォーテーションが必要になるのは条件式自体を変数に格納したりする場合です。
例えば、以下のような検索フォームがあります。

このフォームではフォーム上段に入力された検索条件をもとに、レコードを抽出して表示します。
この際に、VBAでレコード抽出のプロシージャを動作させています。
プロシージャの内容は以下の通りです。
filter_txt = ""
If Me!商品名検索 <> "" Then
filter_txt = "商品名 like '*" & Me!商品名検索 & "*'"
End If
Me.Filter = filter_txt
Me.FilterOn = True
このプロシージャでは、filter_txt変数にフォームに対して適用するフィルター条件式を格納しています。
Me!商品名検索は、フォーム上での商品名検索テキストボックスに入力された値を示しており、この値を前後の文字列と&でつなぐことで抽出条件式を作っています。
例えばフォーム上での商品名検索テキストボックスに「りんご」と入れた場合は、filter_txtには文字列型のデータであることを示すダブルクォーテーションが無視されて
商品名 like '*
りんご
*'
の3つのパーツが合成され、結果的に
商品名 like '*りんご*'
と代入されることになります。
ここでのシングルクオーテーションは、ダブルクォーテーションと同様に、間に挟まれた値が文字列型データであることを示しています。
この際、ダブルクォーテーション内でさらにりんごが文字列であることを示す必要があるため、ここでダブルクォーテーションを使って以下のように記述するとうまく動作しません。
filter_txt = "商品名 like "*" & Me!商品名検索 & "*""
この書き方では、ダブルクォーテーション間を1つの文字列として扱ってしまうために、
"商品名 like "
で一つの区切りになってしまい、
*"
は最初のダブルクォーテーションが欠けているように認識されてしまうので、構文エラーとなってしまうのです。
そのため、ダブルクォーテーションですでに囲われた文字列の中で、入れ子で文字列型を表現する場合には、ダブルクォーテーションの代わりにシングルクォーテーションを利用し、
filter_txt = "商品名 like '*" & Me!商品名検索 & "*'"
と記述します。
この書き方は慣れるまで理解が難しいのですが、使いこなすとVBAで記述できるプロシージャの範囲が劇的に広がります。
以上、シングルクォーテーションの使い方をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。