dポイントプレゼントキャンペーン実施中!

次のようなデータ構造のテーブルから
 氏名 | データ1
----------------
 あ  | 1111
 い  | 2222
 あ  | 3333
 う  | 4444
次のようなデータ構造のテーブルを
 氏名 | データ1 | データ2
----------------------------
 あ  | 1111 | 3333
 い  | 2222 |
 う  | 4444 |
作成したいのですが、うまくいきません。
どなたか教えていただけないでしょうか。

A 回答 (6件)

No.5です。


では、あまりスマートなやり方ではなくて恐縮ですが・・・

仮に、現在のテーブルの名前を「データテーブル」として、話を進めます。
なお、わからないことがありましたらまたご質問下さい。答えられる範囲でお応えしますので。

準備:
A)「氏名一覧」テーブルの作成
 1)新規クエリをデザインビューで開いたら、メニューで「表示(V)」→「SQLビュー(Q)」を選択
 2)表示されている「SELECT;」等を削除し、以下のSQL文を貼付:
SELECT DISTINCT データテーブル.氏名 INTO 氏名一覧
FROM データテーブル;
 3)このクエリを実行し、「氏名一覧」テーブルを作成
※クエリ自体は、テーブル作成直後に削除して構いません。

B)「各人データ」サブフォームの作成
 1)レコードソースに「データテーブル」を指定して新規フォームを作成
 2)フォームプロパティの「既定のビュー」に「帳票フォーム」を指定
  (「通番」割り当て前にデータを確認しないなら不要)
 3)「通番(Class)」フィールドと「データ」フィールドをフォームに追加
 4)「各人データ」としてフォームを保存

C)「通番割当」メインフォームの作成
 1)レコードソースに「氏名一覧」クエリを指定して新規フォームを作成
 2)「氏名」フィールドをフォームに追加
 3)コントロールウィザードを使用して、「各人データ」サブフォームを組込
 (リンクフィールドには「氏名」を指定)
 ※サブフォームのサイズ等は必要に応じて設定して下さい※
  (特に設定しなくても割り当てはできます)
 4)コマンドボタンをメインフォームに追加
 5)コマンドボタンの名前に「実行」を指定
 6)「通番割当」としてフォームを(仮で)保存

マクロの設置:
 1)「通番割当」フォームをデザインビューで開く
 2)「実行」ボタンのプロパティシートを表示させる
 3)「クリック時」を選択してビルダボタン(「...」)をクリック
 4)「ビルダの選択」ダイアログ画面で、「コードビルダ」を選択
 5)既定で入力されている「Private Sub 実行_Click()」と「End Sub」を削除し、以下の文を貼付:

Private Sub 実行_Click()
  DoCmd.GoToRecord acForm, "通番割当", acFirst
  各人処理
  MsgBox ("終了しました")
  DoCmd.GoToRecord acForm, "通番割当", acFirst
End Sub

Sub 各人処理()
  Do While [NewRecord] = False
    DoCmd.GoToControl "各人データ"
    通番割当
    DoCmd.GoToControl "実行"
    DoCmd.GoToRecord acForm, "通番割当", acNext
  Loop
End Sub

Sub 通番割当()
  Do While [各人データ].[Form].[NewRecord] = False
    各人データ!通番 = 各人データ.Form.CurrentRecord
    DoCmd.GoToRecord , "", acNext
  Loop
End Sub

これで「通番割当」フォームを再保存した後、「実行」ボタンをクリックすれば、全てのデータに「通番」を割り当てられるはずです。


※念のため、必ずデータのバックアップを行ってから実行して下さい(汗)※
    • good
    • 0
この回答へのお礼

ありがとうございました。お蔭様ですべてのデータに連番を割り当てることができました。お手数をお掛けしました。

お礼日時:2005/08/15 22:55

No.3です。



私のいうところの「通番」(→通し番号)、No.4でRich53さん言われるところの「Class」の、割り当て方法についての一案ですが、そのテーブルをレコードソースとするフォームを作成し、「氏名」で絞り込みをかけた上で、レコード番号を「Class(通番)」に代入するマクロを組まれてはいかがでしょうか?

この回答への補足

ありがとうございます。すみませんがマクロの組み方を教えていただけないでしょうか。

補足日時:2005/08/15 00:00
    • good
    • 0

参考になればと思い書き込みします。


(1)Classというフィールドを追加します。
   データを見ればわかると思いますが、通常は1、2つ目のデータには2を
   書き込みます。
(2)このデータに対し、クロス集計クエリを適用します。
   Row---氏名
   Column---Class
   データ---データ1
        Firstを指定します。
        (英語版では Firstなんです)
---------
テーブル
---------
氏名データ1Class
あ11111
い22221
あ33332
う44441


----------------------
クロス集計クエリの結果
----------------------
氏名12
あ11113333
い2222
う4444

------------

問題は、Classの取り扱いです。
大変申し訳ないのですが、まだわかっていません。
でも、このClassをうまく処理できれば、クロス集計クエリで目的としたものは完成します。

どなたか、知恵を貸していただければと思います。

この回答への補足

ありがとうございます。個人ごとに集計したいデータの件数は、1件から20件ぐらいあります。総データでは2000件を超えています。ご指摘のとおりClassフィールドに書き込むデータの処理が問題ですね。

補足日時:2005/08/13 09:10
    • good
    • 0

今からそのテーブルに1フィールドを追加できますか?



もしそれができるなら、そこに氏名毎の通番を記録し、「クロス集計クエリ」を行えば、vhb1953さんがほしいという形にまとめられると思います。

1)クエリのデザインビューでクロス集計クエリを選択。
2)「集計」行で、「氏名」と「通番」に「グループ化」を、「データ」に「最小」を指定。
3)「行列の入れ替え」行で、「氏名」に「行見出し」を、「通番」に「列見出し」を、「データ」に「値」を指定。

・・・ただ、「通番」の割り当てが問題になりますが。
    • good
    • 0

あ 1111


あ 3333
い 2222
う 4444
という形でもいいなら、クエリで「並べ替え」を使うといいのではと思います。
クエリを作成するときに、「並べ替え」という欄がありますので、そこで昇順か降順が選べます。

1さんの仰っているのは、レポートのデザイン画面で、「グループ化」を使うということでしょうか。ツールバーに下のような絵のかいたボタンがあります。
│(=
│(=
これを押して、並び替えたいフィールドを選んだりしてやれば、1さんのような表をレポートで表示させることが出来ると思います。値の集計なども出来るようで、便利そうです。

アクセスに関しては、魔法使いの開発工房という、なかなかいいHPがありますので、URLはっときますね。
ここの2000の「基本操作を考える」の「レポート」のところなど、まとまっているので、見てみるとよいと思いますよ。

参考URL:http://www.mahoutsukaino.com/index.htm
    • good
    • 0

2つ目のようなテーブルの場合フィールドを無数に設定するのでたいへんです。


重複クエリーとか
フォームで氏名を1つ選択するとそれに一致するデータがリストアップされる
とかレポートで 
あ 1111
3333
い 2222
....

とか表示させる方法などはあります。

どうしてもならモジュールで作成するくらいでしょうか         

この回答への補足

レポートで表示させる方法は、どんな方法でしょうか。教えていただけないでしょうか。

補足日時:2005/08/12 16:51
    • good
    • 0

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