• ベストアンサー

アクセスの"検索"について

いつもお世話になっています。 Accessのフォームにて、任意の郵便番号をテキストボックス(1)に入力し"検索ボタン"を押すと、 該当する住所がフォーム上のリストボックス(2)に一覧が表示され、 その中から任意の番号を1件選んで新たなテキストボックス(3)へ代入出来る、というようなシステムを作りたく考えております。 郵便番号は"郵便番号一覧"というテーブルにまとめており、 加えてクエリ( "Q_郵便番号")で郵便番号、住所等の項目を連結しています。(フォームも作成済みです) ただ、現在"検索ボタン"を押すと、全郵便番号が検索され、 もちろん郵便番号を選択するような事も出来ない状態で、構文作りに難航しています。 アイディアをお持ちの方、構文の作成についてご指南頂けますと幸いです。 現在、作成途上のVBAは下記の通りです。 Private Sub Form_Open(Cancel As Integer) 'リストボックスのプロパティの設定 With Me.(2) .RowSourceType = "Table/Query" .ColumnCount = 5 .ColumnWidths = "2.5cm;2cm;4.5cm;15cm" .BoundColumn = 1 .RowSource = "" End With Me.郵便番号検索.SetFocus End Sub Private Sub 検索ボタン_Click() '住所の検索 Me.(2).RowSource = "Q_郵便番号" Me.(2).Requery End Sub

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

  • ベストアンサー
noname#22222
noname#22222
回答No.1

[リスト_郵便番号]の値集合タイプを[リスト]にすれば、次のコードで呼び込めます。 SQL文で列数を明示的に書く必要があれば、そのように修正して下さい。 この場合、クエリは必要ありません。 検索ボタンのクリックイベントは利用していませんが、書くべきコードは同じです。 Private Sub 検索する郵便番号_AfterUpdate()   Dim strQuerySQL As String   strQuerySQL = "SELECT * FROM 郵便番号簿 WHERE 郵便番号='" & [検索する郵便番号] & "'"   Me.リスト_郵便番号.RowSource = DBLookup(strQuerySQL)   Me.リスト_郵便番号.Requery End Sub 標準モジュールには、DBLookup()を登録する必要があります。 Public Function DBLookup(ByVal strQuerySQL As String) As String On Error GoTo Err_DBlookup   Dim I   As Integer   Dim N   As Integer   Dim Datas As String   Dim dbs  As DAO.Database   Dim rst  As DAO.Recordset      Set dbs = CurrentDb   Set rst = dbs.OpenRecordset(strQuerySQL)   With rst     If Not .EOF Then       N = .Fields.Count - 1       For I = 0 To N         Datas = Datas & .Fields(I) & ";"       Next I     End If   End With Exit_DBlookup: On Error Resume Next   rst.Close   dbs.Close   DBLookup = Datas   Exit Function Err_DBlookup:   MsgBox Err.Description   Resume Exit_DBlookup End Function なお、質問の直の答えは・・・ Private Sub コマンド_検索_Click()   Me.リスト_郵便番号.Requery End Sub で良い筈です。

user1979
質問者

お礼

毎度ご指南頂き、ありがとうございます。 無事解決致しました。

その他の回答 (5)

noname#79209
noname#79209
回答No.6

マイクロソフトのIMEを使用している場合は、「住所入力支援」が使えます。 http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B889721 ご参考まで。

user1979
質問者

お礼

ご指導ありがとうございます。 別バージョンの作業にて使わせて頂きます!

noname#60992
noname#60992
回答No.5

新規でクエリを作成し、sqlビューにして strQuerySQL の内容を貼り付けフォームを開いた後、クエリを実行させ、sql文が期待通りの動きをしているかを確認します。  そのクエリをリストボックスのレコードソースとすれば簡単です。 

user1979
質問者

お礼

ご指導ありがとうございます。 無事解決いたしました。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.4

