タイトル : Re^4: 「式が複雑すぎます」の対処について 投稿日 : 2016/07/08(Fri) 10:44 投稿者 : 魔界の仮面弁士
> sDayがどの時点で複雑になるか、確認してみます。 型が曖昧で、かつ、複数の意味に使い回されているように見えます。 > Dim sDay As String > sDay = CStr(adteStart) まず、日付型をわざわざ 文字列型にしているようですが、 DateAdd の第三引数および戻り値の型は、本来は String 型ではなく 日付型、より正確には「内部処理形式 Date の Variant 型」であるため、 String にしてから DataAdd させるのは得策とは言えません。 基準日たる adteStart は Date 型なので、変数を As Date にして、 型を揃えておいた方が良いと思います。日付計算時には 文字列型を介在させる必要が無さそうなので、今回は CStr / CDate / CVDate 等の出番も無さそうですね。 > sDay = DateAdd("d", 1, sDay) > sDay = Format(sDay, GCSS_YYYYMMDD) この二行は、上の sDay と 下の sDay とで、変数の意味が変わってしまっています。 一つの変数を使い回して複数の用途を持たせるのは、バグの温床になりますので Dim dDay As Date, sDay As String dDay = DateAdd("d", 1, dDay) '日付型としての演算 sDay = Format(dDay, GCSS_YYYYMMDD) 'その日付値の文字列表記 などのように、意図に応じて変数を分けておく事をお奨めします。 > それから1日ずつ足していく流れになります。 コード全体を見たわけではありませんが、その流れであれば そもそも If 文も不要で、下記の処理だけで済みそうです。 Dim dDay As Date, sDay As String For i = 0 To alDayEnd - 1 dDay = DateAdd("d", i, adteStart) '基準日adteStartの i 日後の日付 sDay = Format(dDay, GCSS_YYYYMMDD) '上記日付の文字列表現 ' ' ' Next |