ACCESS VBAで抽出条件の書き方

このQ&Aのポイント
  • フォームに、テキストボックス(名前「txt住所」)とコマンドボタン(名前「cmd開く」)を作成しています。テキストボックスに入力した値と等しいレコードだけを、F_顧客フォームに表示するには以下のように書く。
  • なぜMe!txt住所は、&(文字列連結演算子)で囲まないといけないのでしょうか??
  • そして、& Me!txt住所のあとにスペースをいれないと、構文エラーになるのですが、スペースが必要なのはなぜでしょうか??
回答を見る
  • ベストアンサー

ACCESS VBAで抽出条件の書き方

フォームに、テキストボックス(名前「txt住所」)とコマンドボタン(名前「cmd開く」)を作成しています。 テキストボックスに入力した値と等しいレコードだけを、F_顧客フォームに表示するには以下のように書く。 とテキストに書いてありました。 Private Sub cmd開く_Click() DoCmd.OpenForm "f_顧客", , , "住所='" & Me!txt住所 & "'" End Sub ・・・質問があるのですが。 なぜMe!txt住所は、&(文字列連結演算子)で囲まないといけないのでしょうか?? そして、& Me!txt住所のあとにスペースをいれないと、構文エラーになるのですが、スペースが必要なのはなぜでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
  • PPancho
  • ベストアンサー率27% (26/96)
回答No.2

ACCESSのフォームでMe!txt住所(.text)に 「東京都千代田区」と入力したとします。 DoCmd.OpenForm "f_顧客", , , "住所='" & Me!txt住所 & "'" は DoCmd.OpenForm "f_顧客", , , "住所='東京都千代田区'"になりますね。 もし、'" & Me!txt住所 & "'"がないと「東京都千代田区」と同様、 「Me!txt住所」というただの文字列(と同じ)になってしまい、 コンピュータがACCESSのフォームのテキストボックスの入力値で あると認識できないからです。 &は文字列を結合するのに使用しています。&の前後にスペースを 空けることで & 文字列 & の文字列は変数であることを示して います。また文字列に"'" をつけるのは、後に来る変数が数字型 ではなく文字列型の変数であることを示しています。

minao9
質問者

お礼

ごめんなさい、お礼が大変遅くなりました。 とても分かりやすい説明ありがとうございました。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

&は文字列連結の演算子です 変数の後ろにスペースが必要なのは 変数が長整数型の型宣言子と区別するためです dim nL& と宣言すると 変数nLは長整数型の変数になります dim nL as Long と宣言したのと同じ効果があります

