
現在Access VBAを勉強中の者です。
DoCmd.OpenForm については、同じQ&Aがありますが回答内容の意味が理解できず応用が利きません。
具体的には、
DoCmd.OpenForm "フォーム名", , , "商品番号 = '" & Me!商品番号 & "'"
における、Where句の「"」と「'」の使い方です。
私の情報収集では、
(1)文字列は「"」で囲む。
(2)Where句は「"」で囲む。
(3)「"」の囲みが重複したら内側を「'」に変更する。
なのですが、(2)と(3)は上記の例からでは理解に苦しみます。
DoCmd.OpenForm のWhere句の「"」と「'」の使い方についてその仕様を教えて下さい。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
>(1)変数(Me!商品番号など)を「'」で囲む場合とはどのような場合と理解すればよいですか。
プログラムでは変数も値も全て文字で書きますが
プログラム内で値を直接書くときに書かれたものがどういう値なのかを表すために使用する特定の書式が決められています
処理系によってその仕様は異なりますが
Accessでは
文字列:"xxx"または'xxx'
日付時刻:#xxx#
数値:そのまま
文字列を何も囲まないで書けば変数になります
""の中に「"」を書きたいときには2つ重ねるか、[']を使用します
>(2)Where句は「"」で囲む。は私の誤解と理解すればよいですか。
Where句は文字列で与えるというのが仕様ですから
「"」または「'」で囲みます
Me!商品番号 = "123"
という条件を文字列にするために全体を["]で囲みます
そのとき123の前後の「"」を[']に書き換えているのです
(2つ続きに書き換えてもOKです)
"Me!商品番号 = ""123"""
No.2
- 回答日時:
>DoCmd.OpenForm "フォーム名", , , "商品番号 = '" & Me!商品番号 & "'"
まず、文字列というものを理解してください。
ここで, Me!商品番号 = 123 と数字ならば
where句は "商品番号=123" となり、' はいりません。
Me!商品番号 = "123" と文字列ならば
where句は 商品番号="123" となりますが全体を文字列にするために
"商品番号='123'" とします。
それで"123"を変数のMe!商品番号と置き換えるために、連結記号の&を使って、 "商品番号 = '" & Me!商品番号 & "'" となるのです。
あくまでも、一つの文字列の中に、変数を埋め込んでいると考えると
理解できると思います。
No.1
- 回答日時:
>DoCmd.OpenForm のWhere句の「"」と「'」の使い方についてその仕様を教えて下さい。
DoCmd.OpenForm "フォーム名", , , "商品番号 = '" & Me!商品番号 & "'"
の第4引数である"商品番号 = '" & Me!商品番号 & "'"は、条件句が入りますので、関数に渡したいのは「商品番号 = 'Me!商品番号'」といった形式のものになります。
ところが上記のように書くと、VBAには変数なのか文字列なのか区別がつかないのです。
その区別をつけるために、VBAには
(1)文字列は""で囲む
(2)文字列同士をくっつけたい場合は&を使用する
というルールがあります。
それを踏まえてDoCmd.OpenFormの第4引数である
"商品番号 = '" & Me!商品番号 & "'"
を見てみると、下記のように3つの文字列に別れていることが分かります。
"商品番号 = '"
Me!商品番号
"'"
の3つですね。
なぜ3つに分かれているのかというと、2つ目のMe!商品番号がただの文字列ではなく、変数であるからなのです。
VBAでは値の変わらない文字列("商品番号 = '"など)と
変数(Me!商品番号など)をくっつけたい場合、上記のように&でくっつけて表記する必要があるのです。
ですので、DoCmd.OpenForm のWhere句の「"」と「'」の仕様というよりは、VBAの仕様の問題になります。
この回答への補足
tossy005 さん、丁寧な回答ありがとうございます。
下記2点の不明項目がありますので追加で教えて下さい。
(1)変数(Me!商品番号など)を「'」で囲む場合とはどのような場合と理解すればよいですか。
(2)Where句は「"」で囲む。は私の誤解と理解すればよいですか。
以上、宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
いきなりPDF ダウンロード方法
-
固定電話着信履歴 181 ・・・・...
-
体育の時の4列横隊ってどーやっ...
-
66から始まる番号
-
81・・・・・から始まる電話...
-
至急お願いいたします! ゆう...
-
同じ商品なのに、JANコード...
-
823で始まる電話番号
-
FAX番号の英語表記とは?
-
電話番号 +817673467911という...
-
0120613184は、どこの番号です...
-
内線番号一覧が分かりづらい
-
電話をかけるのに、違う番号を...
-
すべて「ひとつ・・・」ではじ...
-
携帯番号変える時は、それなり...
-
P/Nとは?
-
UL規格のイエローカード番号...
-
1から5までの番号が1つずつ書か...
-
銀行で番号札は?
-
フリーダイヤルのけた数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
823で始まる電話番号
-
固定電話着信履歴 181 ・・・・...
-
至急お願いいたします! ゆう...
-
同じ商品なのに、JANコード...
-
電話をかけるのに、違う番号を...
-
81・・・・・から始まる電話...
-
映画のチケットをスマホで購入...
-
パチンコの抽選入場って、番号...
-
電話番号 +817673467911という...
-
その曲が弾けるようになるまで...
-
フリーダイヤルのけた数
-
if関数を使って割引率をだす
-
エクセル ADO Filterでは一気...
-
不気味な番号
-
携帯番号変える時は、それなり...
-
P/Nとは?
-
1から5までの番号が1つずつ書か...
-
66から始まる番号
-
すべて「ひとつ・・・」ではじ...
-
銀行で番号札は?
おすすめ情報