
No.3ベストアンサー
- 回答日時:
簡単ではありますが、ソースを紹介します。
Dim startDate As String
Dim endDate As String
Dim iLoop As Integer
startDate = Sheet1.TextBox1.Text
endDate = Sheet1.TextBox2.Text
For iLoop = 0 To DateDiff("m", CDate(startDate), CDate(endDate)) - 1
MsgBox DateAdd("d", -1, DateAdd("m", iLoop + 1, CDate(startDate)))
Next
Sheet1.TextBox1.Textのテキストボックスに開始月が
「03年11月」という形式で入力されています。
Sheet1.TextBox2.Textのテキストボックスに終了月が
「04年4月」という形式で入力されています。
このような場合、メッセージボックスでの表示となりますが、
「2003/11/30」
「2003/12/31」
「2004/01/31」
「2004/02/29」
「2004/03/31」
と3月分まで表示されます。
有難うございました。
まさに私の求めていたコードです。
> For iLoop = 0・・・
ゼロから初めて良いんですね~
イマイチ意味が分かりません
No.5
- 回答日時:
#3です。
「For iLoop = 0・・・」の部分ですけど、ただの私の癖です。
For iLoop = 0 To DateDiff("m", CDate(startDate), CDate(endDate)) - 1
MsgBox DateAdd("d", -1, DateAdd("m", iLoop + 1, CDate(startDate)))
Next
と書いてある自分のコードを見ますと、
For iLoop = 1 To DateDiff("m", CDate(startDate), CDate(endDate))
MsgBox DateAdd("d", -1, DateAdd("m", iLoop, CDate(startDate)))
Next
と書いた方がわかりやすいかもしれませんね。
結局、ループする回数なので、
0から始めようが1から始めようが
終わりの部分(For iLoop = 1 TO ***)と
~~~~
ループの対象となる
DateAdd("d", -1, DateAdd("m", iLoop, CDate(startDate)))
~~~~~~~
の部分を合わせれば問題ないと思います。
ここら変は、開発者の癖なんかがもろに出ちゃうような気もします。
有難うございました。
普段For文で1から初めているもので、何か意味が有るものかと思ったものですから・・・
配列も0から始まるようですし、0から始める癖をつけましょうかね~
#3は大変参考になりました。DateDiff関数のこういった使い方は 目から鱗です。
他の方も参考になったんじゃないですか。
No.4
- 回答日時:
A列に日付を入れるとして
その月末日をB列に出す場合
Sub test01()
For i = 1 To 10
Cells(i, 2) = DateSerial(Year(Cells(i, 1)), Month(Cells(i, 1)) + 1, 1) - 1
Next i
End Sub
(テスト実行データ)
2003/12/162003/12/31
2004/1/17 2004/1/31
2004/2/18 2004/2/29
2004/3/19 2004/3/31
2004/4/20 2004/4/30
2004/5/21 2004/5/31
2004/6/22 2004/6/30
2004/7/23 2004/7/31
2004/9/24 2004/9/30
2004/10/252004/10/31
次月の1日の日付シリアル値を求めその前日が、月末日です(常套手段)。

No.2
- 回答日時:
もし、月末日ではなく「その月の最終営業日」とかなら、それなりに複雑な処理になりますから、VBAも役不足にならないとは思いますが・・・単なる月末日なんですよね?
質問文だけではプログラムの全貌が見えませんので、とりあえず基本方針だけを。
年をまたぐ場合、For文では無理なので、Do~Loop文を使い、処理が期間の最終月になったら、Exit Doでループを抜けるという方法がより適していると思います。ループの最後で月を+1しておき、もし月が13になった場合は、月を1にして年を+1する、というふうにしておけば、年をまたいだ処理が可能です。
DateAddは「翌月の同日」などを求めるのには向いていますが、月末日を求めるのには使えません。月末日の出し方は、#1の方が書かれているように、DateSerial関数に「求めたい年」と「求めたい月+1」、そして日のところに「0」を入れることで求められます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他言語で言うcontinue文
-
For文の終了値を関数にしても問...
-
C言語forループが完結した場合...
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
c languageで 簡単な質問があ...
-
エクセルで可視セルにのみ値貼...
-
20'(角度)の計算がわかりま...
-
scanfの入力をgets関数で読み捨...
-
マイナスからプラスへ転じた時...
-
値差の%計算方法について
-
「Aに対するBの割合」と「Aに対...
-
gcc: incompatible pointer type
-
「指定されたキャストは有効で...
-
CStringをwchar_tに変換したい
-
return 1L
-
strncpyと_tcsncpy_sのヌルの扱...
-
Enterキーを押されたら次の処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
do-while文が禁止される理由
-
PAD図の書き方
-
入力した文字列から母音だけを...
-
入力した数値を倍々するプログラム
-
if文の中にfor文なのか、for文...
-
C言語forループが完結した場合...
-
アルゴリズムです!四つの数字...
-
break文でループを一気に抜ける...
-
エクセルVBAで Do While (1)って?
-
モンテカルロシミュレーション...
-
このC#プログラムの1〜11を埋め...
-
プログラミングC言語についての...
-
C++ DirectX カーソルの移動処...
-
HEWのバグ?
-
ゲームオーバーのプログラム
-
プログラムで関数は使わない方...
-
Delphiで・・・
-
他言語で言うcontinue文
-
Excel VBAで年度をまたぐ期間の...
おすすめ情報