Microsoft Access 掲示板

フォームの抽出結果のみをコンボボックスでさらに絞り込みたい

37 コメント
views
4 フォロー

お世話になります。まったくの素人なので、質問の表現が違うかもしれません。

従業員リストのフォームから、ア、カ、サ、タ、ナと抽出できるボタンを作りました。
( Like "[あ-お]*" 等。ネットで見て真似ただけですが)

これで、例えばあ行に絞り込めた時に、さらに今抽出されている「あ行の従業員のみ」をコンボボックスから選択できるようにしたいのです。
宜しくお願いいたします。

お茶
作成: 2021/06/24 (木) 10:26:53
通報 ...
1
りんご 2021/06/24 (木) 10:58:45 c564b@0e907

例えば、あ行で絞り込めた時に、活用した選択クエリを、コンボボックスのコントロールソースに設定するのは、どうでしょうか?

2

早速ありがとうございます!
あ行で絞り込んでいるのは、埋め込みマクロ(条件式 =[苗字カナ] Like "[ア-オ]*")です。

仮に、(やり方がよくわかっていませんが)クエリで絞り込んだ場合、あ行用のコンボボックス、か行用のコンボボックスと、それぞれに必要になるということでしょうか?

3
りんご 2021/06/24 (木) 11:31:45 c564b@0e907 >> 2

えっとですね、最終的に、ひとつのコンボボックスで出来ると思うのですが、うーん。

5
りんご 2021/06/24 (木) 13:19:24 c564b@0e907 >> 1

 テキストボックスを配置して、
・選択クエリの抽出条件に、Like[Forms]![フォーム1]![テキスト1] & “*”
・プロパティシートの変更時イベント

Private Sub テキスト1_Change()
    Me.Requery
    Me.テキスト1.SetFocus

    If IsNull(Me.テキスト1) Then
        Me.テキスト1.SelStart = 0
    Else
        Me.テキスト1.SelStart = Len(Me.テキスト1)
    End If
End Sub

 ボタンを配置して、
・マウスボタンクリック時イベント

Private Sub ボタン1_MouseDown(ほにゃらら、自動入力されるので、省略)
     Me.テキスト1 = “[ア-オ]“
     Me.Requery
End Sub

 コンボボックスを配置して、
・プロパティシートの値集合ソースに、絞り込むために活用した選択クエリを設定
・フォーカス取得時イベント

Private Sub コンボ1_Enter()
        Me.コンボ1.Requery
End Sub
4
hiroton 2021/06/24 (木) 13:07:34 修正 79b19@f966d

※名前の提示がないモノもあるので適当に読み替えてください

「従業員リストのフォーム」にテキストボックス「抽出用カナ」を配置します
「従業員リスト」テーブルを元にクエリ「Q従業員抽出」を作成します

フィールド:氏名苗字カナ
テーブル:従業員リスト従業員リスト
並べ替え:
表示:
抽出条件:Like [Forms]![従業員リストのフォーム]![抽出用カナ]

「従業員リストのフォーム」にコンボボックス「従業員コンボボックス」を配置し、以下の設定にします

値集合ソース|Q従業員抽出
値集合タイプ|テーブル/クエリ

各ボタンの埋め込みマクロに次のようにアクションを追加します

プロパティの設定
 コントロール名 抽出用カナ
   プロパティ 値
       値 [ア-オ]*

再クエリ
 コントロール名 従業員コンボボックス

プロパティの設定はそれぞれのボタンに合わせて変更してください

7

hiroton さんありがとうございます。
まず私にもわかるかもしれないこのパターンでやってみようと取り組んでいますが、
質問させてください。
テーブルに「抽出用カナ」に該当するフィールドがなく、「苗字カナ」とは別にそれを設ける必要があるということでしょうか?

8
hiroton 2021/06/25 (金) 17:17:55 e9544@f966d >> 4

テーブルのフィールドは必要ないですよ

フォームデザインツールコントロールの中からテキストボックスを選んでフォーム上の適当な場所に配置し、「テキスト ボックス名を指定してください。」のとこで「抽出用カナ」と入力します

これで、フォームのデザインビュー上でテキストボックスに「非連結」と表示された名前プロパティが「抽出用カナ」のテキストボックスが配置できます


配置済みの適当なテキストボックスをコピー&ペーストしてコントロールソースプロパティを「」(削除)、名前プロパティを「抽出用カナ」と変更してもかまいません。コントロールソースプロパティがないテキストボックスはデザインビュー上で「非連結」と表示されます


