- 締切済み
Accessの結合について
人別に年間の超過勤務時間を集計したいと考えています。 毎月、課コード、職員固有の番号、職員氏名、月の超過勤務時間の4項目がExcelデータとしてあります。 しかし、毎月退職者や中途採用者がいるため、上記毎月のExcelデータに反映される職員が微妙に異なります。 このような毎月のExcelデータをAccessで結合すると、毎月データに上がっている職員の超過勤務時間は集計されますが、年度途中の退職者や、採用者の超過勤務時間は集計されず、彼らのデータがはじかれます。 彼らのデータがはじかれずに、年度で超過勤務をした職員全ての超過勤務時間を集計するには、どうすればよろしいでしょうか。 ご教示下さい。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- shinkami
- ベストアンサー率43% (179/411)
ANo.3です ご承知かと思いますが。 一つのワークシートにまとめるときは月(年を含む)の列を増やしてください 1000名が対象なら12か月分で12,000行になりますね、後々のことを考えるとやはりACCESSですね
- mshr1962
- ベストアンサー率39% (7417/18945)
もしかしてですが、月毎のテーブルを作ってませんか? それでは、データがはじかれるのは当然です。 月または年月を項目に追加してひとつのテーブルにするのが普通です。 これなら月毎のデータと年間(または特定の期間)のデータを取り出せます。 まあ、現状の解決策としては 1.ユニオンクエリで複数の項目が同じテーブルの結合クエリを作成して集計する http://www.nurs.or.jp/~ppoy/access/access/acQ007.html 2.職員のテーブル(全職員)を別途作成して、職員テーブルを元に各月のテーブルをクエリで1→∞で連結させる http://www.officepro.jp/access/relation/index3.html のどちらかでしょう。
- shinkami
- ベストアンサー率43% (179/411)
エクセルのワークシートはどのようになっていますか 月毎に一つのワークシートになっていると思いますが 複数のワークシートになっていると、データを一つのワークシートにまとめるて エクセルのままで計算できると思いますが。 ACCESSでやるときは 一つにまとめたワークシートをACCESSでインポートしてからテーブルの正規化で 社員テーブルと勤務記録テーブルに分けます、 社員テーブルには入社日と退職日の2つの項目を追加しておきましょう。
お礼
ご回答ありがとうございます。 Excelのままで計算できそうなので、試してみたいと思います。 Accessでも試してみたいと思います。 ありがとうございました。
- tag1701
- ベストアンサー率54% (67/123)
こんばんは。 質問内容を読みましたが、行われている手順は月毎にデータ化したExcelファイル(12個?)を Accessへリンクテーブル或いはコピーを行いテーブル化したものを職員固有の番号を1対1でリレーションして 集計しているということでしょうか? 総行数がExcelで収まる程度なら一つのシートにまとめて、職員固有の番号と氏名を集計キーにして 集計列名を超過勤務時間としてピボットテーブルを使えばでるのでは? Accessを使うのであれば、職員テーブル(固有番号・氏名)を作成し クエリ作成でほかのExcelテーブルの職員固有列全てに1対多(職員テーブル全てとそれに対応する データ)という形で行えば宜しいかと)。。 職員固有番号は絶対重複使用しないようしていることが条件です。。
お礼
ご回答ありがとうございます。 仰る通りのことをしていました。 月ごとにテーブルがあり、項目は毎月同じですが、出てくる職員の順番はばらばらで、月により出てくる職員が異なる場合もピボットテーブルは使えるのでしょうか。 退職者や、中途採用者も含めた年度の職員テーブルを作ることは、実は職場の先輩にもアドバイスされました。 職員が1000人程度いて、少し面倒かも知れないと思い躊躇していたところでした。 ご回答の2つの方法を試してみます。 ありがとうございました。
- piroin654
- ベストアンサー率75% (692/917)
>Accessの結合について この標題の意味がよくわからないままですが。 Null値が含まれる場合の対応はいろいろ ありますが、Null値が含まれるために 計算ができない場合などには、Null値を 0に置き換えて計算する方法があります。 (1) たとえばNull値が含まれているために、 DSum("[超過勤務時間]","テーブル名") とすれば、値が返ってこない来ない場合に、 Nz(DSum("[超過勤務時間]","テーブル名"),0) あるいは、 Nz(DSum("[超過勤務時間]","クエリ名"),0) とNz関数を使用するとNull値のフィールドは 0に変換され計算されます。 (2) フィールドにNull値があるとき、 このような使い方でも、 Sum(Nz([フィールド]) Null値を0に変換して計算します。 (3) また、クエリなどでNull値がある場合に、 Where条件に IIf(IsNull([フィールド]),0,[フィールド]) として、フィールドがNullならば、0に変換し、 そうでなければそのまま計算、あるいは抽出 する、といった方法もあります。 情報が少ないのでこのようなところですが。
お礼
ご回答ありがとうございます。 私はAccessの初心者で、ご回答の内容がまだよく理解できません。 テーブルが毎月分、12個あって、それらを結合して人別に、年間の超過勤務時間を集計をしようとしていました。(言い方がおかしいかも知れません) ご回答にある関数はいつ、どこに使えばうまくいくのでしょうか。 これからもっと勉強して、分かるようにしたいです。 ありがとうございました。
お礼
ご回答ありがとうございます。 ひとつのテーブルにするという発想がなかったので、とても参考になりました。 解決策の1.で紹介して下さったURLは、質問前に参照したことがあったのですが、実際の使用方法が分かりませんでした。 もっと勉強して分かるようになりたいです。 ありがとうございました。