最初の質問のコードで RowSource 代入のところを "SELECT * FROM Q_郵便番号 WHERE " & 郵便番号='" & Me.(1) & "'" とするだけで、良いと思いますが。

user1979
質問者

お礼

ご指導ありがとうございます。 無事解決いたしました。

noname#22222
noname#22222
回答No.3

s_husky です。 N の代入を Loop 外に!   With rst     N = .Fields.Count - 1     Do Until .EOF       For I = 0 To N         Datas = Datas & .Fields(I) & ";"       Next I       .MoveNext     Loop   End With ※面目ないです!

user1979
質問者

お礼

毎回お世話になっており、ありがとうございます。 面目ないのはこちらです。アドバイスに深く感謝しております。 ご助言通りに構文を作ってみたのですが、 ボタン押後リストボックスに変化がありません…。 こちらの構文のどこかに問題があると思うのですが…。 Private Sub Form_Open(Cancel As Integer) DoCmd.Maximize Me.ScrollBars = 0 'リストボックスのプロパティの設定 With Me.住所表示 .RowSourceType = "Value List" .ColumnCount = 5 .ColumnWidths = "2.5cm;2cm;4.5cm;15cm" .BoundColumn = 1 .RowSource = "" End With Me.テキストボックスA.SetFocus End Sub Private Sub 検索ボタン_Click() Me.リストボックス.Requery End Sub Private Sub テキストボックスA_AfterUpdate() Dim strQuerySQL As String strQuerySQL = "SELECT * 郵便番号一覧 WHERE 郵便番号 ='" & [テキストボックスB] & "'" Me.Q_郵便番号.RowSource = DBLookup(strQuerySQL) Me.Q_郵便番号.Requery End Sub 郵便番号一覧…テーブル Q_郵便番号…クエリ リストボックスの値集合タイプ…値リスト

noname#22222
noname#22222
回答No.2

s_husky です。 With ブロックを複数行を呼び込むように訂正して下さい。   With rst     Do Until .EOF       N = .Fields.Count - 1       For I = 0 To N         Datas = Datas & .Fields(I) & ";"       Next I       .MoveNext     Loop   End With

