過去の桐井戸端BBS (桐ver.8)
11492 表のある列の違う値の数え方 桐谷賢治 2001/06/08-15:31
表中のある列の異なった種類の値の数を数えてレポートにその数を表したいのですが、出来るでしょうか?
わかりにくいので例を記します。

例 ある表のZという列があるとして、10行有るとします。
その値が上からA,A,B,B,B,B,C,D,Dだとします
このZの列には4種類の値がありますよね(A,B,C,D)
これをレポートの別の値の数を表す欄をつくり4個ありますと表示したいのですが
いかがでしょうか?
表で言えば単一化で絞り込むと4行になります。
11493 Re:表のある列の違う値の数え方 【多遊】 2001/06/08-19:40
記事番号11492へのコメント
>表で言えば単一化で絞り込むと4行になります。

ここまでできてたらあとは
絞り込み 単一化を行った時点で、組込み変数 &選択件数に
4が代入されてますのでレポートに&選択件数を張り付けます
印刷までの途中に他の作業が行われるような場合は、別の変数に
再度代入しておくといいですね

>例 ある表のZという列があるとして、10行有るとします。
>その値が上からA,A,B,B,B,B,C,D,Dだとします
>このZの列には4種類の値がありますよね(A,B,C,D)

※もし上記のような例で上記の様な答が必要な場合は未定義を
除く処理も入れて下さい

11494 Re:表のある列の違う値の数え方 ONnoji 2001/06/08-21:54
記事番号11492へのコメント
>表中のある列の異なった種類の値の数を数えてレポートにその数を表したい
>のですが、出来るでしょうか?わかりにくいので例を記します。
>
>例 ある表のZという列があるとして、10行有るとします。
>その値が上からA,A,B,B,B,B,C,D,Dだとします
>このZの列には4種類の値がありますよね(A,B,C,D)
>これをレポートの別の値の数を表す欄をつくり4個ありますと表示したいのですが
>いかがでしょうか?
>表で言えば単一化で絞り込むと4行になります。

桐谷賢治さん、こんにちは。

試したところ一応出来るようです。
決して分かりやすい方法ではありませんが参考になれば...と思います。

明細行と小計フッタで構成した単純なレポートの例です。
組み込み変数&STRを使います。

<表の下準備>
小計グループが変わる度に、組み込み変数&STRの値を初期化したいのですが、
レポートでは#直前値( )関数が使えません。
そこで直前値を格納した項目を新しく追加します。
新しい項目の項目名は何でもよいのですが、
説明の都合で[小計グループ項目の直前値]とします。

[小計グループ項目の直前値]を項目置換します。
#直前値([小計グループ項目],#未定義)
*必要ならば[小計グループ項目]で並べ替えた後に項目置換して下さい。

<レポートの作成>
一覧表のレポートで小計項目に[小計グループ項目]を指定して下さい。

(1)明細行の[テキスト]オブジェクトのソース

#条件選択(
[小計グループ項目]<>[小計グループ項目の直前値],#代入(&STR,[Z]+","),1,#条件選択(#対応番号(&STR,[Z])=0,#代入(&STR,&STR+[Z]+","),1,&STR))

重要:式に2回現れる "," のコンマ(,)は必ず半角文字を使用して下さい。
これは#対応番号( )関数を使うために必要です。
それ以外のコンマ(,)は半角全角のどちらでもかまいません。

(2)小計フッタの[テキスト]オブジェクトのソース

#文字数(&STR)-#文字数(#文字置換(&STR,",",#未定義))

重要:式に1回現れる "," のコンマ(,)は必ず半角文字を使用して下さい。
それ以外のコンマ(,)は半角全角のどちらでもかまいません。

以上のアプローチは(6/4)No.11424で幅田さんがお書きになっているものと基本的に同じです。

