ちょっとすぐにエラーを再現できませんでした。念のため、もう一度、下記のようにやってみて下さい。
まず、列の挿入で新規列を作り、フィールドのところで、右クリック、ビルドを選択して、式ビルダーを出して下さい。OKボタンの左に、式を入力する場所があると思うので、IIf([B] Is Not Null And [C] Is Not Null,[C],[D])を入れてOKボタンを押します。すると、式1: IIf([B] Is Not Null And [C] Is Not Null,[C],[D])と自動的に名前が付くので、この段階でクエリを実行してエラーが出るか確認して教えて下さい。
ご丁寧にありがとうございます。
早速フィールドのところに入力してみたのですが、
『クエリ式 'テーブル名.[式1:IIf([B] Is Not Null And [C] Is Not Null,[C],[D])]の構文エラー:カンマがありません。』
というエラーが出てしまいます…
このエラーの対処などはご存知でしょうか?
本当に初心者で申し訳ございません…
念のため確認ですが、同じ部署、かつ、同じ率、かつ、同じNoの重複レコードを登録する必要性が本当にあるのでしょうか?例えば、新しいフィールドが追加されて、違いが後々生じる、という事でしょうか?
グループ内連番ですが、AutoNoの小さい順にNoを振るのでしょうか、それとも、率の大きな順にNoを振るのでしょうか?
こちらが正です。
8 CCCCC 50 1
9 CCCCC 20 2・・・同率
10 CCCCC 20 2・・・同率
11 CCCCC 10 3
すみません、ここは転記ミスです。
8 CCCCC 50 1
9 CCCCC 20 2
10 CCCCC 20 3・・・同率
11 CCCCC 10 3・・・同率
同率考慮はどういう意味ですか?同じ部署、かつ、同じ率の時は、同じNoになるとは限らないように見えますが。
すでにCLOSEしてしまっていますが、どうしても気になり、mayu様の標準SQLを試してみました。割と古いPCでも約4秒ですべての結果が表示されました。ご報告まで。
Database: SQL Server 2019 Developer Edition
OS: Windows10 Pro 64 bit
Processor: Intel(R) Core(TM) i5-3470 3.20GHz
Installed RAM: 16.0 GB
Storage drive: 500 GB SSD
式にNull値(未入力)があると結果もNullになるという仕様です。Nullを0に変換するNZ関数というものがありますのでそれを利用するといいでしょう。
SQLビューに切り替えて、SQL文をコピペ提示してもらうほうが早いですね。
現在、画面の左上のほうに、ファイル、ホーム、作成、、、デザインとある中で、デザインが選択されていると思います。その下の段に、表示、実行、選択、テーブルの作成、、、などボタンがあると思うので、表示ボタンの▼をクリックして、SQLビューを選択して下さい。
何度もありがとうございます。
指示していただいた通り実行したところ、エラーは出なかったのですが、[b]のところに値を入力するボックスが新たに表示され、意図したクエリは実行できませんでした…
まずはテーブル設計から検討しなおす必要がありそうです。
Accessはリレーショナルデータベースアプリですので、テーブル設計が「正規化」されている必要があります。
現状のままのテーブルではAccessでは使いものになりません。
正規化とは - もう一度学ぶMS-Access
アクセスデータベース設計の基本(正規化)
現状のままでいくならエクセルの方が適しているでしょう。
ちょっとすぐにエラーを再現できませんでした。念のため、もう一度、下記のようにやってみて下さい。
まず、列の挿入で新規列を作り、フィールドのところで、右クリック、ビルドを選択して、式ビルダーを出して下さい。OKボタンの左に、式を入力する場所があると思うので、IIf([B] Is Not Null And [C] Is Not Null,[C],[D])を入れてOKボタンを押します。すると、式1: IIf([B] Is Not Null And [C] Is Not Null,[C],[D])と自動的に名前が付くので、この段階でクエリを実行してエラーが出るか確認して教えて下さい。
そのクエリをSQLビューにして、表示されるSQL文をコピーしてここに貼り付けてもらえますか。
ご丁寧にありがとうございます。
早速フィールドのところに入力してみたのですが、
『クエリ式 'テーブル名.[式1:IIf([B] Is Not Null And [C] Is Not Null,[C],[D])]の構文エラー:カンマがありません。』
というエラーが出てしまいます…
このエラーの対処などはご存知でしょうか?
本当に初心者で申し訳ございません…
列の挿入で新規列を作り、フィールドのところに当該式を入力すると、どうでしょう?
補足しておくと、導出項目になるので、テーブルにデータとして残りません。
ご回答していただき大変ありがとうございます。
初心者なので初歩的な質問になってしまうのですが、
りんご様が提示してくださった式は、デザインビューのどこに入力すれば良いのでしょうか?
列の挿入で新規列を作り、フィールドのところに当該式を入力すべきでしょうか?それとも抽出条件の欄でしょうか?
よろしくお願いいたします。
式1:IIf([B] Is Not Null And [C] Is Not Null,[C],[D])
式1の部分を希望の名前にすると、どうでしょうか?
「Q従業員抽出」を直接開いて内容を確認してみましたか?
クエリでほしいリストがきちんと作れているか確認しましょう。フォームとの連携はひとまずおいといて抽出条件を変更して確認してみてください
これでクエリを開くと、「あ」のボタンを押したときにコンボボックスに表示したい内容になりますか?
プロパティシートの書式タブを選択したら、列数を2、列幅を例えば、1cm;1cmにしてみて下さい。
コンボボックスをクリックすると、プロパティシートの連結列が2のときは、(2列目があれば)2列目のデータが選択されたという事になるはず。
再度確認しました。
クエリの名前も、コンボボックスの集合値ソースも Q従業員抽出 にしています。
合っているはずなのですが・・・。
ただ、今回はカタカナの名前が繰り返されるのではなく、コンボボックスの中は空白になってしまいました。
回答ありがとうございます!
皆様のアドバイスを受けなんとかそれらしいものができました。
またよろしくお願いします!
ところで、どんなデータベース管理のために、どんなフィールドを用意して、ぢんなデータをカウントとしようとしているのでしょう?
具体的になると、横向き云々が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 さな
お陰様でイメージ通りのレポートを出力することができました。
ありがとうございます。