- ベストアンサー
VBAで365日の日付を順番に取得する方法
- VBAを使用して、365日の日付を順番に取得する方法について説明します。
- イミディエイトウインドウに次のような雛形を作成しました。
- しかし、構文エラーが発生するため、正しいコードを教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
VBAもエクセル、ワード、アクセスその他があります。どれかを認識しましょう。質問に書いてないのは、初心者丸出しです。 エクセルと仮定して、エクセルの日付は、日付シリアル値という整数の数値で扱われています。1は1900年1月1日とし、物理的に1日たつと1増やす数値(順序数のようなもの)です。 本日2015.6。28日は第何日目かは、エクセルのシートのセルで、 Sub test01() Range("A1") = DateSerial(2015, 6, 28) End Sub を実行すると、 2015/6/28 となりますが、セルの表示形式を「数値」に設定すると 42183となり、第42183番目の日であることがわかります。しかしこれは、あくまで裏側の話で、エクセルは、2015.1.1のシリアル値はVBAでは、 #1/1/2015# で表せるので、 Sub test02() s = #1/1/2015# For i = 0 To 364 Worksheets("Sheet1").Range("A" & i + 1) = s + i Next i End Sub を実行して12.31日までの日付がA列に入ります。 画面で見たいだけなら、Worksheets("Sheet1").Range("A" & i + 1) = s + i のところが、Msgboxで表示するなら、しつこいので10日ぐらいで止めるとして Sub test03() s = #1/1/2015# For i = 0 To 9 MsgBox Format(s + i, "yyyy/mm/dd") Next i End Sub で確認できます。 すなわち (1)エクセルの日付のセルの値の仕組み (2)セルには表示形式でいかようにも(と言っても数種類の)見た目を変えられる こと。 それは (A)セルの書式設定を手作業で設定する。 (B)VBAで書式設定をやる (C)文字形式でVBAで設定する(Format関数) 上記例 などがあり、(C)は日数算出などにはつかえません。 日付シリアル値である場合は、2つの日付の日数計算は引き算で済みます。 (3)エクセルVBAのこと を勉強してください。
その他の回答 (4)
- keithin
- ベストアンサー率66% (5278/7941)
ほとんとあなたが書いたままで Dim i As Integer For i = 0 To 364 Debug.Print #1/1/2015# + i Next
お礼
回答頂きありがとうございました。
- okormazd
- ベストアンサー率50% (1224/2412)
For i = 1 To 365 Debug.Print DateValue("2014/12/31") + i Next
お礼
回答頂きありがとうございました。
- lemuel
- ベストアンサー率50% (1/2)
Dim i,j as integer dim a as variant a =array(31,28,31,30,31,30,31,31,30,31,30,31) for i=0 to 11 for j=1 to a(i) Debug.print (#" & i+1 & "/" & j & "/2015#) next j next i
お礼
回答頂きありがとうございました。
- celice1979
- ベストアンサー率52% (12/23)
Dim day As New DateTime(2015, 1, 1) For i As Integer = 0 To 365 - 1 Step 1 Debug.Print(day.AddDays(i).ToString("yyyy/MM/dd")) Next i こちらでよいかと。 開始日を変えたければ、1行目のDateTimeの後のカッコ内の数値を変えてください。 うるう年の場合は、2行目のToの後を366にして下さい。 (ほんとは年の日数を取得すればいいんですけど、複雑になるので) 2行目のStepの後を1を2にすれば、2日おきに出力されます。 3行目のToStringの後の"yyyy/MM/dd"を変えれば、いろんな書式で出力できます。 例えば"M/d"にすれば、"1/8"みたいに月日の頭にゼロが付かなくなります。 ご参考になれば幸いです。
お礼
回答頂きありがとうございました。
お礼
回答頂きありがとうございました。