過去の桐井戸端BBS (桐ver.9)
24970 桐のフォームで生徒名簿からクラスごとの人数を一覧で見たい 悩み太郎 2004/02/19-20:23
前回はお世話になりました。
今回は別の業務で使っていた生徒名簿の表をフォームで出そうとしております。

フォームはグループ項目をもたず、全校生徒を一覧で表示し、ヘッダにクラスごとのコマンドボタンを配置し、
必要な時には絞り込んで使います。
項目の一つに在籍か休学か退学かを記入し、現在の在籍状況も表示しています。

在籍者のクラスごと、男女別人数、それを足した全校の合計数を一目でわかるような一覧が欲しいのです。

クラス 男  女  合計
2−1 20  15  35
2−2 25  15  40
1−1 20  15  35
1−2 20  20  40
A   20  20  40
B   20  15  35
合計  125 100  225   ---☆

このような一覧です。

@
一覧のヘッダにクラスごとの人数が出ればいいと思ったのですが、
過去ログから不可能だと判断しました。
正しいですか?それとも方法がありますか?

A
過去ログから学んで試してみたのは
転置集計して別の表に書き出し、それをフォームで表示。

変数宣言 整数{&履歴変数}
変数宣言 共通,実数{ &終了 },
表 "F:\在校生関連\生徒名簿.TBL",表番号=1
使用フォーム
条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
絞り込み [在学退学休学]{在学},文字比較方法=自動
転置集計条件登録 条件名="",{[在学退学休学],[クラス]},[性別],[クラス],集計種別=
件数,丸め=しない,見出し項目値並べ替え=しない,転置項目名並べ替え=降順
転置集計 条件名="",表番号=2
書き出し条件登録 表,条件名="","生徒人数書き出し.tbl",ファイル名変更=しない,{[在学退学休学],[クラス],[男],[女],[件数]}
書き出し 表,条件名=""
終了 表 1,2
フォーム呼び出し   生徒人数

このようにして自分の理解はイマイチなのですが動きました。

しかし、書き出したフォームに全校の合計を出す方法がわかりません( ---☆の部分)。表示する方法はあるのでしょうか?

書き出したものはフォームで表示せず、表のままでいいかと考えましたが
桐がわからない人でも動かせるシステムにしたいのです。
人数を確認したあと、元の生徒一覧のフォームに戻るようにしたいです。

よろしくお願いします。

24975 Re:生徒名簿からクラスごとの人数を一覧で見たい 佐田 守弘 2004/02/19-23:14
記事番号24970へのコメント
悩み太郎さん
クラス別の人数を集計するには、質問文に書いてある通り、転置集計を行って
別表に書き出し、のこ集計表を別のフォームで呼び出して表示するしかないと思います。
元のフォームの中に表示したいとしたら、サブフォームを作っておいて
通常はこれを非表示とし、必要な時だけに表示に切り替えて見せるという方法も有ります。
しかし、フォーム呼び出しで別フォームを呼び出す方が簡単ではないかと思います。

●集計を表示する方法
質問の主旨はこの転置集計表の縦の合計をどうやって表示するかですね。
このフォームにグループ項目を持たせれば、集計関数が使えるのですが、
特に集計項目もないので、その点をどうするかですね。

@無理やり集計項目を作る
全行に同じデータを入れたダミーの項目を作り、これを集計項目とすれば、
集計結果を表示するフォーム上で、「#合計」関数が使えます。
元の在籍表に余分の1項目(例えば学校名、あるいは適当な値を入れておく)を作り、
これを転置集計時のグループ項目に加えれば、全行同じ値の項目ができます。
この項目を使って形の上でグループ化すれば、#合計が使えると思います。

A転置集計結果を行集計しておく
転置集計した表を行集計し、これを集計表としてもう一度、別表に書き出します。
行集計の際に、クラス名の集計欄に「合計」の文字を入れる様にします。
そしてこの2度目に作った集計表をフォーム呼び出しで表示すれば、
一応目的通りのものができるかと思います。

佐田守弘(KS-00119)
24976 Re:生徒名簿からクラスごとの人数を一覧で見たい 悲しげ 2004/02/19-23:14
記事番号24970へのコメント
どもっ、悩み太郎さん

>しかし、書き出したフォームに全校の合計を出す方法がわかりません

フッタに合計を表示させるには、ヘッダまたはフッタにグループ項目を設ける必要があります
(表示タブで「画面表示する」のチェックを外せばこの項目値を表示させないことも可能)。
幸いにも(?)、本件の場合は[在学退学休学]項目の値が全て同じようなので(?)
これをグループ項目とすればよいと思われます。
その上で、この場合だと、フッタ部に #件数([男]) などをソースとする
グループ項目を設けて表示させることができるはずです。

ついでに云えば、

>絞り込み [在学退学休学]{在学},文字比較方法=自動

この部分は 絞り込み [在学退学休学]{"在学"},…(以下略) だと思います。
("在学"をダブルクォーテションで囲む必要あり)

もひとつついでに云えば

>一覧のヘッダにクラスごとの人数が出ればいいと思ったのですが、

う〜ん、これはけっこう難しいでしょうね。(^^;)

24977 訂正 悲しげ 2004/02/19-23:20
記事番号24976へのコメント
>その上で、この場合だと、フッタ部に #件数([男]) などをソースとするグル
>ープ項目を設けて表示させることができるはずです。

#合計([男])でしたね。(^^;)

24978 どうしてもヘッダ、フッタに表示するなら 佐田 守弘 2004/02/19-23:26
記事番号24970へのコメント
悩み太郎さん
どうしてもヘッダ・フッタにクラス別の人数を表示したいのであれば、集計表全体を
変数に読み込み、この変数値をソースとしたテキスト項目を作ることで、可能かと思います。
もちろん、集計してその結果を変数に読み込ませる、あるいは既存の集計表を読むためには、
イベントなどを使って行う必要があります。

