過去の桐井戸端BBS (桐ver.8)
7676 計算がされる行とされない行がある kayo 2000/09/15-13:34
単純な計算([A]+[B]+[C]+[D])を定義しているのに
計算がされる行とされない行があります
データ30件で5行しか計算されません
こんなことってあるんですか?

何処かで何かロックでもかけてしまったんでしょうか?
今までこんなこと一度もなかったのに…

7677 Re:計算が出来ません 宮城 2000/09/15-17:57
記事番号7676へのコメント
kayoさん、こんにちは。

計算されない行は、未定義値を含んでいたりしませんか?
未定義値に何を足しても未定義値です。

[A]+[B]+[C]+[D]のかわりに、#横合計([A],[D])を試してみてください。
7678 Re:計算が出来ません 幅田 2000/09/15-20:46
記事番号7677へのコメント
>[A]+[B]+[C]+[D]のかわりに、#横合計([A],[D])を試してみて
>ください。

もしくは、
ファイル→ファイル属性→未定義値項目処理
のところが未定義になっていると思います。
それをゼロにして再計算してみてください。

宮城さんのおっしゃるとおり、未定義値の項目を計算対象とすると結果も未定義となります。

そういう場合、ここのところをゼロにしておくと未定義値をゼロとして扱うのでちゃんと計算されます。

ただし、未定義値とゼロとを別物として扱いたい場合は未定義を選んでおきます。

なお、再計算は
編集→置換→再計算
です。

7686 未定義値とは 佐田 守弘 2000/09/15-23:42
記事番号7676へのコメント
kayoさん
計算できない原因は、宮城さん、幅田さんが書かれている様に、項目値に未定義値が含まれているためだと思います。
そして、その対策も御両名の方々が書かれている通りです。

●未定義値とは
さてここでは、未定義値だとどうして計算できないのか?を簡単に触れておきます。
既に過去ログの#4998「未定義値とは」(佐田 守弘)でも、未定義値とは何であるかを書いておりますので、
宜しければ過去ログを参照して下さい。

多少重複になりますが、簡単に付け加えます。

「0」(ゼロ)は、0という値がある数値です。分かり切った話ですが、1よりも1だけ少ない値が0です。
つまり、0は値なのです。
これに対して、未定義値とは値も何もない値(?)です。おそらくこの概念が分かりにくいので、混乱される方が多い様です。

詳しくは#4998に書いてありますが、値が0の場合には、表のデータに0と書いてあります。
これに対して、未定義値の値は、表の上には何も書かれていません(正しくは「何も記録されていない事が記録されている」が本当)。
つまり値そのものがもともと存在しないのです。だから値として利用しようがない項目なのです。
何も書かれていないという点では、数値の未定義値は、文字列のヌルストリング(""で記述する)と全く同じです。

分かりやすい説明になるか分かりませんが、日常的な話に喩えまと、空っぽのサイフは0の値です。
これに対して、持っていないサイフの中身は未定義です(こんな喩えで分かりますでしょうか)。

佐田守弘(KS-00119)
7708 Re:計算が出来ません 住友優二 2000/09/18-09:19
記事番号7678へのコメント
飛び入り更に
別件になってしまいますが。
支障あれば無視願います。

>なお、再計算は
>編集→置換→再計算
>です。

フォームを開いた時、同時に再計算してくれる方法無い物ですすかね
7709 Re:計算が出来ません 宮城 2000/09/18-10:48
記事番号7708へのコメント
住友優二さん、こんにちは。

フォーム開始イベントでどうですか? 項目値を最新値に置き直した後、
フォームを開けば、理屈の上ではうまくいくはず。

7710 Re:計算が出来ません hidetake 2000/09/18-11:53
記事番号7709へのコメント
イベントを使わなくとも、コマンドボタンに再計算を行う処理を書き込み、
フォーム開始時の実行コマンドにそのボタンを指定すれば巧くいかないかな?

ボタンは非表示でも良いし、伝票とか使っている場合は、
グループ解除してから置換し、その後で再度、
グループ再抽出などを行う必要があるかも知れないけど・・・

