過去の桐井戸端BBS (桐ver.8)
16976 タイル印刷で紙を切断したときに並べやすいように順番を変えて印刷したい SD 2002/08/14-13:45
どうもはじめまして。SDと申します。教員をしております。
いつもこの掲示板は大変参考にさせて頂いております。

さて質問なのですが、桐のタイル印刷を利用して、個人ごとの成績伝票を作成したいと考えております。
1枚を6分割(1列×6行)して、1枚に6名分が入る成績伝票を作成することはできたのですが、
普通に印刷すると、番号1〜6までの生徒が1枚目、番号7〜12までの生徒が2枚目といった風にに印刷されます(当たり前ですが)。
ただ、印刷が終了して、このままの状態で紙を切断すると、後で番号順に並び替えるのに一苦労してしまいます。

そこで、番号2の生徒は2枚目の先頭行、番号3の生徒は3枚目の先頭行のように印刷することで、
後で短冊切りしたときに、番号順に並ぶようにしたのですが、この方法が分かりません。

最初に表でうまく並べ替えを行ってから印刷しようとしたのですが、
生徒数は開講授業によって異なるので、うまく行うことができません。

桐初心者の私に、どなかたのお知恵を拝借できたらと思い質問致しました。
どうぞよろしくお願い致します。

なお、桐は最新版のVer8sp6です。
16979 Re:タイル印刷で指定の場所に印刷したい 悲しげ 2002/08/14-16:15
記事番号16976へのコメント
どもっ、SDさん

>そこで、番号2の生徒は2枚目の先頭行、番号3の生徒は3枚目の先頭行のように

例えば2枚目の先頭行を2番の生徒にしたいことは判りましたが、
ではこの場合、2枚目の2行目や3行目には何番の生徒が来るようにしたいのでしょう?
それと「短冊切り」とは?
1列縦長のものを更に縦に切るイメージなんですが(?_?)
その辺りも含めてもう少し具体例を挙げた方がいいでしょう。
16983 Re:タイル印刷で指定の場所に印刷したい うにん 2002/08/14-17:13
記事番号16979へのコメント
悲しげさん

重ねて切ったものをそのまままた重ねると番号順になっていることを希望しているのだと思います。
人数がいろいろなので、2行目以降のことを書かなかったのでしょう。
1ページに6人分とすると、例えば、10人なら
1枚目 1 3 5 7 9
2枚目 2 4 6 8 10
23人なら
1 5 9 13 17 21
2 6 10 14 18 22
3 7 11 15 19 23
4 8 12 16 20
といった具合でしょう。

10人の場合で明らかなように、途中に空白行が必要になるケースがあります。
一括処理でやってもいいですが、結合表と計算式でやってみます。

1.まず、最大人数分の番号表を作ります。(bangou.tbl)
整数項目が1つあればいいです。
そこに、100人なら100行レコードを作って、1から100まで数値を入れておきます。
2.印刷枚数を計算する結合表を作ります。結合元になる表は「seiseki.tbl」とします。
計算項目だけ2つ作ります。(kensuu.viw)
[人数]#MAX( ["seiseki.tbl".番号] )
[枚数]#切り上げ(#MAX( ["seiseki.tbl".番号] )÷6,0)
(MAXを使っているのは、生徒の番号が1から連番で空きがないのが前提だから)
3.以下、結果を得る結合表の定義をします。
bangou.tblとseiseki.tblとkensuu.viwを結合します。
bangou.tblの番号項目とseiseki.tblの番号項目を結合し、bangou.tbl側を
「全レコード抽出」にします。
bangou.tblとseiseki.tblを(すべて)表示します。
bangou.tblの番号項目に絞込条件を設定します。
  [A]≦["kensuu.viw".枚数]×6
(これでbangou.tblからの余分な空白行を除去します)
計算項目[印刷順]を作ります。
#MOD(["bangou.tbl".A]-1,["kensuu.viw".枚])×6
+(["bangou.tbl".A]-1)%["kensuu.viw".枚数]+1
4.以上で完了です。最後に作った結合表を開いて、[印刷順]で整列して
印刷すればOK。