このような「非連結」のテキストボックスを配置すると、テーブルのデータに影響しない自由な入力のできるテキストボックスになります。今回は五十音の各ボタンがあって、それぞれで動きを変えたいのでどのボタンを押したのかを覚えておく必要があります。フォームに専用のメモ書きを用意してるという感じです

10

ありがとうございます。なんどもすみません。
教わったそのとおりにやってみましたが、「あ」のボタンを押すと
「コントロール名"抽出用カナ"が正しくないか、存在しないコントロールを参照しています」とエラーが出ます。

配置したテキストボックス、作成したクエリ、埋め込みマクロのコントロール名 すべて確認しましたが、抽出用カナとして間違っていないはずなのですが、何がいけないのでしょうか?

11
hiroton 2021/06/28 (月) 15:25:53 38cf2@f966d >> 4

間違える手順もなさそうですが念のため
画像1


動作チェックとして、「再クエリ」のアクションを削除して実行してみてください。テキストボックスに文字を入力するだけになりますがエラーがでますか?

次に、テキストボックスの名前とマクロで設定するコントロール名を変更して試してください(たとえば「test1」とか)

あとは・・・ボタンと非連結のテキストボックスは同じフォームの上にありますよね?

12

度々ありがとうございます。コントロール名については、私が変更したし際に書き換えを間違っていたようです。
再クエリのアクションを削除してみると、「あ」のボタンを押したときには
「抽出用カナ」のテキストボックスに[アーオ]*と表示され、あ行の方のみ抽出されています。
ただ、再クエリを追加するとコンボボックスに苗字カナが表示されますが、どれかを選ぶと「型が一致しません」と表示されます。

ちなみにクエリは
フィールド   苗字     苗字カナ
テーブル    基本情報   基本情報
並べ替え
表示      チェック
抽出条件           Like [Forms]![基本情報1]![抽出用カナ]

このようにしています。
本当は、コンボボックスに漢字で「苗字」と「名前」を表示させたかったのですが、
クエリにフィールドを追加すると、もっと変な表示(同一人物の名前が何個も続く)になってしまいました。

ボタン・テキストボックス・コンボボックスは同一フォームのフォームヘッダーに置いています。

15
hiroton 2021/06/30 (水) 09:03:57 dbc88@f966d >> 4

ただ、再クエリを追加するとコンボボックスに苗字カナが表示されますが、どれかを選ぶと「型が一致しません」と表示されます。

提示の内容はコンボボックスに抽出したリストを表示するまでの方法です。その後の「どれかを選ぶと何かしたい」は特に質問から見受けられないので回答に入れていません

  1. したいこと
  2. 試したこと
  3. その結果(今回は『「型が一致しません」と表示される』ですね)

これらを合わせて質問してください


本当は、コンボボックスに漢字で「苗字」と「名前」を表示させたかったのですが

クエリのフィールドには計算式が使えます。1列目の「苗字」のところを「氏名: [苗字] & [名前]」とすると表示できます


クエリにフィールドを追加すると、もっと変な表示(同一人物の名前が何個も続く)になってしまいました。

前提に一般的な話として、今のクエリの場合「苗字」だけなので、例えば従業員リストに

苗字名前
鈴木イチロー
鈴木誠也
鈴木尚典

なんてデータがあると、コンボボックスには「鈴木」が3回並んでしまいますね。「氏名: [苗字] & [名前]」とすればある程度は解消しますが、同姓同名問題が起きる可能性は否定できません

ただ、これはあくまでも「クエリで表示される1行がそのまま表示される」だけでクエリにフィールドを増やしても行数が増えることはありません。クエリの設定に提示していない内容はありませんか?

例えばグループ化を設定している場合、「苗字」だけのクエリなら「鈴木」はすべて統合されて1行になりますが、「苗字」に加えて「名前」のフィールドも設けると、「鈴木」は共通でも「名前」が違うのでそれぞれ異なる1行になります。そのうえで「苗字」だけを表示するコンボボックスを設置すれば問題の状況になったりします

16

何度も申し訳ありません。ありがとうございます。

"どれかを選ぶと何かしたい"が抜けていました。
入力フォームは単票フォームです。

あ のボタンを押すと、苗字カナ がア~オで始まる方を抽出します。※ここは出来ました。
あ行の方が10名いたとして
その10名をコンボボックスに反映させて 
そのコンボボックスから1名を選ぶことで、選んだ方の単票フォームが表示されるようにしたかったのです。

