“For… Next”と”Ifステートメント”の組合せ


花子  2007-05-30 07:42:13  No: 98824

下記の“For… Next”文で、どうも“For… Next”と”Ifステートメント”の組み合わせがうまくいかないようですので、どなたかアドバイスお願いいたします。私たちは、当日の整数(今月10日なら10)から1ヶ月31日分ループさせたいのです。ただし、” Const intFirstDay = 1”で、変数ourNumberの中に数字が代入されていたら、変数iは必ず整数1(当月1日という意味)にしたいのです。よろしくお願いいたします!

Sub ourtDay()

Dim i As Integer
Dim j As Integer
Dim D As Integer
Dim ourDay As Integer
Dim ourNumber As Integer
ourNumber =任意の数字(任意の数字が代入される)
Const intFirstDay = 1
D = Int(Day(Date))

For i = 1 To 31
    If ourNumber <> "" Then
        i = intFirstDay
    ElseIf ourNumber = "" Then
        
For j = 1 To 31
        If j = D Then
            j = j + 1
    End If
Next
    Else
        j = D
        j = j + 1
    End If
Next
End Sub


ガッ  2007-05-30 15:43:22  No: 98825

寝起きだからかどうか分かりませんが、
何を質問しているのか理解できません
きっと動作説明らしきものをしたいのでしょうがサッパリです
フローチャートでも作ってみたらどうでしょう?


もげ  2007-05-30 17:54:59  No: 98826

For...Nextの中でIf文が...というところは、

>Dim ourNumber As Integer
なら文字列は入りませんから、

>If ourNumber <> "" Then

は無茶です。
うまくいかないというか、
「型が一致しません」(VB6.0)
「String "" から型 'Double' への変換は無効です。」(VB2005)  
というエラーで実行できませんから。

ブレークポイントを設定してステップ実行して、変数の内容をウォッチするとか、
自分でデバッグする習慣をつけたほうがよろしいかと。


ささき  2007-05-30 17:55:13  No: 98827

Nextでインクリメントする値を指定しても動きませんか?

Sub ourtDay()

Dim i As Integer
Dim j As Integer
Dim D As Integer
Dim ourDay As Integer
Dim ourNumber As Integer
ourNumber =任意の数字(任意の数字が代入される)
Const intFirstDay = 1
D = Int(Day(Date))

For i = 1 To 31
    If ourNumber <> "" Then
        i = intFirstDay
    ElseIf ourNumber = "" Then
        For j = 1 To 31
            If j = D Then
                j = j + 1
            End If
        Next j
    Else
        j = D
        j = j + 1
    End If
Next i
End Sub


ささき  2007-05-30 17:58:32  No: 98828

>というエラーで実行できませんから。

が〜ん。ガッさん同様、朝は頭が働いていないようです。
#組み合わせがうまくいっていないようだというのを信じてしまった。


特攻隊長まるるう  2007-05-30 18:07:54  No: 98829

(VB2-VB6専用)掲示板ですが、VBAとかもあるので
一応、開発環境も書き込んでおいて欲しいです。

で、とりあえず変なインデントはやめて欲しい。
インデントでプログラムの動きは変わるわけ
ではありませんので。

> 当日の整数(今月10日なら10)から1ヶ月31日分ループさせたいのです。
月替わりの判定とかは?
日付型で DateAdd 関数を使ったほうがいい気がしますが。

月替わりとか日付が関係ないなら
>For i = 1 To 31
>Next
…だけでいいよね???
とにかく31日分ループすればいいんだから。

>変数ourNumberの中に数字が代入されていたら
それもループとは関係ない。

説明を読んでも、コードを見ても、根本的に何がしたいのか
分かりませんでした。
ボクもフローチャートでも作ってみることをお勧めします。


特攻隊長まるるう  2007-05-30 18:56:22  No: 98830

あと、
>   i = intFirstDay
ループの中でカウンタ変数を操作するのも慎重に
してください。上記コードでは
>   If ourNumber <> "" Then
が成り立つとループが終了しなくなります。
 # 構文エラーは論外

1.日本語でやりたいことを書く
    ↓
2.日本語で必要な処理を箇条書きにする
    ↓
3.フローチャートで処理を考える
    ↓
4.コードを書く

多分、1.の時点で不十分な説明しかできていません。
2.3.ができてないと掲示板で他人に仕様を伝える
ことが困難です。掲示板で質問する時点で1.〜4.
を1回通りは実行してないと、有効な回答をつける事が
困難となります。
実行した後で質問を継続することをお勧めします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加