初心者にはちょっと難しいかな(^^;


16984 Re:タイル印刷で指定の場所に印刷したい 悲しげ 2002/08/14-17:26
記事番号16979へのコメント
何となく想像できました(昔の蛍光灯)。

 1頁目   2頁目   3頁目 
生徒番号1 生徒番号7 生徒番号13
生徒番号2 生徒番号8 生徒番号14
生徒番号3 生徒番号9 生徒番号15
生徒番号4 生徒番号10 生徒番号16
生徒番号5 生徒番号11 生徒番号17
生徒番号6 生徒番号12 生徒番号18

となってしまうのを

 1頁目   2頁目   3頁目 
生徒番号1 生徒番号2 生徒番号3
生徒番号4 生徒番号5 生徒番号6
生徒番号7 生徒番号8 生徒番号9
生徒番号10 生徒番号11 生徒番号12
生徒番号13 生徒番号14 生徒番号15
生徒番号16 生徒番号17 生徒番号18

のように出力させたい、そして「短冊」とは、縦ではなく、
この画面上で云えば横にハサミを入れると。そうすれば、
おのずから番号順に揃う云う訳で。

と云うことで、後はタイル印刷用に、表データをどのように並べ替えるかと云う問題になりますね。
ま、一括処理を使うことになるのでしょうけど、
如何に汎用的かつエレガントに組み立てるか?
私はこれから出かけるので、他の方にお任せします。(^^;)

16985 Re:タイル印刷で指定の場所に印刷したい 悲しげ 2002/08/14-17:29
記事番号16983へのコメント
流石、うにんさん
(って、じっくり見てないけど)(^^;)
16990 Re:タイル印刷で指定の場所に印刷したい 悲しげ 2002/08/14-21:58
記事番号16984へのコメント
うにんさんの#16983は確かに結構難解そう。(^^;)
と云う訳で、一括処理の方が判りやすいかな、と試してみましたので、
以下に挙げておきます。(一応は挙動テスト済)
ただし、こちらも何だか結構入り組んで(判りにくくして)しまったみたい。(^^;)
---------------------------------------------------------------
変数宣言 長整数{&総頁数,&一頁の行数,&追加行数,&最大生徒番号,&i}
*----tblとrptのファイル名を仮に「タック振替.*」としてあります
表 "タック振替.tbl"
*----数値系の項目として[生徒番号]と[印刷順序]が有るとする
*  他には文字列項目として[生徒名]とか
並べ替え 条件名="生徒番号順"
*表形式編集 ガイド="当初の表の状態を確認して下さい"
*----並べ替えの条件としては、[生徒番号]昇順
メッセージボックス \
 "プレビュー確認" \
 ,"まず、初めの印刷並びを確認しておきます。\n" \
 +"(プレビュー画面で「分割変更」して沢山並べてみるとよい)" \
 ,アイコン=i,ボタン指定=1,制御文字展開=する,&実行リターン
*----この状態でプレビュー確認
レポート印刷 "タック振替.rpt",編集表=する,プレビュー=する \
,終了状態=&実行リターン
&一頁の行数=6
&総頁数=#ceil(#総件数/&一頁の行数)
&追加行数=&一頁の行数-#mod(#総件数,&一頁の行数)
ジャンプ 行番号=最終
&最大生徒番号=[生徒番号]
置換 終了状態=&実行リターン \
 ,[印刷順序]=#cond(#直前値([印刷順序],0)=&総頁数,1 \
          ,1,#直前値([印刷順序],0)+1)
if(&追加行数<&一頁の行数)
 繰り返し &i=1,&追加行数
  行追加 終了状態=&実行リターン \
      ,[生徒番号]=&最大生徒番号+9000-&i \
      ,[生徒名]="ダミー" \
      ,[印刷順序]=&総頁数+1-&i
 繰り返し終了
end
並べ替え 条件名="印刷順序順"
*----並べ替えの条件としては、[印刷順序]昇順
メッセージボックス \
 "プレビュー確認" \
 ,"今度は振替後の印刷並びを見てみましょう。\n" \
 +"(プレビュー画面で「分割変更」して沢山並べてみるとよい)" \
 ,アイコン=i,ボタン指定=1,制御文字展開=する,&実行リターン
*----この状態でプレビュー確認
レポート印刷 "タック振替.rpt",編集表=する,プレビュー=する \
 ,終了状態=&実行リターン
終了
---------------------------------------------------------------
tblとrptの名前、項目名、並べ替え条件名を合わせてもらえば、
このままで動くとは思います。
16991 重ね切り 佐田 守弘 2002/08/14-22:04
記事番号16983へのコメント
うにんさん
>重ねて切ったものをそのまままた重ねると番号順になっていることを希望しているの
>だと思います。人数がいろいろなので、2行目以降のことを書かなかったのでしょう。

成る程!充分にあり得る要望ですね。
詳細はうにんさんがか書かれているので割愛しますが、要するに印刷順序をうまく
計算式で作り、その順序で印刷すれば、目的の事はできるはずです。
----------------------------------------
類似の話ですが、私の言葉でいえば、「折閉じ印刷」ですね。
要するに、例えばA4横向きで、左右に段組風に割り付けて印刷します。
それを中央で折ったものを重ねると、左側からページ順に並ぶという割り付けです。

これは素人に見せてもインパクトないですね。
「これって、ワープロで印刷しただけじゃん。誰だってできるよ!」

でも版組みの専門家は大体ビックリします。
「これって、桐でできるの・・・・・。」 「うん、できるよ。一括処理使うけど」

佐田守弘(KS-00119)
16995 Re:タイル印刷で指定の場所に印刷したい うにん 2002/08/15-00:54
記事番号16990へのコメント
悲しげさん

>うにんさんの#16983は確かに結構難解そう。(^^;)

なるほど、並べ替えに生徒番号も使えば、結合表の計算式も
#MOD(["bangou.tbl".A]-1,["kensuu.viw".枚数])+1
だけでいいですね。
要するに、何ページ目に印刷すべきかだけ計算すればいいわけで。

16996 Re:タイル印刷で指定の場所に印刷したい pokopon 2002/08/15-03:58
記事番号16976へのコメント
SDさん こんにちは

悲しげさん>
>私はこれから出かけるので、他の方にお任せします。(^^;)

同業者の様ですし、「私はこうして対応している」ということで、バトンを引き受けます。(^^ゞ
と、思っていたところ・・・・ご帰還のようで。(^_^)
殆ど解決していましたね。

この手の問題は、学校関係では良く使う手法です。
手持ちの一括から、少々アレンジしたものを紹介します。
うにんさんのような「高尚」な手段ではありませんけど、汎用的に使えます。
(悲しげさんの手法とほぼ同等です)

[印刷順] 整数 の項目を新規に作成して下さい。
また、
[組]  整数
[番号] 整数
はすでにあるものとしています。
また、
レポートファイル(タイル)は、[組]で改ページの指定をしてあることが前提です。


/* -------------------------------------- */
/* タイル印刷 1×N行 注:作業後は、選択を全て解除後、表整理をするか、破棄終了
する */
 変数宣言 固有,整数 ,{&min,&max,&cnt1,&cnt2,&N,&page,&addrec}
 変数宣言 固有,文字列,{&rptfile}
/* もし、レポートファイル名が固定、あるいは分割数が固定されたレポートファイルなら、直接変数へ値を代入 */
/* その場合には、ファイル名入力、キー入力コマンドの行をコメントアウトする */
* &repfile = "hogehoge.rpt"
* &N = 6
 ファイル名入力 初期値 = "*.rpt",プロンプト = "レポートファイル名を選択してください" ,&rptfile
 キー入力 ( 10 , 10 ) , プロンプト = "分割数を入力(中止:ESC)" , モード = 確定 , 上書き = する , 初期値 = 0 , &N
 条件 ( &N < 1 ) 終了
 項目集計 [組]
 &min = &最小値 , &max = &最大値
 繰り返し &cnt1 = &min , &max 
  絞り込み [組] = &cnt1
  if ( &選択件数 )
    &page = #INT((&選択件数-1)/&N) + 1
    &addrec = &page*&N - &選択件数
    並べ替え {[番号]昇順}
    if ( &addrec )
      繰り返し &cnt2 = 1 , &addrec
        行追加 [組] = &cnt1 , [番号] = 9999
      繰り返し終了
    end
    置換 [印刷順] = #連番
    置換 [印刷順] = [組]*1000 + &N*#MOD([印刷順]-1,&page) + #INT(([印刷
順])/&page) + 1
  end
  絞り込み解除 1
 繰り返し終了

 並べ替え {[印刷順]昇順}
 レポート印刷 &rptfile , 編集表 = する , プレビュー = する
 絞り込み [番号] = 9999
 行削除 *
 絞り込み解除 1
 並べ替え {[組]昇順,[番号]昇順}
 終了