しかし、生徒名簿を表示するフォームですから、できるだけ明細部を広く取りたい訳で、
果たして、全クラスの人数を表示できるスペースが確保できるかどうかの方が課題ですね。

技術的には可能でしょうが、多分、良い結果は得られないと思うのですが。
やはり、別フォームで表示する方がすっきりしていると思います。

佐田守弘(KS-00119)
24980 Re:生徒名簿からクラスごとの人数を一覧で見たい yamato 2004/02/20-08:28
記事番号24970へのコメント
>クラス 男  女  合計
>2−1 20  15  35
>2−2 25  15  40
>1−1 20  15  35
>1−2 20  20  40
>A   20  20  40
>B   20  15  35
>合計  125 100  225   ---☆
>
>このような一覧です。
必ずしも,桐でなくてもいいのではないかと思います。
私だったら,エクセルを使います。
1.すべて選択してコピー。
2.エクセルを起動する
3.貼り付ける
4.ピボットテーブル(縦を組,横,性別,データを件数)
これで,集計されます。

この方法をよく使います
24981 Re:生徒名簿からクラスごとの人数を一覧で見たい よご 2004/02/20-08:55
記事番号24970へのコメント
結合表でグループ化と集計関数を使えばそんなに難しくないと思いますけど。学年のないA組B組の意味が
よく分かりませんが。
25000 バッチリでした 悩み太郎 2004/02/21-12:48
記事番号24975へのコメント

集計項目を作ることで解決しました。
今回は悲しげ様がおっしゃっていたように「在学・休学・退学」を使いました。

ダミーを使って集計項目を作るというのは「なるほど〜」とCPTに向かって声を上げてしまいました。
頭がカチコチなので「今回の一覧表には集計項目はいらない!!」と決め付けていたのでした。
他のやりかけていた仕事にも使えそうです。


>どうしてもヘッダ・フッタにクラス別の人数を表示したいのであれば、集計表全体を
>変数に読み込み、この変数値をソースとしたテキスト項目を作ることで、可能かと
>思います。
>もちろん、集計してその結果を変数に読み込ませる、あるいは既存の集計表を読む
>ためには、イベントなどを使って行う必要があります。

本当はそうしたい!時間がある時に頑張ってみます。

>しかし、生徒名簿を表示するフォームですから、できるだけ明細部を広く取りたい訳で、
>果たして、全クラスの人数を表示できるスペースが確保できるかどうかの方が課題ですね。

担任は自分のクラス分だけ、別の表に書き出して使用しています。明細部は当校の場合、
あまり大きなスペースは必要ないので人数をすぐに確認できたらと思ったわけです。

とにかくあっという間に解決できました。ありがとうございました。
25001 Re:生徒名簿からクラスごとの人数を一覧で見たい 悩み太郎 2004/02/21-12:54
記事番号24981へのコメント
よごさん
>結合表でグループ化と集計関数を使えばそんなに難しくないと思いますけど。学年のないA組B組の意味が
>よく分かりませんが。

コースが違うのでこのようなクラス分けになっております。


25018 Re:生徒名簿からクラスごとの人数を一覧で見たい よご 2004/02/22-20:05
記事番号25001へのコメント
もう既に解決されているようなので必要ないかとは思いますが行き掛かり上(^^;)私の言いたかった方法を説明しておきますと。
“生徒名簿.tbl”を対象表とした実表を更新しない結合表、“生徒数.viw”を作ります。
[クラス]は生徒名簿.tblの項目をそのまま使い、[合計]は計算項目として#件数(["生徒徒名簿.tbl".クラス])とします。
属性メニューから「グループ化」を設定して定義を終了。編集に移ると、次のような表ができると思います。

クラス 合計
2−1 35
2−2 40
1−1 35
1−2 40
A   40
B   35

男女別の人数を出すにはもう一工夫必要です。「前回」どんないきさつがあったか分からないので
どんな表を作られているのか分かりませんが、私なら[性別]を整数にして男なら1、女なら未定義か0というようにします。
“生徒数.viw”に計算項目[男]を#合計(["生徒名簿.tbl".性別])で追加すると男子の人数が出ます。
女子の人数は[合計]から[男]を引けば良いわけですが、残念ながら集計を含む計算項目を同じ結合表の中で
さらに計算に利用する事はできないので、“生徒数.viw”を対象としてもう一つ結合表を作って2段階で集計します
(例えば“生徒数2.viw”とか)。
“生徒数.viw”のファイル属性で「実表の更新」のチェックを外しておけば"生徒名簿.tbl"が使用中であっても“生徒数
2.viw”を開くだけで生徒数の集計ができますので、“生徒数2.viw”を対象表にサブフォームを作ってやれば… 
とここまで来て結局ダミーのグループ項目がないと縦の合計が出せない事に気がつきました(^^;)。
転置集計で別の表に書き出すよりスマートかなと思ったんですが。
なお、[性別]が文字列の場合は表に計算項目を追加するか、結合表をどのみち2段階作るので
そこの1段階目で数値化してもよいと思います。
25029 Re:生徒名簿からクラスごとの人数を一覧で見たい 悩み太郎 2004/02/23-15:35
記事番号25018へのコメント
ありがとうございます。今回は転置集計でやってしまいましたが結合表を使うことも思いつかなかったです。
生徒のデータは全て一つの表でまかなっており(項目数70以上の大きな表)、見難い、入力し難い点を改善していこうとしています。
どのようにシステムを考えていけばよいのか、毎日頭をかかえて過ごしております。
また、壁にぶちあたった時は宜しくお願いします。


戻る