<レポートの行の評価と#代入( )関数のご注意です>
レポートが明細行の評価を1パスで行うのなら変数の加算は問題ありません。
しかし、2パス以上すると変数の加算は正しい値を求められません。
桐のバージョンやレポートの種類によって実際に1パスなのか2パスなのかは分かりません。
明細行ではなく集計行だったかもしれませんが、2パスしたバージョンの桐もあったかと記憶しています。
従ってレポートで#代入( )関数を用いる手法が常に有効かというと怪しくなります。

しかし、今回のように項目値の種類を判定する場合には行の評価が2パスしても結果は変わりません。

レポートで#代入( )関数を使うのは決して分かりやすい方法ではありませんね。
ですからあまりお勧めは出来ませんが...
試してみたところ上手くいきましたので参考になればと思いました。

なお、今回のように項目に値がひとつの場合はいいのですが、区切り文字で複数の値を項目に入力してある場合ではお手上げです。

11495 Re:表のある列の違う値の数え方 ONnoji 2001/06/08-22:22
記事番号11494へのコメント
桐谷賢治さん、こんにちは。

【多遊】さんが(6/8)No.11493で、未定義に関して注意をお書きになっていたので調べてみましたところ、やはり未定義もカウントしていました。

もしも[Z]の未定義をカウントしたくない場合には、
以下のように .and [Z]<>#未定義 を追加して下さい。

#条件選択([小計グループ項目]<>[小計グループ項目の直前値],#代入(&STR,[Z]+","),1,#条件選択(#対応番号(&STR,[Z])=0 .and [Z]<>#未定義,#代入(&STR,&STR+[Z]+","),1,&STR))

11497 Re:表のある列の違う値の数え方 ONnoji 2001/06/08-23:43
記事番号11495へのコメント
勘違いがありましたので訂正いたします。

>以上のアプローチは(6/4)No.11424で幅田さんがお書きになっているものと基本的に同じ
>です。

うっかりしていました。
No.11424の内容は行集計ですね。
幅田さん、すいませんでした。

No.11424と関連するかのような表現は誤りでした。

11509 Re:表のある列の違う値の数え方 桐谷賢治 2001/06/11-12:13
記事番号11492へのコメント
>表中のある列の異なった種類の値の数を数えてレポートにその数を表したい
>のですが、出来るでしょうか?わかりにくいので例を記します。
>
>例 ある表のZという列があるとして、10行有るとします。
>その値が上からA,A,B,B,B,B,C,D,Dだとします
>このZの列には4種類の値がありますよね(A,B,C,D)
>これをレポートの別の値の数を表す欄をつくり4個ありますと表示したいのですが
>いかがでしょうか?
>表で言えば単一化で絞り込むと4行になります。

皆さんご親切な回答ありがとうございました。
しかし申し訳有りませんが、私の勉強不足でいまいちできません
さらに具体的な例をだしますので、再度お願い致します。
今回の質問はレポートの請求書を作るのに活かしたくしました。
ある月のある会社宛の請求書の中にすべてのその月の品物を載せます。
その中で納品書NOという項目があります。その月の納品書枚数を入れたいのですが、
一つのものに対して一枚の納品書でしたら簡単ですが、一枚の納品書の中に3つ品物が
あったりしますのでこの計算をしたいのです。最初の例に合わせて記します。

ある月の請求書(品物は8個とします。)の納品書NOという項目の列の値が上から
1200、1200、1201、1201、1201、1255、1255、1280だとします。
この月の納品書枚数は4枚です。(1200、1201、1255、1280)
この4枚の4をレポート上に入れたいのですが。
お願いします。
11510 rpt「m枚目/全n枚中」出力 悲しげ 2001/06/11-13:01
記事番号11509へのコメント
どもっ、桐谷賢治さん
要するに、伝票のどうかに「m枚目/全n枚中」のように出力させたいと云うことだったのですね。
「ある会社」が1社だけならやや簡単かもしれませんけど、おそらくは複数あるでしょうから、
これは一括処理を組まないと難しいように思います。