ただ、やはりaccessの不具合か、私の"何か"が間違っているのか、
コンボボックスにアンザイ・イトウ・オカダ・アンザイ・イトウ・オカダ・・・・と同じ名前が繰り返されていたかと思いきや、全く表示されなかったりすることがあり、
今は技術的にも時間的にも、その解決までたどり着けそうにないため、ボタンでの抽出までで使用しています。

17
hiroton 2021/07/05 (月) 13:04:47 ec1bd@f966d >> 4

コンボボックスの内容はクエリの1列目と同じです(設定で変わりますが)。直接クエリを開いた場合、1列目は望む内容になっていますか?
クエリの表示自体がうまくいっていない場合クエリの組み方に問題があります

コンボボックスにアンザイ・イトウ・オカダ・アンザイ・イトウ・オカダ

>> 12

ちなみにクエリは
フィールド   苗字     苗字カナ
テーブル    基本情報   基本情報
並べ替え
表示      チェック
抽出条件           Like [Forms]![基本情報1]![抽出用カナ]

このようにしています。

とあります。「苗字カナ」の「表示」はチェックなしですよね?表示なし、つまり存在しないデータがコンボボックスに表示されていることになってしまっています。クエリの名前とコンボボックスの値集合ソースの値を確認してください。>> 4では、ともに「Q従業員抽出」とすることにしましたが、実際は何にしましたか?


続きについては、クエリで正しい(望みの)リストが作れることと、コンボボックスの内容はクエリと全く同じになることが理解できないと実装できない部分なのでまずはここまでで見直しをしてください

18

再度確認しました。
クエリの名前も、コンボボックスの集合値ソースも Q従業員抽出 にしています。
合っているはずなのですが・・・。
ただ、今回はカタカナの名前が繰り返されるのではなく、コンボボックスの中は空白になってしまいました。

画像1
画像2
画像5
画像3
画像4

20
hiroton 2021/07/07 (水) 08:31:14 5e9eb@f966d >> 4

「Q従業員抽出」を直接開いて内容を確認してみましたか?

クエリでほしいリストがきちんと作れているか確認しましょう。フォームとの連携はひとまずおいといて抽出条件を変更して確認してみてください

Like [Forms]![基本情報1]![抽出用カナ]
↓
Like "[ア-オ]*"

これでクエリを開くと、「あ」のボタンを押したときにコンボボックスに表示したい内容になりますか?

21

書き換えてみました。クエリの結果は、漢字で、あ行ではありますが、
太田・岡田・安西・石川・伊藤・太田・岡田・安西・石川・伊藤・太田・岡田・安西・石川・伊藤・・・・というふうに、同じ方の名前が何度も(100回以上)繰り返されています。

23
hiroton 2021/07/09 (金) 12:11:48 1392b@f966d >> 4

コンボボックスで起きているそのほかの不具合「苗字カナの内容(カタカナ)が表示される」「データがない」等は起きていないということでいいですか?
たとえば、「か」のボタンを押したと想定して"[ア-オ]*""[カ-コ]*"に変えてみたり、さらに"[サ-ソ]*"に変えてみたり等、試してみてください

この、手で書き換えている操作を、フォーム上の値を使って自動で書き換えようというのが

Like [Forms]![基本情報1]![抽出用カナ]

の目的です。抽出条件を再度Like [Forms]![基本情報1]![抽出用カナ]に設定して、今度はフォーム上の「抽出用カナ」テキストボックスに手入力で"[ア-オ]*"と入力してクエリを開いてみてください。抽出条件を手入力したとき(Like "[ア-オ]*"と入力したとき)と同じ内容が表示されてますか?


同じ方の名前が何度も(100回以上)繰り返されています。

クエリの元データにはどのようなデータ(テーブルorクエリ)を使っているんでしょうか?>> 15で説明していますがクエリのもとにしているデータに複数登録されていれば何度も出てきて当然になります。データベース運用から考えれば「同一人物の重複登録を許さないデータ(テーブル)」があるものと思います。きちんと指定できていますか?

25

クエリを Like "[ア-オ]" "[カ-コ]"等に書き換えた場合、名字のカタカナが表示されたり、データがない、ということはありませんでした。
さらに、Like [Forms]![基本情報1]![抽出用カナ]に戻して、「抽出用カナ」テキストボックスに[ア-オ]*と入れてクエリを開くと、同じように太田・岡田・安西・石川・伊藤・太田・岡田・安西・石川・伊藤・太田・岡田・安西・石川・伊藤・・・・と繰り返されて出てきます。

