Microsoft Access 掲示板

6,744 件中 3,921 から 3,960 までを表示しています。
5
セメント 2021/07/06 (火) 23:24:44 d1e06@0f626

回答ありがとうございます!
皆様のアドバイスを受けなんとかそれらしいものができました。
またよろしくお願いします!

3
りんご 2021/07/06 (火) 22:32:05 c564b@0e907

 ところで、どんなデータベース管理のために、どんなフィールドを用意して、ぢんなデータをカウントとしようとしているのでしょう?
 具体的になると、横向き云々がAccessに不向きだから、縦向きに組み直しましょうとなるかもしれません。

2
hideki 2021/07/06 (火) 22:19:40 a106b@96514

りんご様
ありがとうございました。
早速試してみます。

1
りんご 2021/07/06 (火) 21:08:47 c564b@0e907

こんな感じ?

フィールド1式1:IIf([フィールド1] Is Null,0,1)フィールド2式2 IIf([フィールド2] Is Null,0,1)……合計式:[式1]+ [式2]+…)
あ151……2
い101……2
う10……1
031……1
7

上記の補足説明をしておきます。

なのでテーブルAで使うデータは社員番号と名前と部署で、テーブルBでは社員の通勤手段や交通費などを管理するデータを使いたいのです。
テーブルAは社員のマスタとして保存しています。テーブルBのデータをAに入れてしまうとマスタではなくなってしまうのでテーブルを分けています。

社員の通勤手段や交通費などのデータが一人の社員に対して1レコードのデータでいいのなら、一対一の関係になります。この場合、データベース的にはテーブルを分けるのはメリットがないです。扱いが面倒になるだけです。
マスターがどうとか、何を基準にしているか分かりませんが、データベース的には、一対一の関係なら、名前や部署と交通手段、交通費に差はありません。
必要に応じてクエリで表示するフィールドを選択して管理すればOKです。
例えば、通勤関係のデータを管理する場合は、社員番号、名前、通勤手段、交通費・・・ を表示するクエリを作成します。
どうしても分けたいということなら、上記のリンク先のように外部結合のクエリを作成して、参照整合性、連鎖更新等を設定しておけば一つのテーブルのように扱うことができます。ただ、特別な理由がないのならメリットはないと思います。


一人の社員に対して、複数のレコードが必用(例えば過去のデータを履歴として残しておきたいというような場合)なら、一対多の関係になります。その場合は、メイン/サブフォーム形式にするのがシンプルでいいでしょう。もし、こちらの場合は、その旨を申し出てくれれば、もう少し詳細に解説します。

6
りんご 2021/07/05 (月) 13:43:47 c564b@0e907

 後半部を訂正させて下さい。
 実はクエリC上で、テーブルAの社員番号とテキスト型データ4を新規入力すると、テーブルBの社員番号が自動登録されるようになりました。しかし、社員番号が新規入力、データ4が未入力の状態で終了すると、自動登録されないので、フォーム上で登録するほうが無難です。

テーブルAは社員のマスタとして保存しています。テーブルBのデータをAに入れてしまうとマスタではなくなってしまうのでテーブルを分けています。

 私もマスターテーブルとそれ以外のテーブルで分けていた事があります。オリンピックの選手・競技・運営スタッフ・観客を思い浮かべて、テーブルを用意するみたいな事もやっていました。最近は、関数従属性に従うようにしていますが、昔の癖が邪魔して大変です。
 色々書いてきましたが、私の回答より、Hatenaさんの回答がとても参考になります。情報がまとまっていてオススメです。

5
りんご 2021/07/05 (月) 13:24:11 c564b@0e907 >> 3

 私の回答はフォームとVBAを使う方法です。
 まず、テーブルAの社員番号とテーブルBの社員番号について準備します。テーブルを開いて、それぞれに主キーを設定します。次に、クエリCを開いて、社員番号フィールド同士を結合します。クエリCを実行した時に、それぞれの社員番号フィールドがその他のフィールドと一緒に表示されるようにしておきます。
 クエリCをもとにフォームを作成すると、テキストボックスが自動作成されるので、テーブルAの社員番号がコントロールソースになっているものを選択します。デザインタブのプロパティシートをクリック、イベント項目の更新後処理をクリック、コードビルダーを開きコードを記します。