ps:
難しい理由のひとつに、例えば伝票番号1200のものが必ずしも1枚に収まっているとは限らないこともあります。
とすれば、当該伝票rptで設定した行数と、各伝票毎の実行数とを比較して事前に枚数を算出しておく必要もありえます。

ps2:
類似の話題が過去ログにも有ったような・・・・。
って、2000/12/22にご本人が質問してましたね。(^^;)
11518 Re:もう少し詳しい情報を教えてください。 ONnoji 2001/06/12-10:46
記事番号11509へのコメント
>さらに具体的な例をだしますので、再度お願い致します。
>今回の質問はレポートの請求書を作るのに活かしたくしました。
>ある月のある会社宛の請求書の中にすべてのその月の品物を載せます。
>その中で納品書NOという項目があります。その月の納品書枚数を入れたいのですが、
>一つのものに対して一枚の納品書でしたら簡単ですが、一枚の納品書の中に3つ品物が
>あったりしますのでこの計算をしたいのです。最初の例に合わせて記します。
>
>ある月の請求書(品物は8個とします。)の納品書NOという項目の列の値が上から
>1200、1200、1201、1201、1201、1255、1255、1280だとします。
>この月の納品書枚数は4枚です。(1200、1201、1255、1280)
>この4枚の4をレポート上に入れたいのですが。
>お願いします。

桐谷賢治さん、こんにちは。

すいませんが、もう少し詳しい情報を教えてください。

(1)使用するのは桐V8でしょうか?

(2)レポートには[伝票]オブジェクトがあるのでしょうか?それとも[一覧表]オブジェクトがあるのでしょうか?

(3)[伝票](または[一覧表])オブジェクトのオブジェクトの属性の[伝票](または[一覧表])タブを確認して[セクション]がどうなっているか教えてください。
例:
ページヘッダ 2行
明細 1行
ページフッタ 1行

(4)納品書NOという表(.tbl)の項目は文字列型でしょうか?数値型でしょうか?

(5)4という数字はどのセクションの行に印字するのでしょうか?(ページヘッダ、ページフッタ)

(6)明細行に納品書NOを印字するのでしょうか?

(7)その他に情報があれば教えてください。
11544 Re:自己レスです ONnoji 2001/06/13-11:33
記事番号11518へのコメント
これは自己レスです。

<条件>
使用するのは桐V8である
レポートには[伝票]オブジェクトがある
ページヘッダ 2行
明細 1行
ページフッタ 1行

納品書NOという項目は数値型
明細行に[納品書NO]を印字する
4という数字はページフッタ行に印字する

<配置イメージ>
[PH]
[PH]  伝票NO(ラベル)
[D]   セル1(テキスト)
[PF]  セル2(テキスト)

セル1(テキスト)のソース
#計算(#条件選択(#明細連番=1,#代入(&STR,#str([伝票NO])+","),#対応番号(&STR,#str([伝票NO]))=0 ,#代入(&STR,&STR+#str([伝票NO])+","),1,&STR),[伝票NO])

セル2(テキスト)のソース
#文字数(&STR)-#文字数(#文字置換(&STR,",",#未定義))

<印字イメージ>

伝票NO
1200
1200
1201
1201
1255
1255
1280
4

<コメント>
やはり行の評価の順番が問題になりました。
セル2は[PF]の行に設定する場合はOKですが、
[PH]の行に置くと正しい値(4)を印字しません。
11545 Re:自己レスです ONnoji 2001/06/13-11:47
記事番号11544へのコメント
[納品書NO]と[伝票NO]がまぜこぜになっていました。すいません、訂正します。

<条件>
使用するのは桐V8
レポートには[伝票]オブジェクトがある
ページヘッダ 2行
明細 1行
ページフッタ 1行

納品書NOという項目は数値型
明細行に[納品書NO]を印字する
4という数字はページフッタ行に印字する

<配置イメージ>
[PH]
[PH]  納品書NO(ラベル)
[D]   セル1(テキスト)
[PF]  セル2(テキスト)