7714 未定義値の存在意義 maruhashi 2000/09/18-14:25
記事番号7686へのコメント
質問に対する答えからは、外れますが...
ここ数年、大学入試の採点ミス(それもコンピュータ処理による)ものが、
よく報道されていますが、その中に、こんなのがありました。
例えば、ABCDEFG7科目のうち5科目を選択する形式の入試で、
ABCFGで受験したのに、ABCDEで採点されたため、
当然、DEが0点扱いになって得点が不当に低くなってしまった。
これなど、受験していないDEの点数の扱いが、「0」ではなく、
「未定義値」になっていれば、集計時にエラーとなってチェックできたはず。
「0」と「未定義値」の処理を甘く見たプログラミングに問題があったはずで、
こんな例が、「未定義値」の存在意義ではないでしょうか。
7719 Re:未定義値の存在意義 KH 2000/09/18-22:43
記事番号7714へのコメント
 外れたついでと言ってはなんですが、さらに外れますがお許しください。
 大学入試センターでは大型コンピュータでのプログラミングでそのようなミスが起きたのでしょうが、
桐では簡単な関数でこのようなことはありえません。
我々が普段使っている表計算ソフトのエクセルなどもここのところがかなり難問山積の所があります。
つまり、桐で、ファイル→ファイル属性→未定義値項目処理のところを未定義にし、
前段で出てきた幅田さんの#横合計([**],[++])や#横件数([**],[++])、#横平均([**],[++])で
未定義値の項目をカウントせず結果を出します。
ここらへんのことを処理する時に桐ってすごいと思ってしまいます。
マイクロソフトの表計算ソフトであるエクセル(私は仕事上仕方なく職場だけで使っている)より
ずっと優れている優越感があります。
内心、「エクセル君、君は表計算なんだろう。なのにデータベースより計算しずらいとは。」
エクセルに長けた人たちが苦渋の表情をしているのですから。
 外れっぱなしでゴメンナサイ。反省。
7720 Re:未定義値の存在意義 佐田 守弘 2000/09/19-00:01
記事番号7719へのコメント
>外れたついでと言ってはなんですが、さらに外れますがお許しください。
外れに上乗りさせていただきます。
● 変数の不定値
太古の昔、fortran66(?)の頃だと思いますが、
「変数は線源直後は値が不定だから」
といった事を聞いた憶えがありました。
当時、この不定がどうして不定なのか分からなかったのですが、
今思い出してみると、メモリ上に変数の領域を割り当てるけど、その領域のメモリの値をリセットしない、という事の様ですね。
つまり、そのメモリ領域に前に書かれていた値がそのまま残っているので、
読み出すとどんな値になるかは不定であるという意味なのかと思いました。
BASICは、変数を宣言すると自動的に値が0にリセットされる仕様になっていて、
fortranに比べて「便利だなあ」と思ったりしていました。
桐の変数は、初期値を設定する事もできますが、無指定の場合には宣言時に0にリセットされますね。

●データベースのフィールド値
少々昔のdBASE時代にデータベースファイル(.dbf)を覗いた事がありました。
dBASEの場合には、固定フィールド型ですから、未入力の項目でも値を記録する場所は確保されていたはずです。
つまり、桐でいう未定義値の状態は存在せず、未入力状態でも0になっていたろうと思います。
これに対して、桐の場合には可変長形式で記録するので、未入力状態では本当に何も記録されていない状態になるんですね。
この状態が未定義値です。
桐の未定義値の存在は、どうやら桐のデータの記録形式に由来する様に思います。
ちなみに、Accessのデータファイルは調べておりません(どこに記録されているか不明)。
どなた様かAccessのデータファイルを調べた方がおられましたら、御報告いただけると有り難いです。

●表計算ソフトの未定義セルの扱い
MS-Excelの場合にも、average関数やcount関数は、未定義セルを除外して計算してくれると思いました。
また、isblank関数で未入力かどうかのチェックができると思いました。

佐田守弘(KS-00119)
7726 Re:未定義値の存在意義 KH 2000/09/19-09:46
記事番号7720へのコメント
>●表計算ソフトの未定義セルの扱い
>MS-Excelの場合にも、average関数やcount関数は、未定義セルを除外して計算してくれ
>ると思いました。また、isblank関数で未入力かどうかのチェックができると思いまし
>た。
>
 除外して計算はしてくれますが、すべて未定義値のところは、何も処置をしない状態ではエラーが出ています。
そのことをいいました、佐田先生言葉足らずですいませんでした。

戻る