Me.テーブルB_社員番号 = Me.テーブルA_社員番号

 これで、おそらく希望に答えられたのではないかと思います。
 主キー同士を結合したので、クエリCを開いて、テーブルAの社員番号とテキスト型データ4を新規入力すれば、テーブルBの社員番号が自動登録出来るようになったと思います。しかし、社員番号が新規入力、データ4が未入力の状態で終了すると、自動登録されないと思います。うっかりすると、テーブルBの社員番号がテーブルAの社員番号に自動変更されたりすることもありそうです。だんだん何かおかしいデータベースになっていくでしょう。

テーブルAは社員のマスタとして保存しています。テーブルBのデータをAに入れてしまうとマスタではなくなってしまうのでテーブルを分けています。
 私もマスターテーブルとそれ以外のテーブルで分けていた事があります。オリンピックの選手・競技・運営スタッフ・観客を思い浮かべて、テーブルを用意するみたいな事もやっていました。最近は、関数従属性に従うようにしていますが、昔の癖が邪魔して大変です。
 色々書いてきましたが、私の回答より、Hatenaさんの回答がとても参考になります。いろいろググって見つける情報がまとまっていてオススメです。

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

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

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

>> 12で

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

このようにしています。

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


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

16

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

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

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

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

4

テーブルAのデータとテーブルBのデータは一対一の関係でしょうか。

だとしたら、下記が参考になると思います。

一対一関係のテーブル設計 - hatena chips

一対多の関係なら、テーブルAをメインフォームとして、テーブルBをサブフォームとして埋め込む設計にするといいでしょう。

3
おにこ 2021/07/05 (月) 10:59:14 3e392@b524f

りんご様
回答ありがとうございます。
テーブルAは社員のマスタとして保存しています。
そしてそのマスタを使い別のデータを作りたいのです。
なのでテーブルAで使うデータは社員番号と名前と部署で、テーブルBでは社員の通勤手段や交通費などを管理するデータを使いたいのです。
テーブルBのデータをAに入れてしまうとマスタではなくなってしまうのでテーブルを分けています。
AとBで質問のようにクエリをつくるとAで社員を追加してもBには反映がされずに困っています。

テーブルAの社員番号には主キーを設定しています。

上記の説明で大丈夫でしょうか?
稚拙な文章となり申し訳ありませんが宜しくお願い致します。

2
りんご 2021/07/02 (金) 20:44:20 c564b@0e907 >> 1

気付くの遅れましたが、テキスト型データ1、テキスト型データ2の属性を持つ社員と持たない社員がいるから、テーブルを分けていると言う事でしょうか?

1
りんご 2021/07/02 (金) 20:37:35 c564b@0e907

 まず、ゼロから始める場合、テーブルBを削除して、テーブルAにテキスト型データ3、テキスト型データ4のフィールドを追加するのが、セオリーだと思います。何か出来ない理由がありますか?
 次に、社員番号に主キーを設定するのが、セオリーだと思いますが、構いませんか?社員番号何番のデータ1を見せてって言われて、あれっどっちのデータ1だっけと迷ったり、追加情報があれば1つに絞れるんですが、という事が禁止されます。先輩後輩だから、同じ社員番号をシェアする、なんて事も禁止されます。先輩が新しい社員番号を貰い、後輩は古い社員番号を譲り受ける、なんて事も禁止されます。

2
みやこ 2021/07/01 (木) 20:01:00 d9199@2a39d

回答ありがとうございました!
生年月日のデータ型が不一致でした!!

1
りんご 2021/06/30 (水) 21:18:38 c564b@0e907

 EXCEL1という名前のテーブルとEXCEL2という名前のテーブルがあるとします。適当な名前のクエリを作って、EXCEL1とEXCEL2を表示して、なまえ(ひらがな)のフィールドで結合したとします。何某かのフィールドを出力しようとした時に、何も表示されないのは、どんな時でしょうか?
 結合出来るデータが互いに1つも存在しなければ、何も表示されない、という事になると思います。
 なまえとなまえ、生年月日と生年月日を結合して、上手く表示されないという事ですが、EXCEL1とEXCEL2に、同じ名前、かつ、同じ生年月日のデータが存在しますか?打ち間違いがないか確認してみて下さい。
 