セル1(テキスト)のソース
#計算(#条件選択(#明細連番=1,#代入(&STR,#str([納品書NO])+","),#対応番号(&STR,#str([納品書NO]))=0 ,#代入(&STR,&STR+#str([納品書NO])+","),1,&STR),[納品書NO])

セル2(テキスト)のソース
#文字数(&STR)-#文字数(#文字置換(&STR,",",#未定義))

<印字イメージ>

納品書NO
1200
1200
1201
1201
1255
1255
1280
4

<コメント>
やはり行の評価の順番が問題になりました。
セル2は[PF]の行に設定する場合はOKですが、
[PH]の行に置くと正しい値(4)を印字しません。

11557 Re:もう少し詳しい情報を教えてください。 桐谷賢治 2001/06/13-17:40
記事番号11518へのコメント
ONnojiさんお願いします。

>
>(1)使用するのは桐V8でしょうか?
>
>(2)レポートには[伝票]オブジェクトがあるのでしょうか?それとも[一覧表]オブジェク
>トがあるのでしょうか?
>
>(3)[伝票](または[一覧表])オブジェクトのオブジェクトの属性の[伝票](または
>[一覧表])タブを確認して[セクション]がどうなっているか教えてください。
>例:
>ページヘッダ 2行
>明細 1行
>ページフッタ 1行
>
>(4)納品書NOという表(.tbl)の項目は文字列型でしょうか?数値型でしょうか?
>
>(5)4という数字はどのセクションの行に印字するのでしょうか?(ページヘッダ、ページフ
>ッタ)
>
>(6)明細行に納品書NOを印字するのでしょうか?
>
>(7)その他に情報があれば教えてください。

回答(1) V8です。 (2) [伝票]オブジェクトです
(3) PH 1行 明細 1行 PF 3行です。
PH 納品書NO(ラベル)
D  セル1(テキスト) ソース 対象表の[納品書NO]という項目
PF セル2(テキスト)
PF セル3(テキスト)
PF セル4(テキスト)
PFは他の列の金額や数量の合計に使っています。
  (4)数値型です。 (5)ページフッタに印字したいです。
  (6)印字します。
(7)すいませんが逆にまた質問してください。
以上お願いします。


11559 Re:もう少し詳しい情報を教えてください。 ONnoji 2001/06/13-17:59
記事番号11557へのコメント

>回答(1) V8です。 (2) [伝票]オブジェクトです
> (3) PH 1行 明細 1行 PF 3行です。
>PH 納品書NO(ラベル)
>D  セル1(テキスト) ソース 対象表の[納品書NO]という項目
>PF セル2(テキスト)
>PF セル3(テキスト)
>PF セル4(テキスト)
>PFは他の列の金額や数量の合計に使っています。
>  (4)数値型です。 (5)ページフッタに印字したいです。
>  (6)印字します。

桐谷賢治さん、こんにちは。

>D  セル1(テキスト) ソース 対象表の[納品書NO]という項目

セル1のソースの[式入力]で以下の式をコピー&貼り付けしてください。

#計算(#条件選択(#明細連番=1,#代入(&STR,#str([納品書NO])+","),#対応番号(&STR,#str([納品書NO]))=0 ,#代入(&STR,&STR+#str([納品書NO])+","),1,&STR),[納品書NO])

>PF セル2(テキスト)
>PF セル3(テキスト)
>PF セル4(テキスト)

どのセルでもよいのですがテキストのセルのソースの[式入力]で以下の式をコピー&貼り付けしてください。
(集計セルは駄目です、テキストに変更してください)

#文字数(&STR)-#文字数(#文字置換(&STR,",",#未定義))

項目名が微妙に違う場合には手直しをしてください。
たぶん、うまく印字されると思います。
11561 Re:もう少し詳しい情報を教えてください。 ONnoji 2001/06/13-18:10
記事番号11559へのコメント
>項目名が微妙に違う場合には手直しをしてください。
>たぶん、うまく印字されると思います。

