• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vba 365日の日付を順番に取得したい)

VBAで365日の日付を順番に取得する方法

このQ&Aのポイント
  • VBAを使用して、365日の日付を順番に取得する方法について説明します。
  • イミディエイトウインドウに次のような雛形を作成しました。
  • しかし、構文エラーが発生するため、正しいコードを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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のこと を勉強してください。

JHAEYNSCMGU
質問者

お礼

回答頂きありがとうございました。

その他の回答 (4)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

ほとんとあなたが書いたままで Dim i As Integer For i = 0 To 364 Debug.Print #1/1/2015# + i Next

JHAEYNSCMGU
質問者

お礼

回答頂きありがとうございました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

 For i = 1 To 365   Debug.Print DateValue("2014/12/31") + i  Next

JHAEYNSCMGU
質問者

お礼

回答頂きありがとうございました。

  • lemuel
  • ベストアンサー率50% (1/2)
回答No.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

JHAEYNSCMGU
質問者

お礼

回答頂きありがとうございました。

回答No.1

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"みたいに月日の頭にゼロが付かなくなります。 ご参考になれば幸いです。

JHAEYNSCMGU
質問者

お礼

回答頂きありがとうございました。

専門家に質問してみよう