/* -------------------------------------- */


16997 Re:つづき pokopon 2002/08/15-03:58
記事番号16996へのコメント
続きです・・・・・

文字数の関係で、途中改行されている場合には、適宜なおしてください。

実行は、目的の成績ファイルを開いた状態で、目的に合わせて処理・絞り込みを行った後、そのまま実行して下さい。

グループ単位(組単位)での生徒数の計算、ダミーの空白行を挿入しなければならないなど、面倒な点がありますが、
基本的に、印字順にデータを並べ替えて(不足分は追加して)、そのまま印字します。

上記の一括なら、
・絞り込んだ生徒(必ずしも連番である必要はない)でも、クラス単位で印字できる。
 ばらばらでも良いし、虫食いに絞り込んでも同様の処理をします。
 成績で●●点以上とか、欠席した生徒は除くとか、男子だけとかでもよいです。
 また、番号も連番でない場合にも対応可能です。
 (男子は1〜、女子は50〜とインデックス化している学校もありますので)
 ただし、A組、B組、桃組、りす組・・・・などの文字列の組名は適宜数値化して下さい。
 勿論、学年一斉に出力も可能です(クラス単位)。
・他のレポート(タイル)にもそのまま汎用的に使えます。レポートファイル名とタイル数をその都度入力します
(固定した処理なら、変数に代入しておく)。
・印字用の表ファイルを新規に作成せずとも、今使っている表ファイルに、[印刷順]の項目を追加するだけで使えます。