関連するQ&A

  • アクセスVBA 変数を渡したい

    フォーム1のcmd_ボタンをクリックして、フォーム2を開く際に、変数を渡したいのですが、どう渡せばいいのでしょうか? Private Sub cmd_ボタン_Click() myStr = "あああ" DoCmd.OpenForm "フォーム2" (myStr) End Sub とすると、エラーになります。 文の書き方を教えてください。

  • VBAのopenformについて

    はじめまして。 現在、Accessを仕事で使うために勉強中です。 使用しているOSはWindowsXP、Accessは2003を使用しています。 顧客管理のデータベースのようなものを練習で作っているのですが、 作成した一覧のフォームから顧客コードを元に別のフォームを開けるように したいのですが、うまくいきません。 フォーム1:顧客一覧 フォーム2:顧客登録画面 このフォーム1とフォーム2は、同じテーブルを元にしたフォームです。 フォーム1の「顧客コード」というところをダブルクリックすると、該当の顧客コードの フォーム2が開くようにしたいと思い、フォーム1のテキストボックスに、 Private Sub 顧客コード_DblClick(Cancel As Integer) DoCmd.OpenForm "顧客登録", , , "[顧客コード] ='" & Me![顧客コード] & "'" End Sub と記載しましたが、いざ実行をすると 「OpenFormアクションの実行はキャンセルされました」 と表示されてしまいます。 どのようにしたら、この現象が回避でき希望する動きができるのかわからず悩んでおります。 すみませんが、解決する方法を教えていただければと思います。 宜しくお願いいたします。

  • テキストボックスから一致したデータを抽出したい。

    初心者です。Access2003で、 (1)テーブルで「氏名」、「住所」のデータを作成。 (2)フォームでテキストボックス(txt_入力)とコマンドボタンを作成。 (3)押下時で開くようなフォームを作成(F_データリスト) テキストボックス(txt_入力)に氏名を入力し、テーブルと一致したものだけを抽出したい。 以下のように記述するとコマンド45押下でパラメータの入力画面がでてしまします。助けてください。 Private Sub コマンド45_Click() On Error GoTo Err_コマンド45_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_データリスト" stLinkCriteria = "[氏名]=" & " Me![txt_入力]" DoCmd.OpenForm stDocName, , , stLinkCriteria 以下省略。

  • Access 抽出したデーターの詳細の連続表示

    Filterで抽出した複数のデーターの詳細をそのデーターの順で連続して表示したいのでご指導ください。 F_物件検索  (メインフォーム) F_検索結果  (サブフォーム用) sub検索結果 (サブフォーム) F_店頭用   (詳細表示用) 抽出された最初のデーターの詳細を表示する場合は下記の通りで問題なく動作します。 Private Sub cmd物件詳細_Click() DoCmd.OpenForm "F_店頭用", acNormal, , "物件番号 = " & Me!sub検索結果.Form!物件番号, acFormReadOnly End Sub 上記で表示されたF_店頭用の詳細画面に【次へ】のボタンをAccessのマクロで設定しても、表示されるデーターは抽出されたものではなく、テーブルのデーター順に表示されます。 そこで、OpenFormコマンド、他で何とかならないものでしょうか? 下記ではエラーがでます。 Private Sub cmd連続詳細_Click() DoCmd.OpenForm "F_店頭用", , Me!sub検索結果, acFormReadOnly End Sub 尚、全てのデーターは下記にあります。 www.ky-housing.jp/oshiete-goo/q-2.accdb

  • Access 複数条件のフィルタ

    フォーム[F_MENU]に非連結のテキストボックス検索用A~Cで3つあります。 検索用A 検索用B 検索用C AかつBかつCという全件一致でフィルターをかけてフォーム[詳細]を開きたいのですが DoCmd.OpenForm "F_詳細", , , "A = '" & Forms!F_MENU!検索用A & "'" And "B = '" & Forms!F_MENU!検索用B & "'" And "C = '" & Forms!F_MENU!検索用C & "'" とやると、実行時エラー'13':型が一致しません。 と出てしまいます。 Aだけ、Bだけ、Cだけ、それぞれひとつずつ書けば、エラーなく結果が得られます。 DoCmd.OpenForm "F_詳細", , , "A = '" & Forms!F_MENU!検索用A & "'" DoCmd.OpenForm "F_詳細", , , "B = '" & Forms!F_MENU!検索用B & "'" DoCmd.OpenForm "F_詳細", , , "C = '" & Forms!F_MENU!検索用C & "'" おそらくANDの使い方が誤っていると思うのですが、添削お願いいたします。 全てのテキストボックス及び元テーブルのデータ型はテキスト型です。 条件は3つとも完全一致のみで、検索用ABC、F_詳細のABCそれぞれのカラムにNULL値はありません。 よろしくお願いします。

  • Access2003 フォームを開くときの抽出設定について

    WindowsXP SP3+Access2003 環境です。 メニューフォームからデータのあるフォームを開こうと考えています。 ボタンウィザードでボタンを用意しようと思い、ウィザードの抽出条件としてメニューフォーム上のテキストボックス[txt_出庫用商品名]を設定しました。 データフォームの[商品名称]というフィールドと全てマッチすると抽出されるのですが、抽出したい文字列を【含む】場合の書式がうまく書けません。 (=ワイルドカードの配置がわかりません) ウィザードから自動的に記述されている以下について、"Me![txt_出庫用商品名]"を【含む】データを抽出する場合の記述を教えてください。 stLinkCriteria = "[商品名称]=" & "'" & Me![txt_出庫用商品名] & "'" DoCmd.OpenForm stDocName, , , stLinkCriteria よろしくお願い致します。

  • クリックイベントなのに、2回クリックしないとフォー

    クリックイベントなのに、2回クリックしないとフォームが閉じないです。 フォームに閉じると言うコマンドボタンがあり、クリックイベントで Private Sub cmd_閉じる_Click() DoCmd.Close acForm, Me.Name End Sub としてるのですが、なぜか1回ボタンを押しただけではフォームが閉じません。 2回目押した時にフォームがとじます。 ダブルクリックでも閉じます。 Private Sub cmd_閉じる_Click() 'DoCmd.Close acForm, Form_Fフォーム.Name End Sub のように、フォーム名を指定すると1回のクリックで閉じます。 しかしMe.Nameだと2回目じゃないと閉じない理由がわかりません。 Fフォームは他フォームから DoCmd.OpenForm Form_Fフォーム.Name, acNormal で開いたから2回クリックしないと閉じないのでしょうか?

  • ACCESS VBA で複数項目検索にテキストボックスとコンボボックス

    ACCESS VBA で複数項目検索にテキストボックスとコンボボックスを使用したい txtPC番号というテキストボックス、 com所属部門というコンボボックス、 txt使用者というテキストボックスの どれかひとつの条件が入力されたときに 該当するフォームのレコードを抽出できるようにしたいのですが、 コンボボックスで選択した場合のみうまく抽出できません。 コードのどの部分に誤りがあるのでしょうか? ご指摘願えませんでしょうか? よろしくお願いいたします。 Private Sub cmd01_Click() Me.FilterOn = False If Me!txtPC番号 <> "" Then Me.Filter = "[PC番号]like '*" & Me!txtPC番号 & "*'" ElseIf Me!com所属部門 <> "" Then DoCmd.Requery "com所属部門" ElseIf Me!txt使用者 <> "" Then Me.Filter = "[使用者]like '*" & Me!txt使用者 & "*'" End If Me.FilterOn = True End Sub

  • ACCESS

    現在以下のシステムを検討しています。 (1)ログインフォームと(2)トップフォーム(3)注文フォームが別々に存在しており、 (1)ログインフォームは  ・ログインID入力用のテキストボックスが一個  ・パスワード入力用のテキストボックスが一個  ・ログインボタンが1個  設置されています。 以下はログインボタンクリック時に動作するプログラムです。 Private Sub cmdLogIn_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "IDを入力してください" Me.txtID.SetFocus Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "パスワードを入力してください" Me.txtPass.SetFocus Exit Sub End If Res = DLookup("パスワード", "T顧客", _ "顧客ID='" & Replace(Me.txtID, "'", "''") & "'") If IsNull(Res) Then MsgBox "該当するIDはありません。正しいIDを入力してください。" Me.txtID.SetFocus Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "注文フォーム" '----ID,pass合致でフォームを開く。 Me.txtID = Me.txtID2 Me.txtPass = Me.txtPass2 DoCmd.Close acForm, "Fログイン" Else MsgBox "パスワードが異なります。", vbOKOnly + vbCritical Me.txtPass.SetFocus End If End Sub (2)トップフォームは  商品のリストが画像付き(商品一個につき画像一個)  で示され、画像を押すと商品別に作成してある注文フォームに進むのですが、  ログイン完了していないとログインを促すメッセージが出て注文フォームが開かないよう  にしています。  トップフォームにはテキストボックスを2個不可視の状態で配置しております。  以下は商品画像に埋め込んであるコマンドです。 Private Sub 商品画像 1_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "ログインしてください" Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "ログインしてください" Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "商品名" '----ID,pass合致で注文フォームを開く。 End If End Sub   (3)注文フォームは  ・数量選択のコントロールボックス  ・注文ボタン  ・キャンセルボタン  を設置しています。 【以下が質問内容になります】 「ロフインフォーム」内の入力値(テキストボックスに入力されていたIDやパスワード値)を注文フォーム内のテキストボックスに取得させる(あるいは設定させる)にはどのようにすればよいのでしょうか? 注文フォームにはテキストボックス2個( ID入力用と Password入力用)を不可視で配置しています。こちらのテキストボックス2個については手動入力は行わず、注文フォームが開いた際にログイン時の ID, Paswordがテキストボックスの中に自動的に入力あるいは設定されるようにしたいのですが、どのようにすればよいかがわかりません。 因みにログイン ID,Passwordは複数セットあり、ユーザーがログイン完了後、注文フォームを閉じるまでの間は 同一のID, Paswordの内容を保持したいと考えています。 上記の中にID,Paswordを保持させるようなコードを入れることは可能でしょうか? 注文フォームを開く際のコードに何か入れることができるのではないかと考えていたの ですが、よい案が浮かびません。 他によいやり方などがあれば教えていただけますでしょうか? よろしくお願いします。

  • Access2010 SetFocusが当たらない

    Access2010です。 VBAにて、あるフォームの、デザイン上、「詳細」の中に存在しているテキストボックスにSetFocusでフォーカスを当てようと思ってます。 1 フォームロード時、フォームの「詳細」は非表示(当然、テキストボックスも非表示) 2 ボタンクリック時、フォームの「詳細」を表示し、テキストボックスにフォーカスを当てる という動作をしているのですが、2でテキストボックスにフォーカスがフォーカスが当たりません。どうしたらフォーカスが当たるのでしょうか? 以下、コードです。 Private Sub Form_Open(Cancel As Integer) Me.詳細.Visible = False End Sub Private Sub cmdボタン_Click() Me.詳細.Visible = True 'テキストボックスにフォーカスを当てる Me.txtテキスト.SetFocus End Sub よろしくお願いいたします。