
Access勉強中です。
委員名簿テーブルと、いくつかの行事テーブルを結合したいのですが、上手くいきません。
どうか教えてください。
access2003です。
委員名簿テーブル
クラス 生徒名1 生徒名2 生徒名3
1-1 ああ いい
1-2 かか きき くく
1-3 ささ
1-4 たた ちち つつ
行事Aテーブル 行事Bテーブル
生徒名 参加 生徒名 参加
かか true ああ false
ささ true いい true
ちち false きき true
たた true
ちち true
このようなテーブルを結合して、次のようなテーブルを作りたいのです。
クラス 生徒名 行事A 行事B
1-1 ああ false
1-1 いい true
1-2 かか true
1-2 きき true
1-2 くく
1-3 ささ true
1-4 たた true
1-4 ちち false true
1-5 つつ
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
一応、質問の範囲での回答とします。
たとえば、以下のような「委員会名簿テーブル」があるとします。
フィールドの生徒名は生徒名6でも、生徒名100でもフィールドが
設定できるまでかまいません。
クラス 生徒名1 生徒名2 生徒名3 生徒名4 生徒名5
1-1 田中 佐藤 西田 山崎 内藤
1-2 東 南田 中川
1-3 豊臣 田中 中田 今井
1-4 谷 道上
1-5 徳川 佐竹 佐藤 西岡 中川
これを以下のようなテーブルに簡単に変更できますか?
また、下記では質問の最終的な結果を得るには下記の
ように「生徒ID」という各生徒を一意に区別するフィールドが
必要になります。これは最後に作るクエリで必要であるということと、
同じクラスあるいは他のクラスに同じ苗字の人物が存在する可能性が
あるかもしれないからです。
生徒ID クラス 生徒名
1 1-1 佐藤
2 1-1 西田
3 1-1 山崎
4 1-1 内藤
5 1-2 南田
6 1-2 中川
7 1-3田中
8 1-3 中田
9 1-3 今井
10 1-4 道上
11 1-5 佐竹
12 1-5 佐藤
13 1-5 西岡
14 1-5 中川
もし、データが多くて大変だというのであれば、以下のようにしてみてください。
(1) 以下のようなテーブルを作ります。
生徒ID 数値型 主キーを設定します。
クラス テキスト型
生徒名 テキスト型
テーブルの名前を「委員会名簿テーブル」とします。
元の「委員名簿テーブル」を「委員会名簿テーブル元」
とします。
(2) 次に分かりやすく実行できるようにするために、
フォームを作り、そこにボタンを一つ設定します。
ボタンのクリック時のイベントに以下を設定します。
なお、ボタンの名前は出来上がったボタンの名前の
ままでいいです。
Private Sub コマンド0_Click()
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim i As Integer
Dim j As Long
Set db = CurrentDb
Set rs1 = db.OpenRecordset("委員会名簿テーブル元")
Set rs2 = db.OpenRecordset("委員会名簿テーブル", dbOpenDynaset)
j = 1
rs1.MoveFirst
Do Until rs1.EOF
For i = 2 To rs1.Fields.Count - 1
If rs1.Fields(i) <> "" Then
rs2.AddNew
rs2!生徒ID = j
rs2!クラス = rs1!クラス
rs2!生徒名 = rs1.Fields(i).Value
rs2.Update
j = j + 1
End If
Next i
rs1.MoveNext
Loop
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub
次に、コード表のコマンドバーのツールから
参照設定を選択し、Microsoft DAO xx Object Library の項目に
チェックを入れ、OKとします。なお、xx は3.6のような数字です。
(3) (1)、(2)ができたら、ボタンを押して「委員会名簿テーブル」
を確認してみてください。
(4) 次に、「行事Aテーブル」と「行事Bテーブル」
数値型の「生徒ID」というフィールドを追加し、できた「委員会名簿テーブル」
を参照して「クラス」と「生徒名」に合致した「生徒」を入れていってください。
本来は「生徒ID」があれば「生徒名」はこれらのテーブルでは必要はないのですが。
これらのテーブルの「生徒ID」は主キーを設定しません。
たとえば以下のように。
行事Aテーブル
生徒ID 生徒名 参加
1 佐藤 True
3 山崎 True
6 中川 True
行事Bテーブル
生徒ID 生徒名 参加
1 佐藤 False
6 中川 True
13 佐藤 True
14 中川 True
(5) 最後にクエリを作成します。下記のSQL文を新しいクエリを
SQLビューにして、貼り付けます。
SELECT 委員会名簿テーブル.生徒ID, 委員会名簿テーブル.クラス, 委員会名簿テーブル.生徒名, 行事Aテーブル.参加, 行事Bテーブル.参加
FROM (委員会名簿テーブル LEFT JOIN 行事Aテーブル ON 委員会名簿テーブル.生徒ID = 行事Aテーブル.生徒ID) LEFT JOIN 行事Bテーブル ON 委員会名簿テーブル.生徒ID = 行事Bテーブル.生徒ID;
あるいは、以下のようにしてもいいですが、こちらはフィールド名を変更しています。
変更は手動で書き変える必要があります。
SELECT 委員会名簿テーブル.生徒ID, 委員会名簿テーブル.クラス, 委員会名簿テーブル.生徒名, 行事Aテーブル.参加, 行事Bテーブル.参加
FROM (委員会名簿テーブル LEFT JOIN 行事Aテーブル ON 委員会名簿テーブル.生徒ID = 行事Aテーブル.生徒ID) LEFT JOIN 行事Bテーブル ON 委員会名簿テーブル.生徒ID = 行事Bテーブル.生徒ID;
上記のクエリをデザインビューで確認すると、「委員会名簿テーブル」
から「行事Aテーブル」と「行事Bテーブル」に結合線が向かっている
ことに注目してください。行事テーブルが追加されるような場合は
結合線の設定を同じようにしてください。
以上です。
わからないところがあれば補足してください。
ありがとうございます!
理解に半日かかりましたが、自分のテーブルを元に、書き換えて、動作しました。
いずれ、VBAで・・と思っていましたので、
一気に勉強がすすみました。
ただ、フォームのボタンをクリックしたときに・・というのが、うまくいきませんでした。
単純にVBAからステップ実行してしまいました。
そこは、これからの課題です!
No.4
- 回答日時:
現状のテーブル設計だと行事が増えるごとに、クラスの入れ替えや増減があるごとに
クエリを修正しなくてはなりません。
また、そのクエリ自体が難しくはなくとも長いSQLになってしまい遅くなります。
さらに、同姓同名の生徒が存在する場合には・・。
http://support.microsoft.com/kb/283878/ja
なので、生徒IDのような一意のフィールドを加え
委員名簿
クラス 生徒名 生徒ID
1-1 山田治夫 1
1-2 佐藤博 2
・・・・・・・・・・・・
行事
行事名 参加 生徒ID
潮干狩り True 2
潮干狩り False 1
運動会 True 1
運動会 True 2
のようなテーブル設計にして
クエリ1では双方の生徒IDで結合線を引きます。
クエリ1を元にしてクロス集計クエリで最終的なモノが得られます。
同姓同名は、考えていませんでした・・・
やはり1意のテーブル構造にすることが基本ですね。
ご指摘のように、並び替える複数のクエリを作って、
クロス集計クエリでできました。
お礼をつける前に、VBAでの並び替えの方法を載せてくださった方がいたので、
今回は、そちらの方に、ポイントをつけました。
基本を叩き込むことができました。
ありがとうございました。
No.3
- 回答日時:
No.2です。
アクセスで、データ同士をリンクさせるなら、1フィールド、1データにしないと、です。
ただ、質問者様のイメージされるフォームは、
生徒1名に対して、各行事答えが1つづつのため
エクセルに向いている内容に思えます。
例えば、行事欄が1つで、そこに入るデータが何通りかあり、関連して変わってくる項目があるような場合はアクセスが便利です。(エクセルのVLOOKUPを使いたいような場合です)
「次のような」とおっしゃる形であれば、
行事欄をあらかじめたくさん作っておかないと、ですね。
この回答への補足
実は、Excelでほしいものをマクロで作ることはできました。
ただ、今回はaccessを使いたいのです。
元データは、Excelをインポートしています。
今後は、行事AとDの参加者とか、行事のタイムテーブルから学期ごとの参加状況、なども作っていきます。
さらに、途中で生徒が増減することもあります。(最大は1クラス3名です)
このようないろいろなアウトプットや状況を考えるたことと、accessの勉強のため、accessで行いたいのです。
よろしくお願いします。
1フィールド1データは基本なんですね
何度もすみません。
もとのデータを並び替えるクエリをつくって、できました。
ありがとうございました。
No.2
- 回答日時:
ワンポイントアドバイス
このようなケースでは、委員名簿テーブルを一人づつにしないと応用が利かなくなりますね。
このケースでは、3つのテーブルをハイパーリンクで結ぶ価値はないと思いますよ。
委員名簿テーブルに
行事A、行事Bの欄を設けて、YES/NO型などにすれば済んでしまいますね。
委員名簿T
ID クラス 氏名 行事A 行事B
1 1-1 ああ
2 1-1 いい
3 1-2 かか
4 1-2 きき
5 1-2 くく
6 1-3 ささ
7 1-4 たた
8 1-4 ちち
9 1-5 つつ
この回答への補足
ありがとうございます。
行事テーブルはこれからも違う行事のものが追加されるので、名簿テーブルと行事テーブルを別にもちたいのです。
やはり、名簿テーブルをクエリでひとりづつに並べ替えてから、という手順になるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
アクセスで複数のレコード情報を1レコードにまとめる方法
Access(アクセス)
-
ACCESSでひとつのフィールドに内容をまとめる
Access(アクセス)
-
アクセス2003 複数の列に分かれたデータを1列にまとめたい
Access(アクセス)
-
-
4
複数のレコードを1つのレコードにまとめる方法
Access(アクセス)
-
5
Accessのクエリで2つのフィールドが同条件の場合に結合したい
その他(Microsoft Office)
-
6
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
-
7
Accessのフィールド結合について
Access(アクセス)
-
8
アクセスで複数レコードを1レコードにできますか?
その他(ソフトウェア)
-
9
アクセス 同じフィールド(テキスト型)のレコードを連結させたい
Access(アクセス)
-
10
ACCESS 一つのフィールドに複数レコードの値をセットしたい
その他(データベース)
-
11
Access クエリで連結する文字の間に空白を入力
その他(データベース)
-
12
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
13
Access2010 「演算子がありません」エラー
その他(データベース)
-
14
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
15
[Access]異なるレコード間の文字列連結
その他(データベース)
-
16
ACCESSでの文字と数字の結合について
Access(アクセス)
-
17
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
18
クロス集計クエリの結果をテーブルにしたい
Access(アクセス)
-
19
ACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?
Access(アクセス)
-
20
Accessフィールド分割
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
獅子舞の熨斗袋表書きは、何と...
-
高校生です 学校行事は全部休ん...
-
一般的な「1ヶ月前」とは
-
「6月2日をもって」は6月゜2日...
-
「於」 読み方
-
町内会の組の班長の順番が回っ...
-
内諾をいただいたことに対する...
-
女1人で仕事の飲み会に行くべき?
-
エクセルのシートリンクで,色...
-
子供の学校行事で、会社を休め...
-
今日1月13日木曜日。 翌金曜日...
-
友達から誕生日プレゼントが貰...
-
満60歳ていつ?
-
誕生日を忘れられた友達との今...
-
創価学会員がやらない行事って?
-
往復ハガキを半分に切ってしま...
-
延期の対義語って?
-
子供会の運営委員の経験のある方
-
公立中学は文化祭なし?
-
免許更新の誕生日1ヶ月前とは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「6月2日をもって」は6月゜2日...
-
3月の終わりまでは高校生?
-
町内会の組の班長の順番が回っ...
-
一般的な「1ヶ月前」とは
-
卒業式で校長先生に記念品贈呈...
-
教育委員会告示
-
「於」 読み方
-
子供会の運営委員の経験のある方
-
高校生です 学校行事は全部休ん...
-
卒業式を終えた、高校生の身分...
-
エクセルのシートリンクで,色...
-
子供の学校行事で、会社を休め...
-
卒業式当日は大荷物…(T0T)
-
大学の卒業式が不安です。
-
誕生日を忘れられた友達との今...
-
なるべく書けるところは漢字変...
-
中学校卒業から高校入学までの間
-
2か月前に別れた元彼に対する卒...
-
店長が異動されます。 お店の皆...
-
学位授与式を卒業式って言わな...
おすすめ情報