もとのテーブルでは、従業員コードを重複なしにしており、実際のテーブルのデータも同姓は一部おりますが、「あ」のボタンを押したときにはフォームには正しい人数で抽出されており、クエリの結果だけが何十回も繰り返されている状況です。

26
hiroton 2021/07/13 (火) 08:29:32 4339f@f966d >> 4

クエリの内容でコンボボックスに見られるような異常が起きないのであれば、改めてボタンをクリックしたときの動作を確認してください。

「あ」のボタンを押す
→「抽出用カナ」テキストボックスに「[ア-オ]*」と入力される
→クエリ「Q従業員抽出」を開いて内容を確認する
→コンボボックスをクリックしてクエリの内容と同じものが表示されるか確認する

「か」のボタン「さ」のボタンでも同様の確認をする

ひとまずこれでフォームの作り、マクロの設定に異常がないか確認できます


クエリの結果が望んだ内容になっていないことは少し問題がずれるのでこのツリーからは外して改めて回答しなおします

28

上記はボタンに適してテキストボックスに表示され、同時にクエリの内容も同じものが表示されていました。

32
hiroton 2021/07/20 (火) 17:13:04 a38a5@f966d >> 4

コンボボックスが空白だということなので改めて設定を確認していきます

コンボボックスには値集合ソースに「Q従業員抽出」が指定してあります。なのでコンボボックスにはクエリに内容が表示されているはずです

Q従業員抽出の抽出条件を削除して保存した後フォームを開きなおすとコンボボックスにはクエリと同じ内容が表示されますか?

これが確認出来たらQ従業員抽出の抽出条件をLike "[ア-オ]*"にして保存しなおした後、フォームを開きなおします。コンボボックスにはクエリと同じ内容が表示されますか?

このような方法でクエリの内容をコンボボックスに表示することができることが確認できますが正しく動いていますか?

6

従業員リストのフォームから、ア、カ、サ、タ、ナと抽出できるボタンを作りました。

このボタンというのが、コマンドボタンのことなら、ラジオボタン(オプショングループ内に配置)で実装したほうがいいでしょう。今、押しこれまているボタンの文字で抽出されていると目で見て分かりますので。

下記でラジオボタンで50音選択できるサンプルを紹介しています。

オプショングループで50音選択 高速版 - hatena chips

上記のサンプルをフォームのデータにフィルターをかけるものですが、生成された抽出条件でSQLをコンボボックスに設定すればいいでしょう。

9

VBAは分からないので埋め込みマクロでということでしょうか。

上でも書きましたがコマンドボタンよりオプショングループとトグルボタン(ラジオボタン)でやるのがUI上もいいでしょう。

フォーム上にオプショングループを配置して、その中にラジオボタンを10個配置します。

それぞれのトグルボタンのプロパティを下記のように設定します。

標題 ア
オプション値 1

標題 カ
オプション値 2

標題 サ
オプション値 3



標題 ワ

オプショングループの名前 フレーム1

オプショングループの更新後処理の埋め込みマクロに下記のように設定します。

再クエリ
 コントロール名 コンボボックス名

コンボボックスの値集合ソースのクエリの抽出条件は下記のようにします。

Like Choose([Forms]![フォーム名]![フレーム1],"[ア-オ]*","[カ-コ]*","[サ-ソ]*","[タ-ト]*","[ナ-ノ]*","[ハ-ホ]*","[マ-モ]*","[ヤ-ヨ]*","[ラ-ロ]*","[ワ-ヲ]*")

オプショングループの作り方がよく分からない場合は、コントロールウィザードで作成できます。
下記を参考にしてください。

Accessのフォームでオプションボタンを使ってデータを入力する方法 | できるネット

13
りんご 2021/06/29 (火) 21:42:30 c564b@0e907

>> 12
 こちらでも、試してみましたが、普通に動作しました。
 テーブルを作って、苗字と苗字カナのフィールドを作って、クエリを作って、抽出条件を設定して、フォームを作って、テキストボックス、コンボボックス、ボタンを作って、マクロを設定するだけですよね。
 もしかして、上記以外に、テーブルやクエリが出てきたり、途中で隠し味のアレンジをやったり、説明していない何かがあったりしませんか?

ただ、再クエリを追加するとコンボボックスに苗字カナが表示されますが、

打ち間違いだと思いますが、苗字カナではなく、苗字が表示されるという事でいいですよね?

14
りんご 2021/06/29 (火) 23:59:49 c564b@0e907

>> 13
新規データベースを作って、もう一度、説明通りにやってみるのは、どうかな?シンプルに、例えば、絞り込むボタンも、とりあえず1つでという感じで。