注意事項として、
空白行を追加していますので(番号は9999と一応ありえない番号で)、作業後に削除しております。
印刷すればするほど、表ファイルのサイズが大きくなりますので、適度に表整理するか、印刷後は「破棄終了」をして下さい。
(このあたりがスマートではないけど、行削除コマンドが含まれるため心配ですから、破棄終了をオススメします)
また、印刷前に、一応プレビューで確認してから印刷して下さい。
エラー等の処理は一切しておりません。


(といっても、この短冊の並べ替えくらい、HR担任の仕事としても、生徒把握になって良いと思うんですけどね。
当方では、あえて出力順として、名簿順の並べ替えは担任にお願いしています。並べ替えをしたもを渡しても、
先生なんか見やしません。
バラバラに渡すから、並べ替えの最中に生徒個々人のデータを見ることになります)

16999 Re:分割数 横(X)×縦(Y) pokopon 2002/08/15-11:28
記事番号16997へのコメント
蛇足ながら、
分割数 横(X)×縦(Y)にもそのまま対応可能です。
レポートファイルのデータの流れる方向を「縦」にしておいてください。

分割数の入力の時点で、横(X)×縦(Y)をそのまま入力して下さい。
例えば、横3、縦5の場合、 3×5=「15」 と入力します(Nの値をセット)

短冊切りの場合には、最初「横方向」にはさみを入れ、重ね合わせ、
次に縦を裁断して、さらに重ね合わせればよいです。
くれぐれも、横から裁断を!! 縦だと、後々面倒です。 (^_^) ← 経験者


17005 Re:タイル印刷で指定の場所に印刷したい ONnoji 2002/08/15-16:07
記事番号16976へのコメント
SDさん