1
hiroton 2021/06/30 (水) 17:03:07 dbc88@f966d

グループ化は必要ないです
日付テキストボックスの重複データ非表示プロパティを「はい」にしましょう

TextBox.HideDuplicates プロパティ (Access)

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

12

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

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

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

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

6
ほほ 2021/06/28 (月) 21:12:02 e27f2@0af37

hatena さな

お陰様でイメージ通りのレポートを出力することができました。
ありがとうございます。

3
ほほ 2021/06/28 (月) 21:04:07 e27f2@0af37

mayu さま
hiroton さま

一時はどうなるのか心配していましたが、
お陰様で思い通りのレポートを出力することができました。
クエリの使い方次第で色んなことが出来そうですので
もうすこし勉強していこうと思っています。
ありがとうございました。

9
おにこ 2021/06/28 (月) 15:45:27 3e392@b524f

hiroton様
回答ありがとうございます。
おかげさまで実装できました!!
稚拙な文章にも関わらずご理解いただき大変感謝しております。
またお力を貸して頂けると嬉しいです。

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

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


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

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

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

10

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

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

8
hiroton 2021/06/28 (月) 14:34:26 修正 38cf2@f966d

たとえばレポートフッターにテキストボックスを配置しレコードソースを次のようにします

=Sum(IIf([上着サイズ]="Sサイズ" And [上着チェック]=False,1,0))
7

質問を読み違えてました。
チェックの入ったレコードを表示しないというのがご希望だと思っていました。
チェックの入ったレコードのあるフィールドの値を非表示にしたいということですね。
hirotonさんから適切な回答がついていますのでそちらを参考にしてください。

6
おにこ 2021/06/28 (月) 13:49:58 3e392@b524f

hiroton様

上着サイズ表示:IIf([上着チェック],"",[上着サイズ])
こちらで実装できました!
ありがとうございます。
hatena様もアドバイス頂き誠にありがとうございました。

少しお聞きしたいのですが、購入不要のものはレポート上に表示されなくなりました。
今表示されている制服の各種類、各サイズの合計をレポート上に表示することは可能でしょうか?
例えば
上着のSサイズが8 Mサイズが17 Lサイズが20
ズボンの9号が18 11号が28・・・
のようにそれぞれのサイズの合計を出したいです。

追加質問のようになり申し訳ありませんがお分かりであれば教えて頂きたいです。

5
hiroton 2021/06/28 (月) 12:30:35 38cf2@f966d

フィールドの値を個別にON/OFFしたいならクエリにチェックの内容で条件分岐させたフィールドを作ったらいいですね
ex)クエリのフィールド

上着サイズ表示:IIf([上着チェック],"",[上着サイズ])

テキストボックスのコントロールソースで同様に指定する形でもいいです
ex)テキストボックスのコントロールソース

=IIf([上着チェック],"",[上着サイズ])

余談ですが、名前が「上着チェック」だとONで要なのか「いらないときはチェックをつける」なのかわからないですね

「チェック」自体はデータ型を見れば「Yes/No型」なのでわかると思います

フィールド名:上着不要
データ型:Yes/No型

のようにするといいと思います

4
おにこ 2021/06/28 (月) 11:53:36 3e392@b524f

hatena様
失礼いたしました。
クリック時のイベントに記述しました。

クリック時のイベントに記述しましたがやはりチェックされた人のレコード自体消えてしまいます・・・

テーブル情報は以下になります。
☆社員制服マスタ
社員番号:数値型
上着サイズ:テキスト型
ズボンサイズ:テキスト型
シャツサイズ:テキスト型
キャップサイズ:テキスト型
上着チェック:Yes/No型
ズボンチェック:Yes/No型
シャツチェック:Yes/No型
キャップチェック:Yes/No型

このチェックは支給不要と回答した社員にチェックを入れて管理表のレポートにサイズを表示しないようにしたいのです。

提示して頂いたコードをクリック時に入れると、上着のチェックボックスにチェックを入れてるだけでもその人のレコードがレポートに表示されなくなりました。

フィールドと連結しているチェックボックスにチェックを入れると、そのフィールドの値が表示されないという仕様を実装したいです。

