tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。