過去の桐井戸端BBS (桐ver.9)
18685 日付から曜日を求めたいのだが31日までない月は表示したくない(再質問) まさき 2003/01/23-10:12
以前に質問した内容について再度質問します。
質問番号はNO18335です。
----------------------------------------------------------
集計表.tblという表ですが
日付が項目として[1]〜[31]まであります。
レポートでこの日付の項目から曜日を表示したいので
下記のような設定をしました。
#曜日(#連結(#文字列([西暦年]),"年",#文字列([月]),"月","1日"))
と設定しました。
しかし、31日まで無い月も、曜日を表示します。
また2月などは、20日頃の曜日表示が違った値を計算してます。
なぜでしょうか?
----------------------------------------------------------
うにんさんから下記のご指導をいただきました。
----------------------------------------------------------
桐では日付文字列の中のありえない数字の部分は1とみなしてくれるので、
例えば31日の部分は
#COND(#日(#STR([西暦年])+"-"+#STR([月])+"-31")=31,#曜日(ここは略))
のようにすれば、31日までない月では未定義値になります。
(年と月が数値なので、#日時値生成の方が式が簡単になるかと思ったら、
この関数ではありえない月や日を指定するとエラーになってしまいますね)
------------------------------------------------------------
#cond(#日(#str([西暦年])+"-"+#str([月])+"-31")=31)
と設定しましたが、「関数の引数が不正です。・・・・・」とでます。
どうすればいいのでしょうか?

〔1〕〜〔31〕までの項目は数値です。

よろしくお願いいたします。

18687 Re:再度質問(曜日) 通りすがり 2003/01/23-12:15
記事番号18685へのコメント
>#cond(#日(#str([西暦年])+"-"+#str([月])+"-31")=31)
>と設定しましたが、「関数の引数が不正です。・・・・・」とでます。
>どうすればいいのでしょうか?

#COND(#日(#STR([西暦年])+"-"+#STR([月])+"-31")=31,#曜日(ここは略))

です。

,#曜日(ここは略)

が足りないのです。
ちなみに「ここは略」にそのままこの文字を入れてはいけません。(^^ゞ

18690 Re:再度質問(曜日) bonito 2003/01/23-12:57
記事番号18687へのコメント
うにんさんの考え方を踏襲しつつ

#計算(#代入(&秒,1),#代入(&STR,#STR([西暦年],4)+"-"+#STR([月],2)+"-"+#STR(&秒,2)),#条件選択(&秒=#日(&STR),#曜日(&STR),1,#U))

というのは…?(あんまりスマートじゃないかなぁ?)

上の式はホントは一行です (^^;
コピペ用に作ったので少し式が長くなりました。
#代入(&秒,1)の1の部分を日付に応じて変更して下さい。
あと最後の#Uは未定義値を返す関数ですが、これを"/"
とかにするって手もあるかも…。

PS.
私自身はこれまで在り得ない日付については
&日付>#月末(&年月)のように判断してましたが
うにんさんの考え方の簡単かも…
18689 Re:再度質問です(曜日) うにん 2003/01/23-12:41
記事番号18686へのコメント
>#曜日(#連結(#文字列([西暦年]),"年",#文字列([月]),"月","1日"))
>と設定しました。
>しかし、31日まで無い月も、曜日を表示します。
>また2月などは、20日頃の曜日表示が違った値を計算してます。
>なぜでしょうか?
>----------------------------------------------------------
>うにんさんから下記のご指導をいただきました。
>----------------------------------------------------------
>桐では日付文字列の中のありえない数字の部分は1とみなしてくれるので、
>例えば31日の部分は
>#COND(#日(#STR([西暦年])+"-"+#STR([月])+"-31")=31,#曜日(ここは略))
>のようにすれば、31日までない月では未定義値になります。

すいません、「ここは略」とは、今までどおりの曜日の計算式を使用する意味です。
#日時値生成を使って少し簡単にすれば、31日の曜日を表示するには
#COND(#日(#STR([西暦年])+"-"+#STR([月])+"-31")=31,#曜日(#日時値生成([西暦年],[月],31)))
となります。

>#cond(#日(#str([西暦年])+"-"+#str([月])+"-31")=31)
>と設定しましたが、「関数の引数が不正です。・・・・・」とでます。

#CONDのHELPを見れば引数は偶数個必要(つまり区切りの,が奇数個)とわかるのですが。。。
条件と値のペアを,で区切って指定します。
上の式では条件だけ指定して値が指定されていません。

>〔1〕〜〔31〕までの項目は数値です。

これは特に関係ないですよね?
「ある年・月の1日の曜日を表示するテキストオブジェクト」
「ある年・月の31日の曜日を表示する(そういう日がなければ何も表示しない)
テキストオブジェクト」
などを作りたいのだと思いましたが?

なお、2月だけおかしいという件は、こちらでは再現しないのでよくわかりません。

18692 Re:再度質問です(曜日) まさき 2003/01/23-13:32
記事番号18689へのコメント
うにんさん、ありがとうございます。
#COND(#日(#STR([西暦年])+"-"+#STR([月])+"-31")=31,#曜日(#日時値生成([西暦年],[月],31)))
でうまくいきました。

戻る