説明が凄く下手で本当に申し訳ありませんが宜しくお願い致します。

3

提示のコードは、開く時のイベントではなく、フォーム上に配置したコマンドボタンのクリック時のイベントプロシージャに記述してください。

2
おにこ 2021/06/28 (月) 08:53:18 3e392@b524f

hatena様
回答ありがとうございます。
提示して頂いたVBAを開くときのイベントに入れてみましたが、チェックするとテキストボックスの値だけでなくちぇチェックされた人のデータそのものがレポートに表示されなくなりました・・・
チェックされたテキストボックスの値を空白のように表示されないようにしたいのですが可能でしょうか?
言葉足らずで申し訳ありませんが宜しくお願い致します。

23

改めて考えてみたんですがSTARTの判定はよくないですね
ENDのレコードの存在が保証されない場合データが漏れます
ENDのレコードの存在が保証されているなら奇数偶数でSTART/ENDがきれいに出現するのでIF判定が必要ないです

2
hiroton 2021/06/26 (土) 19:06:06 9ff1a@d02b8

フィールド「小計グループ:nz(DMax("順番","クエリ","品<>'"&[品]&"' AND 順番<"&[順番]),0)」を作って、これを順番よりも上位でグループ化してグループフッターを付けてみたらどうでしょう?

9

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

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

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

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

標題 ア
オプション値 1

標題 カ
オプション値 2

標題 サ
オプション値 3

・
・
・

標題 ワ

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

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

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

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

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

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

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

5

質問の表のテーブルだとして、

テーブルから集計クエリを作成して、種別1と購入日でグループ化、SEQ(連番)は最小に設定。
さらにクエリを新規作成して、テーブルと上のクエリを追加して、種別1と購入日で結合。
これをレポートのレコードソースにして、SEQでグループ化、並べ替えをすればいいでしょう。

あるいは、レポートのレコードソースはテーブルにしておいて、
グループ化と並べ替えの「フィールドの選択」で「式」を選択して、
そこに下記の式を設定するというのでもいいでしょう。

DMin("SEQ","テーブル名","種別1='" & [種別1] & "' AND 購入日=#" & [購入日] & "#")

1

レポートの「並び替え/グループ化」には
上下のレコードで値を比較してグループ分けする機能はありません。
したがって

順番品個数
1魚10
3魚20
4肉20
5野菜5
8野菜5
9魚10
 
というデータの場合は
レポートのレコードソースを何らかの手段で
順番品個数グループ
1魚101
3魚201
4肉202
5野菜53
8野菜53
9魚104
 
という形にする必要があるでしょう。

グループ連番は SQL を用いて
スカラサブクエリや定義域集計関数で付与することも出来ますけど
件数によっては重くなるため、
テーブルに連番用のフィールドを作成して
値を一気に書き込んでしまったほうがいいように思います。

サンプルコードを提示してもいいのですけど
ほほさんのスキルが分かりませんし、Access 2003, 2010をお使いとのことなので
もしかすると、Recordsetを用いたデータ編集のご経験もおありなのではと推測します。

なお、レポート上で工夫するなら、並び替えの最初に

= DCount("*", "テーブル", "順番 <= " & [順番])
      - DCount("*", "テーブル", "品 = '" & [品] & "' AND 順番 <= " & [順番])

という式を組み込んで
ご希望の形に近いレイアウトにすることは可能ですけど
2階層目を「品」でグループ化すると「順番」の昇順にはデータが並ばないでしょう。

以上のヒントをもとに、まずはご自身で試行錯誤してみることをお勧めします。

4
ほほ 2021/06/25 (金) 21:41:58 e27f2@646ca

oGFzgtnIStrl6D0さま

同じような問題で悩んでいました。
今どきですが、アクセス初心者で2003開発しています。

>kitasueさんのご回答内容を元に出来ました。
>感謝致します。
↑こちらはグループ化して
昇順・降順選択後にソートされたのですか?

ご意見聞かせてください。

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

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

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

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


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


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

2

hatenaさん
いつもありがとうございます!
できました!今回も勉強になりました!
レコードソースを変えると思いもしませんでした。。。
本当にありがとうございました。
解決です☺