19
りんご 2021/07/07 (水) 00:26:01 c564b@0e907

 プロパティシートの書式タブを選択したら、列数を2、列幅を例えば、1cm;1cmにしてみて下さい。
 コンボボックスをクリックすると、プロパティシートの連結列が2のときは、(2列目があれば)2列目のデータが選択されたという事になるはず。

22
りんご 2021/07/09 (金) 11:40:19 c564b@0e907

>> 18
画像1の上部分、写ってませんが、クエリに使用しているテーブルが表示されるエリアがあると思います。どんなテーブルが表示されていますか?

24
りんご 2021/07/09 (金) 16:00:20 c564b@0e907

次回、クエリをSQLビューにして、表示されるSQL文をコピーしてここに貼り付けてもらえますか?

29

お世話になります。気づかず申し訳ありません。

SELECT 基本情報.苗字
FROM 基本情報, 基本情報 AS 基本情報_1
WHERE (((基本情報.苗字カナ) Like [Forms]![基本情報1]![抽出用カナ]));

このようになっています。

30

問題点を指摘する前に、
そのクエリを一度削除してもう一度作り直すとどうなりますか?

31

反応が遅く申し訳ありません。
クエリを削除して再度作り直すとこうなりました。

SELECT 基本情報.苗字
FROM 基本情報
WHERE (((基本情報.苗字カナ) Like [Forms]![基本情報1]![抽出用カナ]));

最初と違うのはわかりますが、それがどのように違うのかはわかりません。

クエリを実行してみて、パラメータ試しに[アーオ]*と入れてみたところ、結果はあ行の方の名字がきちんと1回ずつ表示されました!

ただ、現時点では「あ」のボタンを押した後のコンボボックスは空白です。

27
hiroton 2021/07/13 (火) 08:45:22 4339f@f966d

クエリの結果が望んだものにならない問題について

起きている現象から想像すると、クエリの元データとして使うテーブルを余計に読み込んでいる可能性が考えられます

確認すべき点はりんごさんが指摘している通りです
クエリの作りはテキストで確認することができるので、その内容をコピペしてください
確認方法については次のサイトが参考になります

SQLビューでSELECT文を使ったSQLを入力する(Accessの使い方さん)

33
りんご 2021/07/20 (火) 17:23:46 c564b@0e907

 コンボボックスの列数を2、列幅を例えば、1cm;1cm、連結列を1にしてどうなったか報告して下さい。

34

「あ」のボタンを押した後、従業員コンボボックスには、従業員の苗字が1回ずつ(同一名が繰り返されることなく)表示されました。
そして、名字を選択すると「型が一致しません」となります。

マクロ名
基本情報1 : 従業員コンボボックス : AfterUpdate : 埋め込みマクロ
アクション名
オブジェクトからレコードの検索
引数
-1, , 先頭のレコード, ="[従業員コード] = "& Str(Nz([Screen].[ActiveControl], 0))
エラー番号
2950

となっています。

35
りんご 2021/07/21 (水) 14:57:33 c564b@0e907 >> 33

引数
-1, , 先頭のレコード, ="[従業員コード] = "& Str(Nz([Screen].[ActiveControl], 0))

              数値型     ≠     文字型
 とりあえず、コンボボックスの表示問題は解決出来たという事でよろしいですか?この質問スレを解決済みにして新しい質問を立てましょう。下記の準備をやっておいて下さい。
 やりたい事の為には、従業員コードが出てくる「従業員テーブル、従業員抽出クエリ、ほにゃららフォームのコンボボックス(値集合ソース:従業員抽出クエリ)」が必要だと思います。
 Q従業員抽出が従業員抽出クエリに相当するならば、従業員コードのフィールドを追加、本番前のお試しクエリに相当するならば、新しいコンボボックス(値集合ソース:従業員抽出クエリ)を作って下さい。コンボボックスの連結列が従業員コードの列になるようにしておきましょう。

36
お茶 2021/07/21 (水) 18:12:26 4af80@2988e

出来ました!

Q従業員抽出 のクエリに[従業員コード]を追加してみたところ、
「あ」のボタンを押した後、コンボボックスにあ行の従業員が表示され、
その中の従業員を選択すると、フォームに出てくるようになりました。

hirotonさん りんごさん
何度もじっくりとお付き合いいただき、またご指導下さり、本当にありがとうございましたm(__)m

37
りんご 2021/07/21 (水) 18:15:45 c564b@0e907

おぉ、おめでとうございます。皆様お疲れ様でした。ビール飲もうっ、とっとっと、自宅でだょノ