コンボボックスでの検索が出来なくて困っています。
テーブル:職員名簿
氏・名・職員No・生年月日・所属部署・・・etc.
↑のテーブルを元に入力フォームを作りました(単表形式)。
で、名簿の訂正や変更を行う時の為に検索でレコードを出したいです。
コンボボックス1:氏
コンボボックス2:名
を作って検索出来るようにしたのですが、氏・名 両方が当てはまるレコードを出したいのに、片方ずつの検索しか出来ません。
いろいろ調べてみて「コンボボックスの連携」というのをすると出来るようなのですが(?)、やり方がわかりません。
超初心者なので1から教えていただけるとうれしいです。
氏・名からの検索でレコードが出せれば良いのでもっと他に簡単に出来る方法があればそれでも良いです。
よろしくお願いします。
No.9ベストアンサー
- 回答日時:
> グループ化、並べ替えはどのようにしたら良いですか?
とりあえず・・・
> 検索用コンボボックス(氏)は、
> 名前:コンボ18
値集合ソース:SELECT T職員名簿.氏 FROM T職員名簿 GROUP BY T職員名簿.氏 ORDER BY T職員名簿.氏;
> 検索用コンボボックス(名)は、
> 名前:コンボ20
値集合ソース:SELECT T職員名簿.名 FROM T職員名簿 GROUP BY T職員名簿.名 ORDER BY T職員名簿.名;
として、
それぞれ、書式タブの列数「1」、書式タブの列幅「削除して空白」、書式タブのリスト幅「自動」としてください
現在の状態から、簡単に検索可能かの体験を行うなら、「データ」タブの「連結列」を「1」から「2」へ変更してみてください
(前述の場合、列数1つしかないので2にした場合1に戻してね^^;)
No.8
- 回答日時:
すみません、回答が途中ですね><
> 入力用コンボボックス(氏)は、
> 名前:Ctl氏
> コントロールソース:氏
> 入力用コンボボックス(名)は、
> 名前:Ctl名
> コントロールソース:名
> コントロールの名前を変更したら、モジュールも変えないといけない
> ですか?
えっと、このモジュールに関しては、変更しなくて良いです^^;
> Set rs = Me.Recordset.Clone
の中の「氏」「名」と
(コンボボックスに使用しているコントロールソースと同一のもの)
フォーム上のコントロールを区別して、レコードソースのフィールド名を故意に参照するために、名前を変えましたので^^;
> rs.FindFirst usFind
の部分で、検索するので問題は、無いはずだったんですが・・・動かないって話しだったんで、まさかと><
No.7
- 回答日時:
ごめんなさい、気が付くのが遅かったです><
> 「[氏]Like'75'」は見つかりませんでした。
の話しと、
> 値集合ソース:SELECT T職員名簿.職員NO, T職員名簿.氏 FROM T職員名簿;
> 値集合ソース:SELECT T職員名簿.職員NO, T職員名簿.名 FROM T職員名簿;
で、検索できない理由が理解できました^^;
コンボボックス上に表示されているデータは、「氏」「名」なのですが、実際入ってるデータは「職員NO」を格納してあります
で、如何直そうか?考えるのですが・・・
いろいろパターンがあります
一番、良いのは、集合ソースの「職員NO」を削除して、「氏」「名」でグループ化、並べ替えと言うのが良さそうですが・・・
この回答への補足
Dxak様
>一番、良いのは、集合ソースの「職員NO」を削除して、「氏」「名」でグループ化、並べ替えと言うのが良さそうですが・・・
グループ化、並べ替えはどのようにしたら良いですか?
No.6
- 回答日時:
多分、モジュール以外のところの問題を考えないと駄目みたいですね;;
> 一致するレコードを発見できなかった場合の条件をつけると、実際に
> あるレコードの氏名を入力しても「発見できなかった」となってしま
> います。
メッセージを出しているという事は、モジュールの部分は動いているみたいですね^^;
これは、「氏」「名」を両方検索した場合、検索できなかったという事でしょうか?「氏」「名」の片方を検索した場合、検索できますか?
> 'コントロールの値と一致するレコードを検索する
> ↑このあたりの条件を抜くと検索用コンボボックスと入力用画面と
> が連動していないような感じをうけるのですが、気のせいでしょう
> か?
「連動」と言うのが、どういうことなのでしょうか?
入力用画面(フォーム)と検索用画面(フォーム)が別ってことでしょうか?
フォームを別にしてあるのであれば、
> Set rs = Me.Recordset.Clone
> Me.Bookmark = rs.Bookmark
を
Set rs = Froms("入力用フォームの名前").Recordset.Clone
Froms("入力用フォームの名前").Bookmark = rs.Bookmark
に変更してみてください
(片方づつなら、検索可能であったのであれば、違うとは思うのですが)
検索用コンボボックスと入力用テキストボックスは別のものを使用してください
検索用コンボボックスは「コントロールソース」を設定せず(非連結コンボボックス)に、「値集合ソース」は設定してください
検索用コンボボックスを変えると、入力用テキストが変更されるようだと、レコードセットと連動されてるので、テーブルの内容が変ってしまうのですが・・・
で、確証はないのですが・・・
> 使用しているAccessは2000です。
の場合、フォーム上のコントロールの名前に「Ctl」を付けて、レコードセットのフィールドの名前と、フォームのコントロールの名前を違う名前で、設定してもらえますか?
私の
「Ctl」コントロールの場合の名前の先頭、
「Fld」フィールドの場合の名前の先頭、
「Tbl」テーブルの名前の先頭、
等の名前の付け方の癖は、Acc2000の時の漢字で始まる名前の場合、挙動が思うように動かないことがあると言うことがあったり、フィールド名とコントロール名が同一のものを使用していると、参照が思うように行っていなかったことがあったために付いた癖で、そのときの名残で現在も、そうしてあるだけなんですが・・・
あと、
> 氏のフィールド名=氏
> 名のフィールド名=名
は、テキスト型で良いのですよね^^;
この回答への補足
Dxak様
できません・・・(泣)。こんなに親切に教えていただいているのに・・・。何か根本的に私のやり方が間違っているのでしょうか(>_<)?
>「氏」「名」を両方検索した場合、検索できなかったという事でしょうか?「氏」「名」の片方を検索した場合、検索できますか?
片方を検索した場合にも検索できません。
例えば職員NO.75 のスズキを検索用コンボボックスに入力すると下記のようなコメントが出ます。
「[氏]Like'75'」は見つかりませんでした。
>入力用画面(フォーム)と検索用画面(フォーム)が別ってことでしょうか?
入力用フォームのフォームヘッダーに検索用コンボボックスを作っています。
>検索用コンボボックスと入力用テキストボックスは別のものを使用してください
別のものを使用しています。
検索用コンボボックス(氏)は、
名前:コンボ18
コントロールソース:設定していません。
値集合ソース:SELECT T職員名簿.職員NO, T職員名簿.氏 FROM T職員名簿;
検索用コンボボックス(名)は、
名前:コンボ20
コントロールソース:設定していません。
値集合ソース:SELECT T職員名簿.職員NO, T職員名簿.名 FROM T職員名簿;
>フォーム上のコントロールの名前に「Ctl」を付けて、レコードセットのフィールドの名前と、フォームのコントロールの名前を違う名前で、設定してもらえますか?
「フォーム上のコントロールの名前」は入力用コンボボックスの名前のことですよね?
入力用コンボボックス(氏)は、
名前:Ctl氏
コントロールソース:氏
入力用コンボボックス(名)は、
名前:Ctl名
コントロールソース:名
コントロールの名前を変更したら、モジュールも変えないといけないですか?
> 氏のフィールド名=氏
> 名のフィールド名=名
は、テキスト型で良いのですよね^^;
はい、テキスト型です。
No.5
- 回答日時:
基本的な所で私の勘違いなのでしょうか^^;
「=」を「Like」に変更
発見できなかった場合の条件表示
Option Compare Database
Private Sub コンボ18_AfterUpdate()
usRecFind
End Sub
Private Sub コンボ20_AfterUpdate()
usRecFind
End Sub
Private Sub usRecFind()
Dim rs As Object
Dim usFind As String
usFind = ""
' 氏の検索条件追加
If Not IsNull(Me![コンボ18]) Then
usFind = "[氏] Like '" & Me![コンボ18] & "'"
End If
' 名の検索条件追加?
If Not IsNull(Me![コンボ20]) Then
usFind = IIf(usFind = "", "", usFind & " And ") & _
"[名] Like '" & Me![コンボ20] & "'"
End If
' 検索開始
If usFind <> "" Then
Set rs = Me.Recordset.Clone
rs.FindFirst usFind
If rs.NoMatch Then
MsgBox "「" & usFind & "」は見つかりませんでした。", vbOKOnly
Else
Me.Bookmark = rs.Bookmark
End If
End If
End Sub
で、動作確認したのですが・・・
「=」を「Like」に変更を変更しなくても動くのですが、「?」「*」等を使うと検索しないみたいなので「Like」に変更
で、後、気になったのが、変更後違うコントロールにカーソルを移動させてますか?
検索を開始する条件が「AfterUpdate」なので、入力後、カーソルの移動をさせないと、検索を開始しませんが・・・
あと、Accのバージョンいくつになります?
この回答への補足
Dxak様
=をLikeに変更しましたが、やはり変わりません。
>変更後違うコントロールにカーソルを移動させてますか?
というのは検索用コンボボックスに検索したい名前を入力後カーソルを移動させているか?ということですよね?・・でしたら、カーソルは移動させています。
一致するレコードを発見できなかった場合の条件をつけると、実際にあるレコードの氏名を入力しても「発見できなかった」となってしまいます。
最初にあった
'コントロールの値と一致するレコードを検索する
↑このあたりの条件を抜くと検索用コンボボックスと入力用画面とが連動していないような感じをうけるのですが、気のせいでしょうか?
使用しているAccessは2000です。
No.4
- 回答日時:
>> rs.FindFirst "[職員NO] = " & Str(Nz(Me![コンボ18], 0))
>> ・・・
>> rs.FindFirst "[職員NO] = " & Str(Nz(Me![コンボ20], 0))
と、あったので最初は[職員NO]の検索コントロールを作成してあって、訂正未済で、記載してあると判断して条件に追加したのですが・・・
> 職員NOのコントロール名はどこを見ればわかるのでしょうか?
検索条件を設定するコンボボックスか?テキストボックスか?のコントロールの名前のことです
検索条件を設定するコントロール(テキストボックス、コンボボックス等)をクリックして、逆クリック-プロパティで、コントロールに関してのプロパティが出てきます
そこに、「名前」と言うプロパティが存在しますので、それが「コントロール名」になります
> ' 職員Noの検索条件追加
> If Not IsNull(Me![職員NO]) Then
> usFind = "[職員NO] = " & Str(Me![職員NO])
> End If
この部分は、職員NOを検索条件にする場合に設定しているだけで、すべて削除しても、氏、名の検索は、行います
とりあえずは、'を頭につけて、動作するか?確認してみてください
条件として考える場合は、また考えましょう^^;
上記例は、[職員NO]が数値を取り扱う時の例ですので、[職員NO]を文字で設定してある場合
> usFind = "[職員NO] = " & Str(Me![職員NO])
を
usFind = "[職員NO] = '" & Str(Me![職員NO]) & "'"
等に変更して記述ください
この回答への補足
Dxak様
職員NOは検索条件に設定していません。
ので、
> ' 職員Noの検索条件追加
> If Not IsNull(Me![職員NO]) Then
> usFind = "[職員NO] = " & Str(Me![職員NO])
> End If
部分は削除しました。
が、やはり検索はできません・・・。
No.3
- 回答日時:
> rs.FindFirst "[職員NO] = " & Str(Nz(Me![コンボ18], 0))
> ・・・
> rs.FindFirst "[職員NO] = " & Str(Nz(Me![コンボ20], 0))
この2箇所ですね。検索の条件設定しているの・・・
検索のためのモジュールをまとめて・・・
Private Sub コンボ18_AfterUpdate()
usRecFind
End Sub
Private Sub コンボ20_AfterUpdate()
usRecFind
End Sub
Private Sub usRecFind()
Dim rs As Object
Dim usFind As String
usFind = ""
' 職員Noの検索条件追加?
If Not IsNull(Me![職員NOのコントロール名?]) Then
usFind = "[職員NO] = " & Str(Me![職員NOのコントロール名?])
EndIF
' 氏の検索条件追加?
If Not IsNull(Me![コンボ18]) Then
usFind = IIf(usFind = "","",usFind & " And ") & _
"[氏のフィールド名?] = '" & Me![コンボ18] & "'"
EndIF
' 名の検索条件追加?
If Not IsNull(Me![コンボ20]) Then
usFind = IIf(usFind = "","",usFind & " And ") & _
"[名のフィールド名?] = '" & Me![コンボ20] & "'"
EndIF
' 検索開始
IF usFind <> "" Then
Set rs = Me.Recordset.Clone
rs.FindFirst usFind
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
EndIf
End Sub
で、モジュールの動作確認してませんが・・・
[~?]で記述しているところは、それぞれの名前に記述しなおしてみてくださいね
この回答への補足
Dxak様、度々すいません。
以下のようにしたのですが、検索できません。
何か間違ってますか?
ちなみに
氏のフィールド名=氏
名のフィールド名=名
です。
職員NOのコントロール名はどこを見ればわかるのでしょうか?
Option Compare Database
Private Sub コンボ18_AfterUpdate()
usRecFind
End Sub
Private Sub コンボ20_AfterUpdate()
usRecFind
End Sub
Private Sub usRecFind()
Dim rs As Object
Dim usFind As String
usFind = ""
' 職員Noの検索条件追加
If Not IsNull(Me![職員NO]) Then
usFind = "[職員NO] = " & Str(Me![職員NO])
End If
' 氏の検索条件追加
If Not IsNull(Me![コンボ18]) Then
usFind = IIf(usFind = "", "", usFind & " And ") & _
"[氏] = '" & Me![コンボ18] & "'"
End If
' 名の検索条件追加?
If Not IsNull(Me![コンボ20]) Then
usFind = IIf(usFind = "", "", usFind & " And ") & _
"[名] = '" & Me![コンボ20] & "'"
End If
' 検索開始
If usFind <> "" Then
Set rs = Me.Recordset.Clone
rs.FindFirst usFind
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End If
End Sub
何度もすいませんが回答よろしくお願いします。
No.2
- 回答日時:
「コンボボックスの連携」と言うのは、抽出条件の設定を簡素化するためのユーザインターフェイスの話で、抽出するほうの話とは、おそらく別物です
例えばで、抽出したい条件を整理していきましょう
名前が混同すると、判らなくなるので、
テーブルの氏、名を、Fld氏、Fld名として
抽出条件になっているコンボボックスの氏、名を、Ctl氏_条件、Ctl名_条件として、整理していきます
・「Ctl氏_条件」、「Ctl名_条件」が両方とも設定されている場合
「Fld氏 = Ctl氏_条件」かつ「Fld名 = Ctl名_条件」の物を抽出
・「Ctl氏_条件」、「Ctl名_条件」が両方とも空白の場合
すべてのレコードを表示
・「Ctl氏_条件」だけ設定されているの場合
「Fld氏 = Ctl氏_条件」の物を抽出
・「Ctl名_条件」だけ設定されているの場合
「Fld名 = Ctl名_条件」の物を抽出
と、条件を設定していき、これを、Accessの条件として書き直すと
・[Fld氏] = Forms![フォーム名]![Ctl氏_条件] And [Fld名] = Forms![フォーム名]![Ctl名_条件]
・[Fld氏] = Forms![フォーム名]![Ctl氏_条件] And IsNull(Forms![フォーム名]![Ctl名_条件])
・IsNull(Forms![フォーム名]![Ctl氏_条件]) And [Fld名] = Forms![フォーム名]![Ctl名_条件]
・IsNull(Forms![フォーム名]![Ctl氏_条件]) And IsNull(Forms![フォーム名]![Ctl名_条件])
と、なりSQL文にする場合
Where ~ ;の間に、
[Fld氏] = Forms![フォーム名]![Ctl氏_条件] And [Fld名] = Forms![フォーム名]![Ctl名_条件]
Or
[Fld氏] = Forms![フォーム名]![Ctl氏_条件] And IsNull(Forms![フォーム名]![Ctl名_条件])
Or
IsNull(Forms![フォーム名]![Ctl氏_条件]) And [Fld名] = Forms![フォーム名]![Ctl名_条件]
Or
IsNull(Forms![フォーム名]![Ctl氏_条件]) And IsNull(Forms![フォーム名]![Ctl名_条件])
を追加
フィルターで行う場合も、そのまま上記条件の内容を書き込めば、条件として、設立してきます
ただし、Fld氏、Fld名に空白のデータが存在するとか別途、条件が発生する場合、もう少し条件を変更していかなくてはなりません
この回答への補足
Dxak様、回答ありがとうございます。
が、私には高度すぎて・・・?
以下のところを変えればいいのでしょうか?
Option Compare Database
Private Sub コンボ18_AfterUpdate()
' コントロールの値と一致するレコードを検索する
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[職員NO] = " & Str(Nz(Me![コンボ18], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
Private Sub コンボ20_AfterUpdate()
' コントロールの値と一致するレコードを検索する
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[職員NO] = " & Str(Nz(Me![コンボ20], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
No.1
- 回答日時:
> コンボボックス1:氏
> コンボボックス2:名
> を作って検索出来るようにしたのですが、氏・名 両方が当てはまるレコードを出したいのに、片方ずつの検索しか出来ません。
どうやって抽出をしているんですか?
クエリを使っているのなら、抽出条件欄の同じ行に入れてやれば、大丈夫だと思いますけど?
(Or 条件ではなく、And 条件)
この回答への補足
Gin_F様、回答ありがとうございます。
クエリは使用しておりません。
フォームヘッダーにコンボボックスを作り
「コンボボックスで選択した値に対応するレコードをフォームで検索する」
として、テーブルの氏を選択しています。
同様に名も作りました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 複数条件検索の設定が上手く行きません 1 2022/07/22 20:37
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Excel(エクセル) Excel 名簿 検索する関数 3 2023/07/25 10:33
- その他(Microsoft Office) Outlookメール 連絡先の検索について 〈 ご説明 〉 Windows PC の Outlook 1 2022/09/23 14:43
- アンテナ・ケーブル ケーブルの種類を教えて 1 2022/04/11 23:26
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- LINE ラインに詳しい方、勝手(?)に友人登録されてた? 3 2023/06/13 19:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのコンボボックスでリス...
-
Accessのコンボボックスの値が...
-
帳票フォームでのあるコンボボ...
-
Access2003 孫フォームのRequer...
-
ACCESSでコンボボックスにSQLで...
-
Accessのコンボボックスの”すべ...
-
accessでオートコンプリート機...
-
Oracleで文字列型の時間を引き...
-
ACCESSクエリ抽出条件について
-
Accessフォーム 大分類→小分類...
-
Accessのフォーム(コンボボッ...
-
accessでのリストボックス選択...
-
.flex-direction プロパティは...
-
Access 帳票フォームのコンボボ...
-
Accessでフォームに自動入力し...
-
エクセルで、抽出したデータだ...
-
Access サブフォームでの選択行...
-
ACCESS 複数のフォームから同一...
-
ACCESSでVBAから選択クエリの抽...
-
インデックスまたは主キーにはn...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのコンボボックスでリス...
-
Accessのコンボボックスの値が...
-
ACCESSでコンボボックスにSQLで...
-
.flex-direction プロパティは...
-
ACCESS リストボックスの字の色...
-
帳票フォームでのあるコンボボ...
-
accessでオートコンプリート機...
-
ACCESSクエリ抽出条件について
-
Accessのコンボボックスのデフ...
-
accessでのリストボックス選択...
-
Oracleで文字列型の時間を引き...
-
コンボボックスのリスト外入力...
-
コンボボックスのボタンの大き...
-
更新クエリで変数は使えない?
-
ACCESSのリストボックス抽出に...
-
フォームでの検索
-
Access 帳票フォームのコンボボ...
-
Access2003 孫フォームのRequer...
-
アクセス:フォーム入力:【大...
-
[Access2003]コンボボックスと...
おすすめ情報