納品書NOのNOですが、私の方では半角英文字で書いています。

桐谷賢治さんはNOを全角英文字で書いているかもしれませんね。

必要ならば、式を貼りつけた時に項目名を手直ししてください。
11577 Re:もう少し詳しい情報を教えてください。 桐谷賢治 2001/06/14-09:42
記事番号11559へのコメント
ONnojiさん 1発OKでした。
毎々ご丁寧にありがとうございました。
もう1つ甘えさせてください。請求書が1ページ以上になる際のその月の納品書枚数を印字させたいのですが、
方法ありますか?今回教えていただいたやり方ですと、そのページごとの枚数が印字されますので、すべてのページに
その月の請求分の納品書枚数を入れたいです。
お願いばかりで申し訳ございません。
11581 Re:もう少し詳しい情報を教えてください。 ONnoji 2001/06/14-12:41
記事番号11577へのコメント
>ONnojiさん 1発OKでした。毎々ご丁寧にありがとうございました。
>もう1つ甘えさせてください。請求書が1ページ以上になる際のその月の納品書枚数を印字させたいのですが、
>方法ありますか?今回教えていただいたやり方ですと、そのページごとの枚数が印字されますので、すべてのページに
>その月の請求分の納品書枚数を入れたいです。

桐谷賢治さん、こんにちは。

難問が解決したと思ったら、さらに難問ですね(笑)
レポートだけの機能では現状のような印字までが限界です。

>すべてのページにその月の請求分の納品書枚数を入れたいです。

レポートでは行を順番に評価していくので明細行に今回のような細工をしても、順番にしか納品書の枚数を数えられません。
仮に会社ごとに&STRの値を初期化しても、[PF]で印字される納品書の枚数は、1枚めと2枚めでは異なります。
(ここはポイントですからよくご理解くださるようお願いします。)

従ってレポートの明細行に細工をするアプローチを放棄して、別のアプローチを考えてみました。

仮の表(.tbl)を想定します(これは桐谷賢治さんの表と似ているはずです...)。

会社名 伝票NO
A     1200
A     1200
A     1201
A     1201
A     1255
A     1255
A     1280
:      :

(1)最初に、[会社名]と[伝票NO]で単一化します(絞り込み:単一化で条件名を作ると便利)。

A     1200
A     1201
A     1255
A     1280
:      :

(2)次に、行集計をします。

集計グループ: 大計で[会社名]
グループ項目で並べ替える: チェックを付ける
総計とる: チェックを消す

集計行(大計)の設定
[会社名]  [伝票NO]
#項目値  #件数

 A     1200
 A     1201
 A     1255
 A     1280
LA       4
 :      :

(3)[表示]メニュー→[集計行のみ]を実行

LA       4
L:       :

(4)書き出し:表で、[会社名]と[伝票NO]だけを選び書き出す。
*[書き出し表]の名前は任意のものを指定してください。例では total.tbl としました。
*[同名ファイルが存在するとき]の[上書き]に黒丸を付けると便利です。

(1)〜(4)を毎月請求書を印刷する前に実行しておきます。

<レポートのセルの設定>
>PF セル2(テキスト)
>PF セル3(テキスト)
>PF セル4(テキスト)

どのセルでもよいのですがテキストのセルのソースの[式入力]で以下の式をコピー&貼り付けしてください。
(集計セルは駄目です、テキストに変更してください)

#表引き([会社名],=,"total.tbl",[会社名],[伝票NO])

項目名とファイル名が違う場合には手直しをしてください。
11597 Re:御礼 桐谷賢治 2001/06/14-18:08
記事番号11581へのコメント
ONnojiさん 新しい方法もうまくいきました。両方を使わしてもらいます。
難題を解決でき感謝しております。ONnojiさんの色々な発想が浮かぶ柔軟な頭脳、すごいですね。
今回はどうも有り難うございました。

戻る