関連するQ&A

  • 【Access】 郵便番号を検索するシステム

    よろしくお願いいたします。 現在、Accessのフォームにて、任意の番号をテキストボックス("(1)")に入力し"検索ボタン"を押すと、該当する郵便番号がフォーム上のテキストボックス("(2)")に表示されるシステムを作っています。 また、郵便番号は"郵便番号一覧"というテーブルにまとめています。 (テーブルには約14万件の"郵便番号"と"住所"が含まれています) ここで質問があるのですが、同じ郵便番号であっても複数の住所が該当するケースがあります。 テーブルにもそうした件が多数含まれていますが、現在の私のVBAでは、その内のひとつの住所しか表示することが出来ません。 そこで、複数の住所が存在する場合は、該当する住所の一覧が表示され、その中から1件を選べるようなシステムを作りたく考えています。 様々な参考書を読み続けてきましたが、完全に行き詰まりました。お知恵を拝借頂けますと幸いです。 -------------------------------- 尚、現在のVBAは下記の通りです。 Private Sub 検索ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("郵便番号一覧", dbOpenTable) With rs .Index = "郵便番号" .Seek "=", Me.(1) End With If Not rs.NoMatch Then With Me .(2) = rs!住所 End With End If rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub

  • ACCESS VBAで抽出条件の書き方

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

  • Accessでの検索フォーム作成

    お世話になります。 Accessを使い始めて半月ぐらいの初心者です 次のような条件の検索フォームの作成を依頼されたのですがうまく出来ません。 (1)Accessのフォームフィルタを使用した検索フォームで、3つのテキストボックス(以下TB)を同一 フォーム上に用意し、抽出を実行するボタンと解除するボタンをTBの隣にそれぞれ用意する (2)あいまいな条件(部分一致)で検索出来るようにする (3)抽出結果も同一フォーム上に表示 (4)任意のTBに入力した値で抽出後、他のTBを利用し 絞り込み検索を実行できるようにしたい 現在は下記のように作成しました。 ●テーブル [管理番号]、[品名品番]、[仕入先名]のフィールドを持つテーブルを用意。 ●フォーム(表形式) 上記テーブルに連結した検索フォームを作成し、抽出する値を入力する TBの名前はそれぞれ下のように付けました。 フィールド名    TB名 ・[管理番号]⇒管理番号検索 ・[品名品番]⇒品名品番検索 ・[仕入先名]⇒仕入先名検索 ・[抽出実行ボタン]のイベント(管理番号で検索時) Private Sub コマンド47_Click() Me.Filter = "管理番号 Like '*" & Me!管理番号検索 & "*'" Me.FilterOn = True End Sub ・[抽出解除ボタン]のイベント(管理番号で検索時) Private Sub コマンド49_Click() Me!管理番号検索 = Null Me.FilterOn = False End Sub 他2つも同様に作成して実行した結果、単体での抽出はうまくいくのですが さらに絞り込もうと他のTBに値を入力して抽出を実行すると先の抽出が解除され 単体でのフィルタがかかって抽出されてしまいます。 どなた様か良い案が御座いましたらご指導ください。 初心者のため、説明不足な点があるかと思いますが 不明な点がございましたらご質問くださいませ。 宜しくお願い致します。

  • アクセス コンボボックスについて

    コンボボックス 印刷ボタンについて アクセス勉強中です。 フォームで作成した画面 だけを印刷する、コンボボックスを作成しています。 コンボボックスウィザードにてフォーム印刷ボタンを作成したのですが、 1000人くらいの、すべてのデーターが印刷されてしまい困っております。 どこを変更すれば1枚だけ印刷ができるのでしょうか? イベントプロジャという部分は下記です。 またプロジャー以外に何かしなければならないのでしょうか?? どうぞ宜しくお願いいたします。 Option Compare Database Private Sub リスト70_AfterUpdate() ' コントロールの値と一致するレコードを検索する Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[IDI] = " & Str(Me![リスト70]) Me.Bookmark = rs.Bookmark End Sub Private Sub コンボ73_AfterUpdate() ' コントロールの値と一致するレコードを検索する Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[NO] = " & Str(Me![コンボ73]) Me.Bookmark = rs.Bookmark End Sub Private Sub コンボ73_BeforeUpdate(Cancel As Integer) End Sub Private Sub 生年月日_AfterUpdate() Me.年_____齢 = Int(DateDiff("d", [生年月日] - 1, Date) / 365.25) End Sub Private Sub 郵便番号_AfterUpdate() Me!現住所.SetFocus Me!現住所.SelStart = Len(Me!現住所) End Sub Private Sub コマンド121_Click() On Error GoTo Err_コマンド121_Click Dim stDocName As String Dim MyForm As Form stDocName = "顧客リスト" Set MyForm = Screen.ActiveForm DoCmd.SelectObject acForm, stDocName, True DoCmd.PrintOut DoCmd.SelectObject acForm, MyForm.Name, False Exit_コマンド121_Click: Exit Sub Err_コマンド121_Click: MsgBox Err.Description Resume Exit_コマンド121_Click End Sub

  • Accessの絞りこみについて教えて下さい。

    Access初心者です。顧客テーブルがあり、名前で絞りこみをかけたいのですが、エラーになってしまい困っています。 顧客テーブルからフォームを作り、フォームヘッダーにテキストボックスとボタンを作成しました。 絞り込みは苗字でもHITするようにし、テキストボックスには名前を入力、ボタンで絞り込みをかけるというかたちです。。 テキストボックス名は検索用、ボタンの名前は検索にしています。 そこで下記VBAコードを入力したところ、パラメータが出てきてしまい、絞り込み出来ません。 Private Sub 検索_Click() Me.RecordSource = "select * from 顧客リスト where 氏名 like ‘*" & 検索用 & "*’" End Sub どうしたらよいでしょうか? 教えて下さい。 よろしくお願いします。

  • Accessの検索フォーム

    またまたAccessについての質問です。 検索フォームというのを作りました。 テーブルのデータから条件に合うものだけを抽出したいのです。 たとえば1つ目の検索フォーム[A]のテキストボックスに「AAA」を入力します。 そのあとBには「BBB」と入力します。 同じくCには「CCC」と入力します。 そして絞込みボタンを押したらAAAでBBBでCCCのものが抽出されます。 これはうまくいきました。 とりあえず、複数条件なので、わけもわからず「&」で結んでしまいました・・・。 ↓は絞込みボタンのクリック時です。↓ 困ったのは、すべて検索条件を指定しない場合です。 たとえば「AAA」で「CCC」のものを抽出したいとき、[A]のテキストボックスに「AAA」と入れ [C]のテキストボックスに「CCC」と入れます。 そして絞込みボタンをクリック。 するとBが未記入だからか、抽出されたのは真っ白でした・・・。 Option Compare Database Private Sub コマンド50_Click() Me.Filter = "契約='" & Me!テキスト51 & "'and A='" & Me!テキスト57 & "'" Me.FilterOn = True End Sub 組み合わせが自由になる検索フォームにするにはどうすればよいのでしょうか? 誰か助けてくださ~い!

  • access 検索について教えてください。

    フォームにテキストボックス(テキスト0)を配置し、県名を入力するとこのフォーム(検索フォーム)にレコード内容が表示されるようにしました。クエリの県名の抽出条件にform![検索フォーム]![テキスト0]とし、検索フォームの更新後処理に Private Sub テキスト0_AfterUpdate() DoCmd.Requery End Sub と記載し利用しています。 ここで質問ですが、抽出条件に[me].[テキスト0]と記載し、上記内容のコードを記載しましたが、検索フォームが表示できません。 どこがいけないのでしょうか? お願いします。

  • 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 よろしくお願いいたします。

  • Access 検索フォーム

    いつもお世話になってます。 Accessの検索フォームについて教えて下さい。 業務マスターと仕事DBという2つのデーターベースがあります。 業務マスターは共有のサーバーの中にあり、得意先テーブルをリンクして、それをもとに得意先フォームを作りました。 非連結のテキストボックス(txt検索)と非連結のリストボックス(一覧)がり、リストボックス(一覧)のクエリ得意先の抽出に使うフィールドの条件に、Like"*"&[Forms]![得意先フォーム]![txt検索]&"*" を入れました。 txt検索に文字を入れ、一覧リストボックスで絞込をし、選ぶとフォームに表示されるという流れにしたのですが・・・。 Private Sub txt検索_AfterUpdate() Me![一覧].Requery End Sub Private Sub 一覧_AfterUpdate() Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[得意先ID] = " & Str(Nz(Me![一覧], 0)) If Not rs.EOF Then Me.Bookmark = rs.Bookmark End Sub [Forms]![得意先フォーム]![txt検索]というパラメータがでて(今まで出たことがない) 文字を入力しても実行できませんでした。参照元が分からないのかなと思いますが、どうしたらうまくいくのか分かりません。どなたかお知恵をかしていただけないでしょうか。Accessは2003を使っています。よろしくお願いします。

  • アクセスのMeについて

    アクセスの本の中で,Meが出てきました。 問題は,フォームに得点と結果のテキストボックスを作成します。そして,テキストボックスに得点を入力します。コマンドボタンに次のイベントで,得点が合格か不合格かを判定し,結果のテキストボックスに出力するものです。フォームにMeを入力していないのですが,VBAで突然現れてきました。このMeは,どんなときに使うのでしょうか。教えていただければ幸いです。 Private Sub 実行_Click() If Me.得点 >= 100 Then Me.結果 = "合格" Else Me.結果 = "不合格" End If End Sub

専門家に質問してみよう