>さて質問なのですが、桐のタイル印刷を利用して、個人ごとの成績伝票を作成した
>いと考えております。
>1枚を6分割(1列×6行)して、1枚に6名分が入る成績伝票を作成することは
>できたのですが、普通に印刷すると、番号1〜6までの生徒が1枚目、番号7〜1
>2までの生徒が2枚目といった風にに印刷されます(当たり前ですが)。
>ただ、印刷が終了して、このままの状態で紙を切断すると、後で番号順に並び替え
>るのに一苦労してしまいます。
>そこで、番号2の生徒は2枚目の先頭行、番号3の生徒は3枚目の先頭行のように
>印刷することで、後で短冊切りしたときに、番号順に並ぶようにしたのですが、こ
>の方法が分かりません。
>なお、桐は最新版のVer8sp6です。


(1)表に[連番]、[列]、[深さ]、[順番]という数値項目を用意して、

(2)次の一括を実行して、

 変数宣言 固有,整数{ &ラベルの数, &紙数 }
 &ラベルの数 = 6 /*  任意の値 */
 &紙数 = #切り上げ( #総件数 / &ラベルの数, 0)
 置換 [連番] = #連番 - 1
 置換 [列]  =  1 + #int( [連番] / &紙数 )
 置換 [深さ] = #mod( [連番], &紙数 )
 置換 [順番] = #cond( [深さ] = 0,[列],1,[列]+[深さ] * &ラベルの数
 )

(3)実行終了したら、[順番]で並べ替えて、レポート印刷すればOKです。

*------------------------------------*

もしも、一括を使わないで手操作で行う場合は、

(1)印刷対象の行数をラベルの数で割った値を切り上げた値をメモします(必ず小数を切り上げます)。
(2)項目置換で [連番]を #連番 - 1
(3)項目置換で [列] を  1 + #int( [連番] / メモした値 )
(4)項目置換で [深さ]を #mod( [連番], &紙数 )
(5)項目置換で [順番]を #cond( [深さ] = 0,[列],1,[列]+[深さ] * 6 )
  ※6はラベルの分割数です。
(6)[順番]で並べ替えて、レポート印刷

なお、この方法は連番を振りながら作業するので、項目計算式では実現不可能です。

17006 Re:タイル印刷で指定の場所に印刷したい うにん 2002/08/15-16:25
記事番号17005へのコメント
ONnojiさんは No.17005「Re:タイル印刷で指定の場所に印刷したい」で書きました。

ばっさり略。

>なお、この方法は連番を振りながら作業するので、項目計算式では実現不可能です。

計算式は作れると思いますが、それよりも空白行を追加する処理がないと、
順番が 1 2 3 4 5 7 8 9 10 11
のようになるケースが出てくるので目的を達成できません。

17007 Re:タイル印刷で指定の場所に印刷したい ONnoji 2002/08/15-17:09
記事番号17006へのコメント
うにんさんは No.17006「Re:タイル印刷で指定の場所に印刷したい」で書きました。
>ONnojiさんは No.17005「Re:タイル印刷で指定の場所に印刷したい」で書きました。
>ばっさり略。

うにんさん、こんにちは。

>>なお、この方法は連番を振りながら作業するので、項目計算式では実現不可能です。
>計算式は作れると思いますが、それよりも空白行を追加する処理がないと、

