回答ありがとうございます! 皆様のアドバイスを受けなんとかそれらしいものができました。 またよろしくお願いします!
ところで、どんなデータベース管理のために、どんなフィールドを用意して、ぢんなデータをカウントとしようとしているのでしょう? 具体的になると、横向き云々がAccessに不向きだから、縦向きに組み直しましょうとなるかもしれません。
りんご様 ありがとうございました。 早速試してみます。
こんな感じ?
上記の補足説明をしておきます。
なのでテーブルAで使うデータは社員番号と名前と部署で、テーブルBでは社員の通勤手段や交通費などを管理するデータを使いたいのです。 テーブルAは社員のマスタとして保存しています。テーブルBのデータをAに入れてしまうとマスタではなくなってしまうのでテーブルを分けています。
社員の通勤手段や交通費などのデータが一人の社員に対して1レコードのデータでいいのなら、一対一の関係になります。この場合、データベース的にはテーブルを分けるのはメリットがないです。扱いが面倒になるだけです。 マスターがどうとか、何を基準にしているか分かりませんが、データベース的には、一対一の関係なら、名前や部署と交通手段、交通費に差はありません。 必要に応じてクエリで表示するフィールドを選択して管理すればOKです。 例えば、通勤関係のデータを管理する場合は、社員番号、名前、通勤手段、交通費・・・ を表示するクエリを作成します。 どうしても分けたいということなら、上記のリンク先のように外部結合のクエリを作成して、参照整合性、連鎖更新等を設定しておけば一つのテーブルのように扱うことができます。ただ、特別な理由がないのならメリットはないと思います。
一人の社員に対して、複数のレコードが必用(例えば過去のデータを履歴として残しておきたいというような場合)なら、一対多の関係になります。その場合は、メイン/サブフォーム形式にするのがシンプルでいいでしょう。もし、こちらの場合は、その旨を申し出てくれれば、もう少し詳細に解説します。
後半部を訂正させて下さい。 実はクエリC上で、テーブルAの社員番号とテキスト型データ4を新規入力すると、テーブルBの社員番号が自動登録されるようになりました。しかし、社員番号が新規入力、データ4が未入力の状態で終了すると、自動登録されないので、フォーム上で登録するほうが無難です。
テーブルAは社員のマスタとして保存しています。テーブルBのデータをAに入れてしまうとマスタではなくなってしまうのでテーブルを分けています。
私もマスターテーブルとそれ以外のテーブルで分けていた事があります。オリンピックの選手・競技・運営スタッフ・観客を思い浮かべて、テーブルを用意するみたいな事もやっていました。最近は、関数従属性に従うようにしていますが、昔の癖が邪魔して大変です。 色々書いてきましたが、私の回答より、Hatenaさんの回答がとても参考になります。情報がまとまっていてオススメです。
私の回答はフォームとVBAを使う方法です。 まず、テーブルAの社員番号とテーブルBの社員番号について準備します。テーブルを開いて、それぞれに主キーを設定します。次に、クエリCを開いて、社員番号フィールド同士を結合します。クエリCを実行した時に、それぞれの社員番号フィールドがその他のフィールドと一緒に表示されるようにしておきます。 クエリCをもとにフォームを作成すると、テキストボックスが自動作成されるので、テーブルAの社員番号がコントロールソースになっているものを選択します。デザインタブのプロパティシートをクリック、イベント項目の更新後処理をクリック、コードビルダーを開きコードを記します。
Me.テーブルB_社員番号 = Me.テーブルA_社員番号
これで、おそらく希望に答えられたのではないかと思います。 主キー同士を結合したので、クエリCを開いて、テーブルAの社員番号とテキスト型データ4を新規入力すれば、テーブルBの社員番号が自動登録出来るようになったと思います。しかし、社員番号が新規入力、データ4が未入力の状態で終了すると、自動登録されないと思います。うっかりすると、テーブルBの社員番号がテーブルAの社員番号に自動変更されたりすることもありそうです。だんだん何かおかしいデータベースになっていくでしょう。
テーブルAは社員のマスタとして保存しています。テーブルBのデータをAに入れてしまうとマスタではなくなってしまうのでテーブルを分けています。 私もマスターテーブルとそれ以外のテーブルで分けていた事があります。オリンピックの選手・競技・運営スタッフ・観客を思い浮かべて、テーブルを用意するみたいな事もやっていました。最近は、関数従属性に従うようにしていますが、昔の癖が邪魔して大変です。 色々書いてきましたが、私の回答より、Hatenaさんの回答がとても参考になります。いろいろググって見つける情報がまとまっていてオススメです。
コンボボックスの内容はクエリの1列目と同じです(設定で変わりますが)。直接クエリを開いた場合、1列目は望む内容になっていますか? クエリの表示自体がうまくいっていない場合クエリの組み方に問題があります
コンボボックスにアンザイ・イトウ・オカダ・アンザイ・イトウ・オカダ
>> 12で
ちなみにクエリは フィールド 苗字 苗字カナ テーブル 基本情報 基本情報 並べ替え 表示 チェック 抽出条件 Like [Forms]![基本情報1]![抽出用カナ] このようにしています。
ちなみにクエリは フィールド 苗字 苗字カナ テーブル 基本情報 基本情報 並べ替え 表示 チェック 抽出条件 Like [Forms]![基本情報1]![抽出用カナ]
このようにしています。
とあります。「苗字カナ」の「表示」はチェックなしですよね?表示なし、つまり存在しないデータがコンボボックスに表示されていることになってしまっています。クエリの名前とコンボボックスの値集合ソースの値を確認してください。>> 4では、ともに「Q従業員抽出」とすることにしましたが、実際は何にしましたか?
続きについては、クエリで正しい(望みの)リストが作れることと、コンボボックスの内容はクエリと全く同じになることが理解できないと実装できない部分なのでまずはここまでで見直しをしてください
何度も申し訳ありません。ありがとうございます。
"どれかを選ぶと何かしたい"が抜けていました。 入力フォームは単票フォームです。
あ のボタンを押すと、苗字カナ がア~オで始まる方を抽出します。※ここは出来ました。 あ行の方が10名いたとして その10名をコンボボックスに反映させて そのコンボボックスから1名を選ぶことで、選んだ方の単票フォームが表示されるようにしたかったのです。
ただ、やはりaccessの不具合か、私の"何か"が間違っているのか、 コンボボックスにアンザイ・イトウ・オカダ・アンザイ・イトウ・オカダ・・・・と同じ名前が繰り返されていたかと思いきや、全く表示されなかったりすることがあり、 今は技術的にも時間的にも、その解決までたどり着けそうにないため、ボタンでの抽出までで使用しています。
テーブルAのデータとテーブルBのデータは一対一の関係でしょうか。
だとしたら、下記が参考になると思います。
一対一関係のテーブル設計 - hatena chips
一対多の関係なら、テーブルAをメインフォームとして、テーブルBをサブフォームとして埋め込む設計にするといいでしょう。
りんご様 回答ありがとうございます。 テーブルAは社員のマスタとして保存しています。 そしてそのマスタを使い別のデータを作りたいのです。 なのでテーブルAで使うデータは社員番号と名前と部署で、テーブルBでは社員の通勤手段や交通費などを管理するデータを使いたいのです。 テーブルBのデータをAに入れてしまうとマスタではなくなってしまうのでテーブルを分けています。 AとBで質問のようにクエリをつくるとAで社員を追加してもBには反映がされずに困っています。
テーブルAの社員番号には主キーを設定しています。
上記の説明で大丈夫でしょうか? 稚拙な文章となり申し訳ありませんが宜しくお願い致します。
気付くの遅れましたが、テキスト型データ1、テキスト型データ2の属性を持つ社員と持たない社員がいるから、テーブルを分けていると言う事でしょうか?
まず、ゼロから始める場合、テーブルBを削除して、テーブルAにテキスト型データ3、テキスト型データ4のフィールドを追加するのが、セオリーだと思います。何か出来ない理由がありますか? 次に、社員番号に主キーを設定するのが、セオリーだと思いますが、構いませんか?社員番号何番のデータ1を見せてって言われて、あれっどっちのデータ1だっけと迷ったり、追加情報があれば1つに絞れるんですが、という事が禁止されます。先輩後輩だから、同じ社員番号をシェアする、なんて事も禁止されます。先輩が新しい社員番号を貰い、後輩は古い社員番号を譲り受ける、なんて事も禁止されます。
回答ありがとうございました! 生年月日のデータ型が不一致でした!!
EXCEL1という名前のテーブルとEXCEL2という名前のテーブルがあるとします。適当な名前のクエリを作って、EXCEL1とEXCEL2を表示して、なまえ(ひらがな)のフィールドで結合したとします。何某かのフィールドを出力しようとした時に、何も表示されないのは、どんな時でしょうか? 結合出来るデータが互いに1つも存在しなければ、何も表示されない、という事になると思います。 なまえとなまえ、生年月日と生年月日を結合して、上手く表示されないという事ですが、EXCEL1とEXCEL2に、同じ名前、かつ、同じ生年月日のデータが存在しますか?打ち間違いがないか確認してみて下さい。
グループ化は必要ないです 日付テキストボックスの重複データ非表示プロパティを「はい」にしましょう
TextBox.HideDuplicates プロパティ (Access)
ただ、再クエリを追加するとコンボボックスに苗字カナが表示されますが、どれかを選ぶと「型が一致しません」と表示されます。
提示の内容はコンボボックスに抽出したリストを表示するまでの方法です。その後の「どれかを選ぶと何かしたい」は特に質問から見受けられないので回答に入れていません。
これらを合わせて質問してください
本当は、コンボボックスに漢字で「苗字」と「名前」を表示させたかったのですが
クエリのフィールドには計算式が使えます。1列目の「苗字」のところを「氏名: [苗字] & [名前]」とすると表示できます
氏名: [苗字] & [名前]
クエリにフィールドを追加すると、もっと変な表示(同一人物の名前が何個も続く)になってしまいました。
前提に一般的な話として、今のクエリの場合「苗字」だけなので、例えば従業員リストに
なんてデータがあると、コンボボックスには「鈴木」が3回並んでしまいますね。「氏名: [苗字] & [名前]」とすればある程度は解消しますが、同姓同名問題が起きる可能性は否定できません
ただ、これはあくまでも「クエリで表示される1行がそのまま表示される」だけでクエリにフィールドを増やしても行数が増えることはありません。クエリの設定に提示していない内容はありませんか?
例えばグループ化を設定している場合、「苗字」だけのクエリなら「鈴木」はすべて統合されて1行になりますが、「苗字」に加えて「名前」のフィールドも設けると、「鈴木」は共通でも「名前」が違うのでそれぞれ異なる1行になります。そのうえで「苗字」だけを表示するコンボボックスを設置すれば問題の状況になったりします
>> 13 新規データベースを作って、もう一度、説明通りにやってみるのは、どうかな?シンプルに、例えば、絞り込むボタンも、とりあえず1つでという感じで。
>> 12 こちらでも、試してみましたが、普通に動作しました。 テーブルを作って、苗字と苗字カナのフィールドを作って、クエリを作って、抽出条件を設定して、フォームを作って、テキストボックス、コンボボックス、ボタンを作って、マクロを設定するだけですよね。 もしかして、上記以外に、テーブルやクエリが出てきたり、途中で隠し味のアレンジをやったり、説明していない何かがあったりしませんか?
ただ、再クエリを追加するとコンボボックスに苗字カナが表示されますが、
打ち間違いだと思いますが、苗字カナではなく、苗字が表示されるという事でいいですよね?
度々ありがとうございます。コントロール名については、私が変更したし際に書き換えを間違っていたようです。 再クエリのアクションを削除してみると、「あ」のボタンを押したときには 「抽出用カナ」のテキストボックスに[アーオ]*と表示され、あ行の方のみ抽出されています。 ただ、再クエリを追加するとコンボボックスに苗字カナが表示されますが、どれかを選ぶと「型が一致しません」と表示されます。
このようにしています。 本当は、コンボボックスに漢字で「苗字」と「名前」を表示させたかったのですが、 クエリにフィールドを追加すると、もっと変な表示(同一人物の名前が何個も続く)になってしまいました。
ボタン・テキストボックス・コンボボックスは同一フォームのフォームヘッダーに置いています。
hatena さな
お陰様でイメージ通りのレポートを出力することができました。 ありがとうございます。
mayu さま hiroton さま
一時はどうなるのか心配していましたが、 お陰様で思い通りのレポートを出力することができました。 クエリの使い方次第で色んなことが出来そうですので もうすこし勉強していこうと思っています。 ありがとうございました。
hiroton様 回答ありがとうございます。 おかげさまで実装できました!! 稚拙な文章にも関わらずご理解いただき大変感謝しております。 またお力を貸して頂けると嬉しいです。
間違える手順もなさそうですが念のため
動作チェックとして、「再クエリ」のアクションを削除して実行してみてください。テキストボックスに文字を入力するだけになりますがエラーがでますか?
次に、テキストボックスの名前とマクロで設定するコントロール名を変更して試してください(たとえば「test1」とか)
あとは・・・ボタンと非連結のテキストボックスは同じフォームの上にありますよね?
ありがとうございます。なんどもすみません。 教わったそのとおりにやってみましたが、「あ」のボタンを押すと 「コントロール名"抽出用カナ"が正しくないか、存在しないコントロールを参照しています」とエラーが出ます。
配置したテキストボックス、作成したクエリ、埋め込みマクロのコントロール名 すべて確認しましたが、抽出用カナとして間違っていないはずなのですが、何がいけないのでしょうか?
たとえばレポートフッターにテキストボックスを配置しレコードソースを次のようにします
=Sum(IIf([上着サイズ]="Sサイズ" And [上着チェック]=False,1,0))
質問を読み違えてました。 チェックの入ったレコードを表示しないというのがご希望だと思っていました。 チェックの入ったレコードのあるフィールドの値を非表示にしたいということですね。 hirotonさんから適切な回答がついていますのでそちらを参考にしてください。
hiroton様
上着サイズ表示:IIf([上着チェック],"",[上着サイズ]) こちらで実装できました! ありがとうございます。 hatena様もアドバイス頂き誠にありがとうございました。
少しお聞きしたいのですが、購入不要のものはレポート上に表示されなくなりました。 今表示されている制服の各種類、各サイズの合計をレポート上に表示することは可能でしょうか? 例えば 上着のSサイズが8 Mサイズが17 Lサイズが20 ズボンの9号が18 11号が28・・・ のようにそれぞれのサイズの合計を出したいです。
追加質問のようになり申し訳ありませんがお分かりであれば教えて頂きたいです。
フィールドの値を個別にON/OFFしたいならクエリにチェックの内容で条件分岐させたフィールドを作ったらいいですね ex)クエリのフィールド
上着サイズ表示:IIf([上着チェック],"",[上着サイズ])
テキストボックスのコントロールソースで同様に指定する形でもいいです ex)テキストボックスのコントロールソース
=IIf([上着チェック],"",[上着サイズ])
余談ですが、名前が「上着チェック」だとONで要なのか「いらないときはチェックをつける」なのかわからないですね
「チェック」自体はデータ型を見れば「Yes/No型」なのでわかると思います
フィールド名:上着不要 データ型:Yes/No型
のようにするといいと思います
hatena様 失礼いたしました。 クリック時のイベントに記述しました。
クリック時のイベントに記述しましたがやはりチェックされた人のレコード自体消えてしまいます・・・
テーブル情報は以下になります。 ☆社員制服マスタ 社員番号:数値型 上着サイズ:テキスト型 ズボンサイズ:テキスト型 シャツサイズ:テキスト型 キャップサイズ:テキスト型 上着チェック:Yes/No型 ズボンチェック:Yes/No型 シャツチェック:Yes/No型 キャップチェック:Yes/No型
このチェックは支給不要と回答した社員にチェックを入れて管理表のレポートにサイズを表示しないようにしたいのです。
提示して頂いたコードをクリック時に入れると、上着のチェックボックスにチェックを入れてるだけでもその人のレコードがレポートに表示されなくなりました。
フィールドと連結しているチェックボックスにチェックを入れると、そのフィールドの値が表示されないという仕様を実装したいです。
説明が凄く下手で本当に申し訳ありませんが宜しくお願い致します。
提示のコードは、開く時のイベントではなく、フォーム上に配置したコマンドボタンのクリック時のイベントプロシージャに記述してください。
hatena様 回答ありがとうございます。 提示して頂いたVBAを開くときのイベントに入れてみましたが、チェックするとテキストボックスの値だけでなくちぇチェックされた人のデータそのものがレポートに表示されなくなりました・・・ チェックされたテキストボックスの値を空白のように表示されないようにしたいのですが可能でしょうか? 言葉足らずで申し訳ありませんが宜しくお願い致します。
改めて考えてみたんですがSTARTの判定はよくないですね ENDのレコードの存在が保証されない場合データが漏れます ENDのレコードの存在が保証されているなら奇数偶数でSTART/ENDがきれいに出現するのでIF判定が必要ないです
フィールド「小計グループ:nz(DMax("順番","クエリ","品<>'"&[品]&"' AND 順番<"&[順番]),0)」を作って、これを順番よりも上位でグループ化してグループフッターを付けてみたらどうでしょう?
小計グループ:nz(DMax("順番","クエリ","品<>'"&[品]&"' AND 順番<"&[順番]),0)
VBAは分からないので埋め込みマクロでということでしょうか。
上でも書きましたがコマンドボタンよりオプショングループとトグルボタン(ラジオボタン)でやるのがUI上もいいでしょう。
フォーム上にオプショングループを配置して、その中にラジオボタンを10個配置します。
それぞれのトグルボタンのプロパティを下記のように設定します。
標題 ア オプション値 1
標題 カ オプション値 2
標題 サ オプション値 3
・ ・ ・
標題 ワ
オプショングループの名前 フレーム1
オプショングループの更新後処理の埋め込みマクロに下記のように設定します。
再クエリ コントロール名 コンボボックス名
コンボボックスの値集合ソースのクエリの抽出条件は下記のようにします。
Like Choose([Forms]![フォーム名]![フレーム1],"[ア-オ]*","[カ-コ]*","[サ-ソ]*","[タ-ト]*","[ナ-ノ]*","[ハ-ホ]*","[マ-モ]*","[ヤ-ヨ]*","[ラ-ロ]*","[ワ-ヲ]*")
オプショングループの作り方がよく分からない場合は、コントロールウィザードで作成できます。 下記を参考にしてください。
Accessのフォームでオプションボタンを使ってデータを入力する方法 | できるネット
質問の表のテーブルだとして、
テーブルから集計クエリを作成して、種別1と購入日でグループ化、SEQ(連番)は最小に設定。 さらにクエリを新規作成して、テーブルと上のクエリを追加して、種別1と購入日で結合。 これをレポートのレコードソースにして、SEQでグループ化、並べ替えをすればいいでしょう。
あるいは、レポートのレコードソースはテーブルにしておいて、 グループ化と並べ替えの「フィールドの選択」で「式」を選択して、 そこに下記の式を設定するというのでもいいでしょう。
DMin("SEQ","テーブル名","種別1='" & [種別1] & "' AND 購入日=#" & [購入日] & "#")
レポートの「並び替え/グループ化」には 上下のレコードで値を比較してグループ分けする機能はありません。 したがって
グループ連番は SQL を用いて スカラサブクエリや定義域集計関数で付与することも出来ますけど 件数によっては重くなるため、 テーブルに連番用のフィールドを作成して 値を一気に書き込んでしまったほうがいいように思います。
サンプルコードを提示してもいいのですけど ほほさんのスキルが分かりませんし、Access 2003, 2010をお使いとのことなので もしかすると、Recordsetを用いたデータ編集のご経験もおありなのではと推測します。
なお、レポート上で工夫するなら、並び替えの最初に
= DCount("*", "テーブル", "順番 <= " & [順番]) - DCount("*", "テーブル", "品 = '" & [品] & "' AND 順番 <= " & [順番])
という式を組み込んで ご希望の形に近いレイアウトにすることは可能ですけど 2階層目を「品」でグループ化すると「順番」の昇順にはデータが並ばないでしょう。
以上のヒントをもとに、まずはご自身で試行錯誤してみることをお勧めします。
oGFzgtnIStrl6D0さま
同じような問題で悩んでいました。 今どきですが、アクセス初心者で2003開発しています。
>kitasueさんのご回答内容を元に出来ました。 >感謝致します。 ↑こちらはグループ化して 昇順・降順選択後にソートされたのですか?
ご意見聞かせてください。
テーブルのフィールドは必要ないですよ
フォームデザインツールでコントロールの中からテキストボックスを選んでフォーム上の適当な場所に配置し、「テキスト ボックス名を指定してください。」のとこで「抽出用カナ」と入力します
これで、フォームのデザインビュー上でテキストボックスに「非連結」と表示された名前プロパティが「抽出用カナ」のテキストボックスが配置できます
配置済みの適当なテキストボックスをコピー&ペーストしてコントロールソースプロパティを「」(削除)、名前プロパティを「抽出用カナ」と変更してもかまいません。コントロールソースプロパティがないテキストボックスはデザインビュー上で「非連結」と表示されます
このような「非連結」のテキストボックスを配置すると、テーブルのデータに影響しない自由な入力のできるテキストボックスになります。今回は五十音の各ボタンがあって、それぞれで動きを変えたいのでどのボタンを押したのかを覚えておく必要があります。フォームに専用のメモ書きを用意してるという感じです
hatenaさん いつもありがとうございます! できました!今回も勉強になりました! レコードソースを変えると思いもしませんでした。。。 本当にありがとうございました。 解決です☺
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
Markdown Tables generator
回答ありがとうございます!
皆様のアドバイスを受けなんとかそれらしいものができました。
またよろしくお願いします!
ところで、どんなデータベース管理のために、どんなフィールドを用意して、ぢんなデータをカウントとしようとしているのでしょう?
具体的になると、横向き云々がAccessに不向きだから、縦向きに組み直しましょうとなるかもしれません。
りんご様
ありがとうございました。
早速試してみます。
こんな感じ?
上記の補足説明をしておきます。
社員の通勤手段や交通費などのデータが一人の社員に対して1レコードのデータでいいのなら、一対一の関係になります。この場合、データベース的にはテーブルを分けるのはメリットがないです。扱いが面倒になるだけです。
マスターがどうとか、何を基準にしているか分かりませんが、データベース的には、一対一の関係なら、名前や部署と交通手段、交通費に差はありません。
必要に応じてクエリで表示するフィールドを選択して管理すればOKです。
例えば、通勤関係のデータを管理する場合は、社員番号、名前、通勤手段、交通費・・・ を表示するクエリを作成します。
どうしても分けたいということなら、上記のリンク先のように外部結合のクエリを作成して、参照整合性、連鎖更新等を設定しておけば一つのテーブルのように扱うことができます。ただ、特別な理由がないのならメリットはないと思います。
一人の社員に対して、複数のレコードが必用(例えば過去のデータを履歴として残しておきたいというような場合)なら、一対多の関係になります。その場合は、メイン/サブフォーム形式にするのがシンプルでいいでしょう。もし、こちらの場合は、その旨を申し出てくれれば、もう少し詳細に解説します。
後半部を訂正させて下さい。
実はクエリC上で、テーブルAの社員番号とテキスト型データ4を新規入力すると、テーブルBの社員番号が自動登録されるようになりました。しかし、社員番号が新規入力、データ4が未入力の状態で終了すると、自動登録されないので、フォーム上で登録するほうが無難です。
私もマスターテーブルとそれ以外のテーブルで分けていた事があります。オリンピックの選手・競技・運営スタッフ・観客を思い浮かべて、テーブルを用意するみたいな事もやっていました。最近は、関数従属性に従うようにしていますが、昔の癖が邪魔して大変です。
色々書いてきましたが、私の回答より、Hatenaさんの回答がとても参考になります。情報がまとまっていてオススメです。
私の回答はフォームとVBAを使う方法です。
まず、テーブルAの社員番号とテーブルBの社員番号について準備します。テーブルを開いて、それぞれに主キーを設定します。次に、クエリCを開いて、社員番号フィールド同士を結合します。クエリCを実行した時に、それぞれの社員番号フィールドがその他のフィールドと一緒に表示されるようにしておきます。
クエリCをもとにフォームを作成すると、テキストボックスが自動作成されるので、テーブルAの社員番号がコントロールソースになっているものを選択します。デザインタブのプロパティシートをクリック、イベント項目の更新後処理をクリック、コードビルダーを開きコードを記します。
これで、おそらく希望に答えられたのではないかと思います。
主キー同士を結合したので、クエリCを開いて、テーブルAの社員番号とテキスト型データ4を新規入力すれば、テーブルBの社員番号が自動登録出来るようになったと思います。しかし、社員番号が新規入力、データ4が未入力の状態で終了すると、自動登録されないと思います。うっかりすると、テーブルBの社員番号がテーブルAの社員番号に自動変更されたりすることもありそうです。だんだん何かおかしいデータベースになっていくでしょう。
コンボボックスの内容はクエリの1列目と同じです(設定で変わりますが)。直接クエリを開いた場合、1列目は望む内容になっていますか?
クエリの表示自体がうまくいっていない場合クエリの組み方に問題があります
>> 12で
とあります。「苗字カナ」の「表示」はチェックなしですよね?表示なし、つまり存在しないデータがコンボボックスに表示されていることになってしまっています。クエリの名前とコンボボックスの値集合ソースの値を確認してください。>> 4では、ともに「Q従業員抽出」とすることにしましたが、実際は何にしましたか?
続きについては、クエリで正しい(望みの)リストが作れることと、コンボボックスの内容はクエリと全く同じになることが理解できないと実装できない部分なのでまずはここまでで見直しをしてください
何度も申し訳ありません。ありがとうございます。
"どれかを選ぶと何かしたい"が抜けていました。
入力フォームは単票フォームです。
あ のボタンを押すと、苗字カナ がア~オで始まる方を抽出します。※ここは出来ました。
あ行の方が10名いたとして
その10名をコンボボックスに反映させて
そのコンボボックスから1名を選ぶことで、選んだ方の単票フォームが表示されるようにしたかったのです。
ただ、やはりaccessの不具合か、私の"何か"が間違っているのか、
コンボボックスにアンザイ・イトウ・オカダ・アンザイ・イトウ・オカダ・・・・と同じ名前が繰り返されていたかと思いきや、全く表示されなかったりすることがあり、
今は技術的にも時間的にも、その解決までたどり着けそうにないため、ボタンでの抽出までで使用しています。
テーブルAのデータとテーブルBのデータは一対一の関係でしょうか。
だとしたら、下記が参考になると思います。
一対一関係のテーブル設計 - hatena chips
一対多の関係なら、テーブルAをメインフォームとして、テーブルBをサブフォームとして埋め込む設計にするといいでしょう。
りんご様
回答ありがとうございます。
テーブルAは社員のマスタとして保存しています。
そしてそのマスタを使い別のデータを作りたいのです。
なのでテーブルAで使うデータは社員番号と名前と部署で、テーブルBでは社員の通勤手段や交通費などを管理するデータを使いたいのです。
テーブルBのデータをAに入れてしまうとマスタではなくなってしまうのでテーブルを分けています。
AとBで質問のようにクエリをつくるとAで社員を追加してもBには反映がされずに困っています。
テーブルAの社員番号には主キーを設定しています。
上記の説明で大丈夫でしょうか?
稚拙な文章となり申し訳ありませんが宜しくお願い致します。
気付くの遅れましたが、テキスト型データ1、テキスト型データ2の属性を持つ社員と持たない社員がいるから、テーブルを分けていると言う事でしょうか?
まず、ゼロから始める場合、テーブルBを削除して、テーブルAにテキスト型データ3、テキスト型データ4のフィールドを追加するのが、セオリーだと思います。何か出来ない理由がありますか?
次に、社員番号に主キーを設定するのが、セオリーだと思いますが、構いませんか?社員番号何番のデータ1を見せてって言われて、あれっどっちのデータ1だっけと迷ったり、追加情報があれば1つに絞れるんですが、という事が禁止されます。先輩後輩だから、同じ社員番号をシェアする、なんて事も禁止されます。先輩が新しい社員番号を貰い、後輩は古い社員番号を譲り受ける、なんて事も禁止されます。
回答ありがとうございました!
生年月日のデータ型が不一致でした!!
EXCEL1という名前のテーブルとEXCEL2という名前のテーブルがあるとします。適当な名前のクエリを作って、EXCEL1とEXCEL2を表示して、なまえ(ひらがな)のフィールドで結合したとします。何某かのフィールドを出力しようとした時に、何も表示されないのは、どんな時でしょうか?
結合出来るデータが互いに1つも存在しなければ、何も表示されない、という事になると思います。
なまえとなまえ、生年月日と生年月日を結合して、上手く表示されないという事ですが、EXCEL1とEXCEL2に、同じ名前、かつ、同じ生年月日のデータが存在しますか?打ち間違いがないか確認してみて下さい。
グループ化は必要ないです
日付テキストボックスの重複データ非表示プロパティを「はい」にしましょう
TextBox.HideDuplicates プロパティ (Access)
提示の内容はコンボボックスに抽出したリストを表示するまでの方法です。その後の「どれかを選ぶと何かしたい」は特に質問から見受けられないので回答に入れていません。
これらを合わせて質問してください
クエリのフィールドには計算式が使えます。1列目の「苗字」のところを「
氏名: [苗字] & [名前]」とすると表示できます前提に一般的な話として、今のクエリの場合「苗字」だけなので、例えば従業員リストに
なんてデータがあると、コンボボックスには「鈴木」が3回並んでしまいますね。「
氏名: [苗字] & [名前]」とすればある程度は解消しますが、同姓同名問題が起きる可能性は否定できませんただ、これはあくまでも「クエリで表示される1行がそのまま表示される」だけでクエリにフィールドを増やしても行数が増えることはありません。クエリの設定に提示していない内容はありませんか?
例えばグループ化を設定している場合、「苗字」だけのクエリなら「鈴木」はすべて統合されて1行になりますが、「苗字」に加えて「名前」のフィールドも設けると、「鈴木」は共通でも「名前」が違うのでそれぞれ異なる1行になります。そのうえで「苗字」だけを表示するコンボボックスを設置すれば問題の状況になったりします
>> 13
新規データベースを作って、もう一度、説明通りにやってみるのは、どうかな?シンプルに、例えば、絞り込むボタンも、とりあえず1つでという感じで。
>> 12
こちらでも、試してみましたが、普通に動作しました。
テーブルを作って、苗字と苗字カナのフィールドを作って、クエリを作って、抽出条件を設定して、フォームを作って、テキストボックス、コンボボックス、ボタンを作って、マクロを設定するだけですよね。
もしかして、上記以外に、テーブルやクエリが出てきたり、途中で隠し味のアレンジをやったり、説明していない何かがあったりしませんか?
打ち間違いだと思いますが、苗字カナではなく、苗字が表示されるという事でいいですよね?
度々ありがとうございます。コントロール名については、私が変更したし際に書き換えを間違っていたようです。
再クエリのアクションを削除してみると、「あ」のボタンを押したときには
「抽出用カナ」のテキストボックスに[アーオ]*と表示され、あ行の方のみ抽出されています。
ただ、再クエリを追加するとコンボボックスに苗字カナが表示されますが、どれかを選ぶと「型が一致しません」と表示されます。
ちなみにクエリは
フィールド 苗字 苗字カナ
テーブル 基本情報 基本情報
並べ替え
表示 チェック
抽出条件 Like [Forms]![基本情報1]![抽出用カナ]
このようにしています。
本当は、コンボボックスに漢字で「苗字」と「名前」を表示させたかったのですが、
クエリにフィールドを追加すると、もっと変な表示(同一人物の名前が何個も続く)になってしまいました。
ボタン・テキストボックス・コンボボックスは同一フォームのフォームヘッダーに置いています。
hatena さな
お陰様でイメージ通りのレポートを出力することができました。
ありがとうございます。
mayu さま
hiroton さま
一時はどうなるのか心配していましたが、
お陰様で思い通りのレポートを出力することができました。
クエリの使い方次第で色んなことが出来そうですので
もうすこし勉強していこうと思っています。
ありがとうございました。
hiroton様
回答ありがとうございます。
おかげさまで実装できました!!
稚拙な文章にも関わらずご理解いただき大変感謝しております。
またお力を貸して頂けると嬉しいです。
間違える手順もなさそうですが念のため

