過去の桐井戸端BBS (桐ver.8)
17476 契約日の項目から自動的に契約日数を計算したい あかね 2002/10/08-18:05
過去の投稿も見たのですが、よく分からなかったので誰か教えてください。
項目に契約日があり契約日数(○年○ヶ月○日)を出したいのですが
どの様な関数を使えばよろしいのでしょうか?
どなたか教えてください!
17481 Re:桐初心者です!教えてください! 佐田 守弘 2002/10/09-01:14
記事番号17476へのコメント
あかねさん
質問内容に不明点がいくつかあり、このままではお答えできないので、
以下の様な前提を置いてコメントします。
【前提】
・契約日数:項目[契約日]から今日までの契約日数(年月日)を求める。
・契約日:日時型で[契約日]とします。
・結果の扱い:項目値に書き込むのか、単に値を求めればよいのか不明
 なので、取り敢えず、経過日数を求める式だけを考えてみます。
・どの様なケースで利用するか
 表編集で項目計算式で使う場合には、変数宣言の問題が残りますが、
 対策は割愛します。

●経過年月日数の計算
これはできそうな関数がありそうで、ありません。
ですから、いくつかの関数を組み合わせた計算式を作ります。
〔考え方〕
まず、年数は#年数関数で簡単に求められます。月数は[契約日]にこの
年数を加えた日付から現在日までの月数を#月数で求めます。
同様にその日付に求めた月数を加えた日付から、現在日までの日数を求めます。
後はこれらを組み合わせて、日付の文字列を作ります。
以上異を式で書くと次の様になります。

〔計算式〕
#計算(#set(年,#年数([契約日],#日時値)
   ,#set(日付,#年数加算([契約日],&年)
   ,#set(月,#月数(&日付,#日時値)
   ,#set(日付,#月数加算([契約日],&月)
   ,#set(日,#日数(&日付,#日時値)
   ,#文字列(&年)+"年"+#文字列(&月)+"ヶ月"+#文字列(&日)+"日"
   )

なお契約日が文字列型の場合には、#日時値の代りに#年月日を使うなど、
多少の修正が必要です。
また計算式の中で、日時型の変数「&日付」を使っています。
この変数は、予め何らかの方法で宣言しておいて下さい。
宣言してないとエラーになります。
一括であれば一括の中で宣言できますし、フォームも局所変数が使えます。
問題は表編集だけの場合です。

なお、[契約日]が文字列型の場合には、多少状況がちがいます。

佐田守弘(KS-00119)
17512 Re:桐初心者です!教えてください! あかね 2002/10/10-20:17
記事番号17481へのコメント
レス有難うございました。

参考に色々試したのですが、なかなか上手くいきません。
いまいち分からないので、直接メールさせて頂きました。

差し支えなければ
ご指導お願いいたします。

表定義で

項目1に項目名「契約日」日時型
項目2に項目名「経過日数」文字列
上記のように設定し、
項目1「契約日」に日付(例)2001/10/10と入れれば
項目2「経過日数」を自動的に表示させたいのです。

私の説明が上手く伝わればいいのですが!

17515 Re:桐初心者です!教えてください! 佐田 守弘 2002/10/11-00:12
記事番号17512へのコメント
あかねさん
どうやら表形式編集で経過日数を自動計算して表示したいとの事ですね。
日付が日時型で経過日数が文字列型の場合でも、表形式編集で項目計算式に
設定できる様に、前回の式を直してみました。

1)項目計算式の設定
[経過日数]の項目の項目計算式に以下の式をコピーして貼り付けて下さい。
なお、スペースなしに記述しておりますが、コピーした時にスペースや改行が
付くと思いますので、これらは削除して下さい。
=================項目計算式==============================
#計算(#set(年月日,#日時文字列([契約日],2,1,0)),#set(年,#年齢(&年月日,#年月日)),
#set(年月日,#年数加算(&年月日,&年)),#set(月,#月数(&年月日,#年月日)),
#set(年月日,#月数加算(&年月日,&月,1)),#set(日,#日数(&年月日,#年月日)),
#文字列(&年)+"年"+#文字列(&月)+"ヶ月"+#文字列(&日)+"日")
=========================================================

2)[契約日]の自動計算の設定
[契約日]の定義では、[編集]のタブにある「入力後自動計算」にチェックを入れて下さい。

設定は以上です。
一応動作確認しておりますので、動くはずです。

3)表を開いたら再計算の実行
なお表編集での項目計算式ですから、本日入力した時に表示される
経過日数は、明日になっても自動的に変わる訳ではありません。
全データについてその日の経過日数を表示させるには、再計算を行う必要があります。

佐田守弘(KS-00119)
17522 Re:桐初心者です!教えてください! あかね 2002/10/11-09:13
記事番号17515へのコメント
有難うございました。出来ました!
しかし再計算をさせないと自動的に更新はできないのですね?
自動的に更新する方法はあるのでしょうか?
そこまで求めるならばエクセルの方が良いのですかね?
17550 計算項目の再計算 佐田 守弘 2002/10/13-00:01
記事番号17522へのコメント
あかねさん
表形式編集で行う限りは、どうしても手動で再計算を行う必要があります。
しかしフォーム編集で行うなら、フォーム開始イベントで再計算をさせる
など、いろいろと便利な機能が使えます。

また桐ver.9では、道具箱機能が使えるので、道具箱に再計算のメニューを
作っておき、表を開いた後、これを使って簡単に再計算ができる様になると思います。

●Excelと桐の考え方の違い
Excelにも自動計算をさせない設定がありますが、規定値では再計算あり
になっていますね。この再計算に関してExcelと桐の考え方のちがいは、
扱うデータ量のちがいによるものでしょう。

Excelなど表計算ソフトでは、全データをメモリに読み込んで処理します。
このためメモリだけで処理できる量のデータしか扱えません。
これに対して、データベースソフトは、メモリに読み込むデータはその一部で、
大半はディスクファイルにある状態で処理します。

このデータの持ち方の違いが、再計算ありを規定値とするか、
手動で再計算させるかの違いになっているのだろうと思います。
マシン速度にも寄りますが、Excelでかなりの量のデータを扱おうとすると、
再計算が負担になる場合もないとは言えません。

●桐とExcel
どちらを使うべきかは、@データ量、A他のデータとの連携、Bデータの重要性などで考えるのでしょうね。
@データ量
数百件〜数千件程度のデータであれば、Excelでも処理できるだろうと思います。
しかし数万件を越えると、かなり話が違って来ると思います。
A他のデータとの連携
Excelでも他の表を参照する関数がありますが、データ量が増えて来るといろいろと制限が出て来ます。
Bデータの重要性
もしそのデータが基幹データだとしたら、安心して任せられるアプリかどうかも重要です。
スプレッドシート(表計算)は、ワープロの延長線上で、表形式のデータを作って、
きれいに印刷する道具でしかありません。
一方、データベースはデータを保管管理するものです。
データの保全性に対する考え方が違うのだろうと思います。
言うならば、手提げ金庫と銀行の金庫の様な違いだと思って下さい。

佐田守弘(KS-00119)

戻る