少し説明不足のようでした。(^^ゞ
No.17005で説明した方法は、連番を振りながら作業するので、項目計算式では実現不可能です。
という意味であります。

ということで、この問題を解決する方法全体を指しているのではありません。
表現が適当でなく誤解されたようですので、上のように訂正いたします。m(__)m

>順番が 1 2 3 4 5 7 8 9 10 11
>のようになるケースが出てくるので目的を達成できません。

うにんさんのおっしゃる空白行に関して、
(私はきっと正確に理解していないと思いますが…)
No.17005の方法では[連番]は新たに振るようにしておりますので、問題ないかと思いますが…
たぶん(^^ゞ

17008 Re:タイル印刷で指定の場所に印刷したい うにん 2002/08/15-17:38
記事番号17007へのコメント
ONnojiさん

こんにちは〜。お盆休みももうじき終りだなT_T
休みの日にこんなことしてる私っていったいT_T

>>順番が 1 2 3 4 5 7 8 9 10 11
>>のようになるケースが出てくるので目的を達成できません。
>
>うにんさんのおっしゃる空白行に関して、
>(私はきっと正確に理解していないと思いますが…)
>No.17005の方法では[連番]は新たに振るようにしておりますので、問題ないかと思いますが…

これは実際に6分割を10レコードで(7とか31でもいいですが)やってみるとわかりますが、
[順番]の値が連続にならないのです。1枚目の6列目は空白になるのが正しいので、
[順番]の値としてはいいのですが、並べ替えただけで印刷してしまうと、
一枚目 1 3 5 7 9 2
二枚目 4 6 8 10
となってしまうので思ったとおりにならないのです。2番を二枚目の一列目に持っていくために空白行が必要というわけです。
他の方の一括処理には空白行追加の処理が入っています。私の方法は、あらかじめ十分な
行数をもった表と結合することで空白行を発生させています。

17009 Re:タイル印刷で指定の場所に印刷したい ONnoji 2002/08/15-18:27
記事番号17008へのコメント
うにんさん、こんにちは。

ばっさり略。

>>うにんさんのおっしゃる空白行に関して、
>>(私はきっと正確に理解していないと思いますが…)
>>No.17005の方法では[連番]は新たに振るようにしておりますので、問題ないかと思いますが…
>これは実際に6分割を10レコードで(7とか31でもいいですが)やってみるとわかりますが、
>[順番]の値が連続にならないのです。1枚目の6列目は空白になるのが正しいので、
>[順番]の値としてはいいのですが、並べ替えただけで印刷してしまうと、
>一枚目 1 3 5 7 9 2
>二枚目 4 6 8 10
>となってしまうので思ったとおりにならないのです。2番を二枚目の一列目に持っていくために
>空白行が必要というわけです。
>他の方の一括処理には空白行追加の処理が入っています。私の方法は、あらかじめ十分な
>行数をもった表と結合することで空白行を発生させています。

ご説明ありがとうございます。

空白行の意味よく理解しました。

そうですね、
No.17005で説明した方法は、ご指摘の6分割を10レコードは駄目でした。

印刷する行数が、ラベルの数の倍数(例えば6の倍数)になっていない場合、
不足分の空行を追加するということのようですね。(^^ゞ

No.17005はボツですね。失礼しました〜。(^^ゞ

17010 Re:タイル印刷で指定の場所に印刷したい 悲しげ 2002/08/15-21:19
記事番号16995へのコメント
そうか、先に空白行を追加しておく方が簡明ですね。(cf.pon氏)
と云う訳で、先の処理を14行まで縮めました。
----------------------------------------------------------
変数宣言 長整数{&総頁数,&一頁の行数=6,&余り,&追加行数,&最大生徒番号,&i}
表 "某表.tbl"
並べ替え 条件名="生徒番号順"
&総頁数=#ceil(#総件数/&一頁の行数),&余り=#mod(#総件数,&一頁の行数),&追加行数
=#cond(&余り>0,&一頁の行数-&余り,1,0)
ジャンプ 行番号=最終
&最大生徒番号=[生徒番号]
if(&追加行数>0)
 繰り返し &i=1,&追加行数
  行追加 [生徒番号]=&最大生徒番号+9000+&i,[生徒名]="ダミー"
 繰り返し終了
end
置換 [印刷順序]=#cond(#直前値([印刷順序],0)=&総頁数,1,1,#直前値([印刷順序
],0)+1)
並べ替え 条件名="印刷順序順"
レポート印刷 "某タック.rpt",編集表=する,プレビュー=する
----------------------------------------------------------
以上です。一寸しつこかったかもしれませんが、変数名を含めて判り易いでしょ?
(判りやすさだけが取り柄、とか云ってみる)(^^;)

あ、でも、次の2行を追加しておいた方がいいかも。16行になるけど(^^;)
---------------------------
絞り込み [生徒名]="ダミー"
条件(&選択件数>0) 行削除 *
---------------------------
17012 貴重な意見ありがとうございます。 SD 2002/08/15-22:06
記事番号16976へのコメント
みなさま、どうもはじめまして。
1日空けて、この掲示板をのぞいてみたら、多くの方から貴重な意見がたくさん投稿されており、
改めてこの掲示板の素晴らしさを実感した次第です。

さて、少し説明不足であったようですが、うにんさんが以下におっしゃった通りの要望でした。、

>重ねて切ったものをそのまままた重ねると番号順になっていることを希望しているの
>だと思います。人数がいろいろなので、2行目以降のことを書かなかったのでしょう。

うにんさんに教えて頂いた結合表+計算式によるやり方も、悲しげさんに教えて頂いた一括処理によるやり方も、
「うーん、なるほど」と唸っている次第です。
どちらも丁寧に分かりやすく教えて頂いたので、初心者の私でも何とか理解可能なようです。
今回は、一括処理のほうで、処理してみようと考えております。

今回は、「短冊切り」など、わかりにくい表現を用いたにもかかわらず、その意図をくんでくださるだけでなく、
貴重な解決方法まで教えて頂いて、本当に感謝しております。

この掲示板は、桐を愛好する人々にとって、本当に価値あるものだと再確認致しました。

皆様方、本当にありがとうございました。

17013 Re:タイル印刷で指定の場所に印刷したい pokopon 2002/08/15-22:38
記事番号17010へのコメント
悲しげさん お久しぶりです。
その後、ゴキブリは出ていますか? (^^ゞ

>(cf.pon氏)
せめて、pokoくらいにして下さいよ。

さて、
>置換 [印刷順序]=#cond(#直前値([印刷順序],0)=&総頁数,1,1,#直前値([印刷順序],0)+1)

これで、どうして印刷順序になるのか??でしたので、トレースさせてもらいました。
なる程ね、[印刷順序]には、印刷されるページだけが置換されていました。(^_^)
後は、どうせ「生徒番号順」に並んでいるのですから、順番に印刷ページを増加させる訳ですね。
「レコード順でXX番目の人はYYページに印刷」という意味ですね。

うまいうまい!! こんな方法もあるんですね〜。

私はどうも職業柄、「数列」を駆使して?印刷順序を考えてしまいます。
>置換 [印刷順] = #連番
>置換 [印刷順] = [組]*1000 + &N*#MOD([印刷順]-1,&page) + #INT(([印刷順])/&page) + 1
数学の得意な人なら、この数列、意味が解ると思うんですけど。
(これを導き出すのに、結構苦労したんだけどね (^_^) )

必ずしも印刷順に番号をふらずとも、結果的にそう並んでいればよいわけですからね。
また、一つ勉強させてもらいました。
どうも、どうもです。

17014 Re:タイル印刷で指定の場所に印刷したい 悲しげ 2002/08/15-22:58
記事番号17013へのコメント
どもっ、pokoponさん

>>(cf.pon氏)
>せめて、pokoくらいにして下さいよ。

あ、大変失礼いたしました。<(_ _)>
私はずーっとponpokoさんだと信じていました。ジブリのアニメ『平成たぬき合戦・・・』の
語呂がスリコミされてでもいるのでしょうか。
そうか、「その逆」と覚えればいいのかも?
今後はなるべくpokoponさんと書くように努力はいたしますが、
ひょっとして自信は無かったりします。(^^;)



余談ついでに

>その後、ゴキブリは出ていますか? (^^ゞ

今年は「内地」とはウラハラに、異常なほどの冷夏です。
しばしば寒いっす。やっぱり、夏は暑くなくっちゃ。(;_;)
と云う訳ではありませんが、私は少なくともここ20年ほど
ゴキブリに遭遇したことはありません。



とこれだけではナンですので、桐関連を付記しておけば。(^^;)
繰り返しループは(最近マシン性能が上がったのであまり
目立ちませんが)やはり遅いので、なるべく一筆の置換計算式で済ませたいと云うことで、
大昔にNifty桐たんすで如何に短い置換計算式で済ませるか、なんて競い合いをしたことを思い出しました。
まだ私が桐初心者〜中級者だった頃です。
今更「私は中級者です」と云う訳に行かないので、
一時冗談半分に「達人28号」なんてハンドルを使ったこともあったり。
おっと、いけねぇや、また余談だ。(^^;)
17015 Re:貴重な意見ありがとうございます。 うにん 2002/08/16-00:43
記事番号17012へのコメント
>今回は、一括処理のほうで、処理してみようと考えております。

というわけで、めでたく解決しそうですが、Onnojiさんのを参考に計算式だけで
やってみましたので一応投稿しときます。

空白行を追加する代りに、空白を最終頁にまとめるようにしてみました。
つまり、印刷して裁断して最後に重ねるとき、一番下が1枚だけ白紙の場合があるので
それを取除く必要があります。
 6列で10人の例
一枚目 1 3 5 7 9 10
二枚目 2 4 6 8

同じ部分計算式が何度も出てくるので、もうちょっと整理できそうですが。
印刷したい表に以下の項目を追加します。

項目名 データ型 項目計算式
連番  整数   #直前値([],-1)+1
列   整数   #FLOOR([連番]÷#CEIL(&件数÷6))
頁   整数   #MOD([連番],#CEIL(&件数÷6))
修正列 整数   #COND([列]<#MOD(&件数,6),[列],1,#FLOOR(([連番]-#CEIL(&件数÷6)
×#MOD(&件数,6))÷#CEIL((&件数-#CEIL(&件数÷6)×#MOD(&件数,6))÷(6-#MOD(&件数
,6))))+#MOD(&件数,6))
修正頁 整数   #COND([列]<#MOD(&件数,6),[頁],1,#MOD([連番]-#CEIL(&件数÷6)×
#MOD(&件数,6),#CEIL((&件数-#CEIL(&件数÷6)×#MOD(&件数,6))÷(6-#MOD(&件数,6)))))
修正順番整数   [修正頁]×6+[修正列]