動作チェックとして、「再クエリ」のアクションを削除して実行してみてください。テキストボックスに文字を入力するだけになりますがエラーがでますか?
次に、テキストボックスの名前とマクロで設定するコントロール名を変更して試してください(たとえば「test1」とか)
あとは・・・ボタンと非連結のテキストボックスは同じフォームの上にありますよね?
ありがとうございます。なんどもすみません。
教わったそのとおりにやってみましたが、「あ」のボタンを押すと
「コントロール名"抽出用カナ"が正しくないか、存在しないコントロールを参照しています」とエラーが出ます。
配置したテキストボックス、作成したクエリ、埋め込みマクロのコントロール名 すべて確認しましたが、抽出用カナとして間違っていないはずなのですが、何がいけないのでしょうか?
たとえばレポートフッターにテキストボックスを配置しレコードソースを次のようにします
質問を読み違えてました。
チェックの入ったレコードを表示しないというのがご希望だと思っていました。
チェックの入ったレコードのあるフィールドの値を非表示にしたいということですね。
hirotonさんから適切な回答がついていますのでそちらを参考にしてください。
hiroton様
少しお聞きしたいのですが、購入不要のものはレポート上に表示されなくなりました。
今表示されている制服の各種類、各サイズの合計をレポート上に表示することは可能でしょうか?
例えば
上着のSサイズが8 Mサイズが17 Lサイズが20
ズボンの9号が18 11号が28・・・
のようにそれぞれのサイズの合計を出したいです。
追加質問のようになり申し訳ありませんがお分かりであれば教えて頂きたいです。
フィールドの値を個別にON/OFFしたいならクエリにチェックの内容で条件分岐させたフィールドを作ったらいいですね
ex)クエリのフィールド
テキストボックスのコントロールソースで同様に指定する形でもいいです
ex)テキストボックスのコントロールソース
余談ですが、名前が「上着チェック」だとONで要なのか「いらないときはチェックをつける」なのかわからないですね
「チェック」自体はデータ型を見れば「Yes/No型」なのでわかると思います
のようにするといいと思います
hatena様
失礼いたしました。
クリック時のイベントに記述しました。
クリック時のイベントに記述しましたがやはりチェックされた人のレコード自体消えてしまいます・・・
テーブル情報は以下になります。
☆社員制服マスタ
社員番号:数値型
上着サイズ:テキスト型
ズボンサイズ:テキスト型
シャツサイズ:テキスト型
キャップサイズ:テキスト型
上着チェック:Yes/No型
ズボンチェック:Yes/No型
シャツチェック:Yes/No型
キャップチェック:Yes/No型
このチェックは支給不要と回答した社員にチェックを入れて管理表のレポートにサイズを表示しないようにしたいのです。
提示して頂いたコードをクリック時に入れると、上着のチェックボックスにチェックを入れてるだけでもその人のレコードがレポートに表示されなくなりました。
フィールドと連結しているチェックボックスにチェックを入れると、そのフィールドの値が表示されないという仕様を実装したいです。
説明が凄く下手で本当に申し訳ありませんが宜しくお願い致します。
提示のコードは、開く時のイベントではなく、フォーム上に配置したコマンドボタンのクリック時のイベントプロシージャに記述してください。
hatena様
回答ありがとうございます。
提示して頂いたVBAを開くときのイベントに入れてみましたが、チェックするとテキストボックスの値だけでなくちぇチェックされた人のデータそのものがレポートに表示されなくなりました・・・
チェックされたテキストボックスの値を空白のように表示されないようにしたいのですが可能でしょうか?
言葉足らずで申し訳ありませんが宜しくお願い致します。
改めて考えてみたんですがSTARTの判定はよくないですね
ENDのレコードの存在が保証されない場合データが漏れます
ENDのレコードの存在が保証されているなら奇数偶数でSTART/ENDがきれいに出現するのでIF判定が必要ないです
フィールド「
小計グループ:nz(DMax("順番","クエリ","品<>'"&[品]&"' AND 順番<"&[順番]),0)」を作って、これを順番よりも上位でグループ化してグループフッターを付けてみたらどうでしょう?VBAは分からないので埋め込みマクロでということでしょうか。
上でも書きましたがコマンドボタンよりオプショングループとトグルボタン(ラジオボタン)でやるのがUI上もいいでしょう。
フォーム上にオプショングループを配置して、その中にラジオボタンを10個配置します。
それぞれのトグルボタンのプロパティを下記のように設定します。
標題 ア
オプション値 1
標題 カ
オプション値 2
標題 サ
オプション値 3
・
・
・
標題 ワ
オプショングループの名前 フレーム1
オプショングループの更新後処理の埋め込みマクロに下記のように設定します。
コンボボックスの値集合ソースのクエリの抽出条件は下記のようにします。
オプショングループの作り方がよく分からない場合は、コントロールウィザードで作成できます。
下記を参考にしてください。
Accessのフォームでオプションボタンを使ってデータを入力する方法 | できるネット
質問の表のテーブルだとして、
テーブルから集計クエリを作成して、種別1と購入日でグループ化、SEQ(連番)は最小に設定。
さらにクエリを新規作成して、テーブルと上のクエリを追加して、種別1と購入日で結合。
これをレポートのレコードソースにして、SEQでグループ化、並べ替えをすればいいでしょう。
あるいは、レポートのレコードソースはテーブルにしておいて、
グループ化と並べ替えの「フィールドの選択」で「式」を選択して、
そこに下記の式を設定するというのでもいいでしょう。
DMin("SEQ","テーブル名","種別1='" & [種別1] & "' AND 購入日=#" & [購入日] & "#")
レポートの「並び替え/グループ化」には
上下のレコードで値を比較してグループ分けする機能はありません。
したがって
グループ連番は SQL を用いて
スカラサブクエリや定義域集計関数で付与することも出来ますけど
件数によっては重くなるため、
テーブルに連番用のフィールドを作成して
値を一気に書き込んでしまったほうがいいように思います。
サンプルコードを提示してもいいのですけど
ほほさんのスキルが分かりませんし、Access 2003, 2010をお使いとのことなので
もしかすると、Recordsetを用いたデータ編集のご経験もおありなのではと推測します。
なお、レポート上で工夫するなら、並び替えの最初に
という式を組み込んで
ご希望の形に近いレイアウトにすることは可能ですけど
2階層目を「品」でグループ化すると「順番」の昇順にはデータが並ばないでしょう。
以上のヒントをもとに、まずはご自身で試行錯誤してみることをお勧めします。
oGFzgtnIStrl6D0さま
同じような問題で悩んでいました。
今どきですが、アクセス初心者で2003開発しています。
>kitasueさんのご回答内容を元に出来ました。
>感謝致します。
↑こちらはグループ化して
昇順・降順選択後にソートされたのですか?
ご意見聞かせてください。
テーブルのフィールドは必要ないですよ
フォームデザインツールでコントロールの中からテキストボックスを選んでフォーム上の適当な場所に配置し、「テキスト ボックス名を指定してください。」のとこで「抽出用カナ」と入力します
これで、フォームのデザインビュー上でテキストボックスに「非連結」と表示された名前プロパティが「抽出用カナ」のテキストボックスが配置できます
配置済みの適当なテキストボックスをコピー&ペーストしてコントロールソースプロパティを「」(削除)、名前プロパティを「抽出用カナ」と変更してもかまいません。コントロールソースプロパティがないテキストボックスはデザインビュー上で「非連結」と表示されます
このような「非連結」のテキストボックスを配置すると、テーブルのデータに影響しない自由な入力のできるテキストボックスになります。今回は五十音の各ボタンがあって、それぞれで動きを変えたいのでどのボタンを押したのかを覚えておく必要があります。フォームに専用のメモ書きを用意してるという感じです
hatenaさん
いつもありがとうございます!
できました!今回も勉強になりました!
レコードソースを変えると思いもしませんでした。。。
本当にありがとうございました。
解決です☺