Acces97にて下記のようなデータベースを使用しております。
テーブル:銀行コード一覧(銀行コード、銀行名、支店コード、支店名、支店住所)
クエリー:Q-銀行名検索、Q-支店名検索
フォーム:F-銀行名検索、F-支店名検索
今は検索したいフィールド毎にクエリーとフォームが作ってあり、同じようなクエリーとフォームが複数ある状態です。
<クエリー>
(1)Q-銀行名検索→フィールド「銀行名」に【Like "*" & [調べたい銀行名の一部入力] & "*"】設定
(2)Q-支店名検索→フィールド「支店名」に【Like "*" & [調べたい支店名の一部入力] & "*"】設定
・・・以下同様のクエリー複数あり
<フォーム>
(1)F-銀行名検索にQ-銀行名検索を設定
(2)F-支店名検索にQ-支店名検索を設定
・・・以下同様のフォーム複数あり
今回作りたいのは、1つのフォーム内に検索したいフィールド分の検索ボタンを作り、検索したい項目をテキストボックス内に入力後該当ボタンをクリックすることによって入力した項目を含むデータが抽出されるというフォームです。
例えば、"東京"と入力し「支店名」ボタンをクリックすると『東京営業部』『東京中央』等"東京"を含むデータが抽出される といった具合です。
部署内にAccess作成事例集なるものがあり、それを元に下記のように作成してみました。
フォーム名を「F-銀行コード一覧」・テキストボックス名を「検索」として、「支店名」ボタンのマクロに [Forms]![F-銀行コード一覧]![検索]=[銀行コード一覧]![支店名] というアクション(フィルタの実行→Where条件式)を設定。しかし、これでは『東京』のみしか抽出されませんでした。
Like関数を利用するのかと思い Like "*"&[Forms]![F-銀行コード一覧]![検索]&"*"=[銀行コード一覧]![支店名] としてみましたが設定できませんでした。
どのようなアクションを設定したらフォームでのあいまい検索ができるのでしょうか?
No.8ベストアンサー
- 回答日時:
フムフム!
1、検索フォームのレコードソースに作成されたクエリを設定する。
2、入力された条件に基づいてフォームをリクエリする。
ということです。
ですから、マクロはこの際関係ありません。
検索したい項目毎にクエリーを作成・・・。
ではなくて、
クエリーの検索したい項目毎に抽出条件を設定。
です。
まあ、これは表現の問題で一応クリアされているとすれば、既に99%完成しています。
既に99%完成とは、「検索フォームのレコードソース=クエリ」ということです。
さて、ここからかなり怪しい記憶ですが、{Shift}{F9}か{Ctrl}{F9}で再検索(=Requery)します。
問題は、これをどのように自動化するかです。
1、コマンドボタンを検索フォームに配置。(ウィザードを使わずにただ配置)
2、同ボタンを右クリックして、次のコードを書く。
Private Sub コマンド_抽出_Click()
Me.Requery
End Sub
作成したクエリを使うのはあくまでも検索フォーム。
この場合、「検索フォームのレコードソース=クエリ」という設定を行うという意味。
クエリを起動しても、ただ、クエリが開くだけです。
残された課題は、僅かに1行のコードを書くだけじゃないですか?
頑張って下さい。
返答が遅くなり申し訳ありませんでした。
あれから同僚とも試行錯誤しながら頑張ってみましたが、結局当初の理想のフォームは断念しました。
<当初の予定>
1つのフォーム内にテキストボックス1個、検索ボタンを項目ごとに配置→同一フォーム内にデータ抽出
<断念後>
ご教授いただいた【Like "*" & [Forms]!フォーム名!テキストボックス名 & "*"】を1つのクエリーに設定
検索用フォームを作り項目ごとのテキストボックス配置(複数・あいまい検索可能)、検索ボタン1個→別フォームにデータ抽出
何度も何度もご回答をいただいたにもかかわらず理想の形には辿り着けませんでした。大変申し訳ありません。
ですが、いろいろな状況で活用できるAccessの作成方法をまた一つ学びました。これを機に応用が利くようにもっと勉強をしたいと思います。
Husky2007様には本当に感謝しております。
できることなら直接お会いしてお礼を述べたいくらいですが、この場を借りてお礼を申し上げます。
本当にありがとうございました。
No.7
- 回答日時:
>マクロ→フィルタの実行→Where条件式に
クエリを作ったのならフィルタは必要ないと前に書きましたよ
>Like "*"&[Forms]![F-銀行コード一覧]![検索]&"*"=[銀行コード一覧]![支店名]
こんなめちゃくちゃな式はエラーになるのは当然です
Likeを使うのなら
フィールド名 Like "*" & [パラメータ] & "*"
=を使うのなら
フィールド名 = [パラメータ]
Likeのヘルプをよく読んでください
返答が遅くなり申し訳ありませんでした。
あれから同僚とも試行錯誤しながら頑張ってみましたが、結局当初の理想のフォームは断念しました。
<当初の予定>
1つのフォーム内にテキストボックス1個、検索ボタンを項目ごとに配置→同一フォーム内にデータ抽出
<断念後>
ご教授いただいた【Like "*" & [Forms]!フォーム名!テキストボックス名 & "*"】を1つのクエリーに設定
検索用フォームを作り項目ごとのテキストボックス配置(複数・あいまい検索可能)、検索ボタン1個→別フォームにデータ抽出
何度も何度もご回答をいただいたにもかかわらず理想の形には辿り着けませんでした。大変申し訳ありません。
ですが、いろいろな状況で活用できるAccessの作成方法をまた一つ学びました。これを機に応用が利くようにもっと勉強をしたいと思います。
CHRONOS_0様には本当に感謝しております。
できることなら直接お会いしてお礼を述べたいくらいですが、この場を借りてお礼を申し上げます。
本当にありがとうございました。
No.6
- 回答日時:
>これらはモジュールを利用されてますでしょうか?
クエリのデザインのみですよ。
Like "*"&[Forms]![F-銀行コード一覧]![検索]&"*"=[銀行コード一覧]![支店名]
との違いは、
(((銀行コード一覧.銀行名) Like "*" & [Forms]![銀行コード一覧]![抽出する銀行名] & "*")
((銀行コード一覧.支店名) Like "*" & [Forms]![銀行コード一覧]![抽出する支店名] & "*"))
と、抽出条件を[銀行名]と[支店名]とで別々に設定していることです。
クエリのデザインで設定するには、LIKE以下をそれぞれの列の抽出条件に書くかビルドすることです。
以上の6行を注視されたし!
この回答への補足
何度も何度も丁寧なご回答ありがとうございます。
上記式をクエリーの抽出条件に入れるということで、手探りながらやってみました。
フォームのレコードソースはテーブル『銀行コード一覧』にしてあります。
検索したい項目毎にクエリーを作成して、それらをぞれぞれのボタンに設定してみました。確かに条件を含むデータが抽出されましたが、マクロのアクションを『クエリーを開く』にしましたのでクエリーが開いてしまいました。
根本的に何かが違うのでしょうけど、同じフォーム内に抽出させたい場合はどうすればいいのかさっぱり分かりません。
いいかげんお怒りのことかと思いますが、ご助言いただければ幸いです。
No.5
- 回答日時:
>"パラメータの入力"画面を出さず検索入力
>欄を常時表示しておいて、そこへ入力する形にしたいのです。
フォームにテキストボックスを置きそこに条件を入力するようにすればいいのでは
その場合は
Like "*" & Forms!フォーム名!テキストボックス名 & "*"
のように書きます
全てのテキストボックスの更新後イベントでフォームを再クエリするようにします
この回答への補足
ご回答ありがとうございました。
質問にも書きましたが、マクロ→フィルタの実行→Where条件式に
Like "*"&[Forms]![F-銀行コード一覧]![検索]&"*"=[銀行コード一覧]![支店名]
を設定してみましたが、
式'Like "*"&[Forms]![F-銀行コード一覧]![検索]&"*"=[銀行コード一覧]![支店名]'をバーズできません。
というエラーが出て先へ進みませんでした。
根本的にどこか間違いがあるのでしょうか?
No.4
- 回答日時:
"銀行名 LIKE '" & Me.抽出する銀行名 & "*' AND " & _
"支店名 LIKE '" & Me.抽出する支店名 & "*' "
これは、フィルタないしレコードソースの抽出条件として設定しているだけです。
これをクエリ埋め込み方式に変えると次のようです。
SELECT 銀行コード一覧.ID, 銀行コード一覧.銀行コード, 銀行コード一覧.銀行名, 銀行コード一覧.支店コード, 銀行コード一覧.支店名, 銀行コード一覧.支店住所
FROM 銀行コード一覧
WHERE (((銀行コード一覧.銀行名) Like "*" & [Forms]![銀行コード一覧]![抽出する銀行名] & "*") AND ((銀行コード一覧.支店名) Like "*" & [Forms]![銀行コード一覧]![抽出する支店名] & "*"));
このコードは、単純にクエリの抽出条件を[銀行名]と[支店名]でビルドすれば自動生成されます。
もちろん、Access97の場合、フォームからビルドしなきゃ、このような結果は得られなかったと思います。
Like "*"&[Forms]![F-銀行コード一覧]![検索]&"*"=[銀行コード一覧]![支店名]
との違いは、
(((銀行コード一覧.銀行名) Like "*" & [Forms]![銀行コード一覧]![抽出する銀行名] & "*")
((銀行コード一覧.支店名) Like "*" & [Forms]![銀行コード一覧]![抽出する支店名] & "*"))
と、抽出条件を[銀行名]と[支店名]とで別々に設定していることです。
クエリのデザインで設定するには、LIKE以下をそれぞれの列の抽出条件に書くかビルドすることです。
だって、[銀行名]が、[銀行名]と[支店名]との複合文字列と<パターン照合>しても一致しないでしょう。
質問者のミスは、この点にあります。
rivate Sub コマンド_抽出_Click()
Me.Requery
End Sub
この場合、コマンド_抽出_Clickのコードはこれで事足ります。
何度もご回答ありがとうございました。
これらはモジュールを利用されてますでしょうか?
モジュールが何なのかも理解できてない素人ですので、やはり理解できませんでした。
大変申し訳ありませんでした。
No.3
- 回答日時:
>ひとつのクエリーに両方入れてしまうと、両方の条件を満たすデータのみしか抽出されませんよね?
いいえ大丈夫です
Like "*" & [パラメータ] & "*"
という書き方はパラメータがNull(未入力)の場合
Like "**"
となり全てのレコードがヒットしますから条件無しとみなされます
入力されたもののみが有効な条件となります
再度のご回答ありがとうございました。
お分かりとは思いますが、既存のクエリー(Q-支店名検索 等)は1回1回"パラメータの入力"画面が出て、そこへ入力すると抽出されたデータのフォームが出てきます。
続けて検索をしたい場合が多いので、"パラメータの入力"画面を出さず検索入力欄を常時表示しておいて、そこへ入力する形にしたいのです。
やはり基礎知識しか無い人間には難しいでしょうか?
No.2
- 回答日時:
銀行コード一覧:
ID__銀行コード__銀行名_____支店コード__支店名__支店住所
1___101___________東京銀行__101-001_____A支店
2___101___________東京銀行__101-002_____B支店
このテーブルを基に単票フォームを作成したとします。
そして、フォームフッタに
1、コマンド_抽出。(コマンド_選択)
2、抽出する銀行名。
3、抽出する支店名。
を配置。
Private Sub コマンド_抽出_Click()
On Error Resume Next
Me.FilterOn = False
Me.Filter = "銀行名 LIKE '" & Me.抽出する銀行名 & "*' AND " & _
"支店名 LIKE '" & Me.抽出する支店名 & "*' "
Me.FilterOn = True
End Sub
Private Sub コマンド_選択_Click()
On Error Resume Next
Me.RecordSource = "SELECT * FROM [銀行コード一覧] WHERE 銀行名 LIKE '" & Me.抽出する銀行名 & "*' AND " & _
"支店名 LIKE '" & Me.抽出する支店名 & "*' "
Me.Requery
End Sub
この[銀行コード一覧]の部分が、テーブル名ないしクエリ名になります。
どちらかかと言えば、後者のやり方が好きです。
この回答への補足
ご回答ありがとうございました。
え~と・・・Accessは基本知識しか理解していませんので、せっかくご回答いただいた内容がまったく理解できません。大変申し訳ありません。
誠に勝手ですが、もう少し簡単な方法は無いものでしょうか?
No.1
- 回答日時:
フィルタの実行?
何のために
> クエリー:Q-銀行名検索、Q-支店名検索
このクエリを作ったの?
フォームのソースをこのクエリにすればフィルタは必要ありません
クエリもひとつで十分です
ひとつのクエリで
> (1)Q-銀行名検索→フィールド「銀行名」に【Like "*" & [調べたい銀行名の一部入力] & "*"】設定
> (2)Q-支店名検索→フィールド「支店名」に【Like "*" & [調べたい支店名の一部入力] & "*"】設定
この両方を書けば入力したものだけが有効となります
マクロはテキストボックスの更新後イベントにフォームの再クエリを書きます
ご回答ありがとうございました。
ひとつのクエリーに両方入れてしまうと、両方の条件を満たすデータのみしか抽出されませんよね?
その時によって調べる項目が銀行名だったり支店名だったり支店コードだったりとバラバラですので、1つのフォーム内に検索ボタンを複数配置させたいのです。
うまく説明ができなくて申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Visual Basic(VBA) ユーザーフォームで銀行に対応した支店コードの入力ができません Sheet1のA列に銀行名、B列に銀行 5 2022/07/28 17:50
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Access(アクセス) Access 複数条件検索の設定が上手く行きません 1 2022/07/22 20:37
- Excel(エクセル) 指定値をマクロで検索&シート移動 2 2022/04/27 23:29
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
親に給料を取られています。
-
生活保護新しく銀行口座を作っ...
-
住所、氏名と銀行の口座番号を...
-
劣化した硬貨の処分先
-
1千万円以上を振込みする場合...
-
別の口座に貯金を移すには
-
銀行の普通預金にはいくらまで...
-
通帳の備考欄にテイケイと出て...
-
先程、三井住友銀行の貸金庫を...
-
就職活動。身辺調査。銀行。 銀...
-
子供会の会費を銀行に預ける事...
-
お金を引き出したら通帳に書か...
-
預金の金利がこんなに高いです...
-
クレジットカード作成時に銀行...
-
現金貯金を池田泉州銀行、ゆう...
-
一万円札 子どもが落書きしてし...
-
一気に百万円を銀行に預金した...
-
金融機関の100万円束の信頼...
-
ゆうちょ銀行、窓口で400万引き...
-
自分の口座にお金を振り込んで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
銀行の普通預金にはいくらまで...
-
1千万円以上を振込みする場合...
-
生活保護新しく銀行口座を作っ...
-
別の口座に貯金を移すには
-
一般の銀行員は個人情報を見た...
-
通帳の備考欄にテイケイと出て...
-
クレジットカード作成時に銀行...
-
バイト始めて、「口座教えて下...
-
親に給料を取られています。
-
急に銀行口座の預金が増えたら...
-
お金を引き出したら通帳に書か...
-
身内が毎日銀行に通ってカード...
-
銀行に預金するのに印鑑は必要...
-
もみじ銀行のATMでは小銭を引き...
-
先程、三井住友銀行の貸金庫を...
-
農協→銀行への振込み
-
給与振込み依頼書の印鑑
-
あおぞら 銀行 は 大丈夫でしょ...
-
小切手の裏書について
-
普通預金通帳の提携支払ってな...
おすすめ情報