あいにく#総件数を使うと項目再計算がうまくいかないようなので、組込み変数の&件数を使っています。
よって、使用手順は
1.最終的に並べたい順に並べ替え(今回は生徒番号ですね)
2.印刷したいものだけ絞込み(すべて計算式で出すので生徒番号が連続していなくてもOK)
3.任意の項目で項目集計(これで印刷件数が&件数に入ります。&件数の代りに&選択件数を
使えばこの手順が要らないのでその方がよかったかも)
4.計算項目を再計算
5.[修正順番]の昇順に並べ替え(この項目はこのためだけなので、[修正頁][修正列]順の
並べ替え条件を作っておいてそれを使えば不要)
6.印刷する
となります。

計算式の中の「6」を変更すれば任意の分割数に対応できるはずです。

変数を使っているので、変数値が0のときに再計算が起ると0除算エラーになるのがちょっといや。

17016 Re:余白行の追加無し&最終ページの紙の取り除き無し pokopon 2002/08/16-03:10
記事番号16976へのコメント
悲しげさんの方法やうにんさんの方法をず〜っと眺めていて、ふと浮かんだのですが、
次では駄目でしょうか?

次の項目と計算式を作ります。

[連番]  整数 #直前値([連番],0)+1
[印刷順] 整数 #COND(&件数<>0 .and &件数<>#U,6*#MOD([連番]-1,#CEIL(&件数/6))
+#INT([連番]/#CEIL(&件数/6))+1,1,#U)
[ページ] 整数 #CEIL([印刷順]/6)

また、レポート(タイル)の方には、[ページ]の項目で「改ページ」を指定しておきます。

1.必要な生徒だけ選んで(勿論、全員でもよいけど)
2.印字したい順に整列
3.項目集計(生徒の総数を調べる)
4.[連番]でも良いので、置換処理(再計算)
5.[印刷順]で昇順に整列
6.印刷・・・・・

これで、どうでしょう? 3〜6は「履歴」にでも登録しておけば楽ですね。

分割数を変更したいなら、上記の「6」を適当な値に変更すればよいです。
横(X)×縦(Y)の分割なら、掛け算した値に変更すればよいです。
余白行の追加はありません。
裁断後の最後の空ペーパーも取り除かなくてもよい。
(とはいっても、重ねた場合に、最後にごそっとダミーが残りますけど)


戻る