プロが教えるわが家の防犯対策術!

私立高校で働いているAccess2003を勉強し始めた初心者です。
ExcelでならVBAを使えますが、
Accessでの成績処理に悪戦苦闘しています。

1学年10クラスで、実際は1クラス40人前後ですが、
後のエクセルでの処理を考えて、例えば3年生は
30101から31050までの番号と氏名が入ったIDというテーブルがあります。

点数の入力は点数を入力してもらうエクセルのブックを作っています。
例えば英語の長文演習だと英語_長文演習というブックの英語_長文演習というシートに
点数が入力されています。

ただ選択科目の場合はクラス単位の授業ではないので、
シートは以下のようにとびとびの名簿です。
番号   氏名
30101  赤川 次郎
30105  豊臣 秀吉
30112  織田 信長
30225  徳川 家康
30329  明智 光秀


VBAを使って不特定多数のエクセルのワークブックの中のシート全部から
Accessへのデータの取り込みはできるようになりました。


次にIDというテーブルを基準に成績の一覧表をVBAで作ろうとしています。
番号   氏名      国語   英語_長文演習
30101  赤川 次郎    55        49
30102  井上 陽水    36         
30103  宇多田 ヒカル  78         
30104  遠藤 周作    65         
30105  豊臣 秀吉    80        76

このようにして30101~31050までのデータを作って、
エクセルで各クラス50行ずつに読み込めるようにしたいのです。

LEFT JOIN(左外部結合)を使って手作業でやることはできるのですが、
科目数が多いため、なんとかVBAでできないかと思っているのですが、
何か方法があるでしょうか?

わかりにくい質問かもしれませんが、よろしくお願いします。

A 回答 (2件)

>Excelのデータのインポート→一覧表の作成→一覧表をExcelへエクスポート→Excelで成績処理です



1.Excelのデータ
<A~C列は生徒番号、氏名、点数> がこれですね
テーブルを追加します。
採点テーブル
 採点ID
 試験ID
 生徒番号(氏名)
 点数

 これには科目、試験日、科目担当 等の付記が必要ですね
 この部分を試験テーブルとして提案しました
 ただし記述ミスがありましたので訂正して下さい
試験テーブル
 試験ID(オートナンバー型 主キー)
 試験名
 科目担当
 試験日(日付型)
 試験科目

2.一覧表の作成
成績テーブルのつもりですが如何でしょうか
 採点テーブルと試験テーブルより追加、編集します。
これをするにはVBAとSQL文(Insert文、Update文)が必要です。
Access VBAの基礎 http://www.geocities.jp/cbc_vbnet/top/nyumon.html
 内のDoCmdオブジェクト→20 RunSQLメソッド

をご覧ください

追伸
前回は省きましたが毎年クラス替えがありますね 在席テーブルを追加してこれに
対して成績テーブルを展開しなければならない
在席テーブル
 在席ID
 年度
 生徒ID
 クラスID
    • good
    • 0

参考意見です


まず データ処理のアプローチの仕方がExcelとAccessでは大きく異なります。
・Excel:一つのBookでブック単位で処理します。

・Access:複数のテーブルでレコード単位で処理します。
 テーブルの一部はテーブル間にそれどれの主キーを用いて関連付けなされます。
 テーブルはシステムの基本でテーブル設計の良否がシステム全体の良否につながります。

※>次にIDというテーブル
AccessではIDはインデックスの意味でテーブル内の主キーの項目(フィールド)として用います。

以上前置きですが、何のことか理解できないでしょう

「LEFT JOIN」を使っておられるのでテーブルは複数作成されていると推察します。
テーブルの内容の検討(公開)から始めてください。
入力する人は何人ですか

テーブルの一例
生徒テーブル
 生徒ID(オートナンバー型 主キー)
 生徒コード(長整数型 重複なし)
 生徒氏名(テキスト型 IME入力モードひらがな IME変換モード人名/地名)
 ふりがな(テキスト型 IME入力モードひらがな IME変換モード無変換)
 誕生日(日付型)
 入学年月日(日付型)

クラステーブル
 クラスID(オートナンバー型 主キー)
 学年(整数型)
 クラス名(テキスト型 IME入力モードひらがな IME変換モード一般)

科目テーブル
 科目ID(オートナンバー型 主キー)
 科目名(テキスト型 重複なし IME入力モードひらがな IME変換モード一般)

試験テーブル
 試験ID(オートナンバー型 主キー)
 試験名
 試験日(日付型)
 試験日

成績テーブル
 成績ID(オートナンバー型 主キー)
 試験ID(長整数型)
 生徒コード(長整数型)
 生徒ID(長整数型)
 国語点数(整数型)
 英語長文演習点数(整数型)
 科目3点数(整数型)
 科目4点数(整数型)
 科目5点数(整数型)
 科目6点数(整数型)
 科目7点数(整数型)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

勤務先の同僚は全員Excelは使えますが、Accessを使える人はほとんどいません。そのため、Accessでテーブルを作ってそこに入力しているわけではないのです。

試験後に各科目担当(各学年20~30名)がExcelのシートに点数を入力します。
シートはA~C列までは共通です。A~C列は生徒番号、氏名、点数の順番で1行目は見出し、2行目以降にデータが入るようになっています。

ただ質問にも書いたように選択科目などはクラス単位で行っていないため、選択科目専用の名簿になっています。そのため生徒番号もとびとびになります。それらをまとめて、出席番号順の一覧表に作成したいと思っています。

最初からAccessに入力してもらうと簡単ですが、そうなると入力の手間が増えるため、現状は無理です(自分のExcelに入力した点数をコピペで入力する担当者が多いため)。

ExcelのデータをAccessへインポートするVBAはなんとかできました。ですので、Excelから入力されたデータをAccessに読み込むとテーブルは科目担当者の人数分だけの20~30個できるわけです。

やりたいことはExcelのデータのインポート→一覧表の作成→一覧表をExcelへエクスポート→Excelで成績処理です。この処理の中で一覧表の作成が (ExcelのVBAで行うと) 一番大変なので、なんとかしたいのです。一応、各担当のExcelのworkbookからデータを読み込んで一覧表を作るマクロをExcelのVBAで作れてはいるのですが、Accessでもっと簡単にできないかと思っています。

偏差値や順位計算を考えるとAccessよりもExcelで処理する方が簡単と思っているので、最後の成績処理はExcelで行いたいと思っています。その下準備まで(成績一覧表を作るまで)をAccessでと考えています。

わかりにくいかもしれませんが、よろしくお願いします。

お礼日時:2012/05/26 10:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!