VBAで月末の日付に+1する際の問題

このQ&Aのポイント
  • VBAを使用している際に、今日の日付に1を足して翌日の日付を取得する方法について質問です。
  • しかし、月末の場合に失敗してしまう問題が発生しています。
  • 具体的には、3月31日に+1をすると、3月32日になってしまいます。
回答を見る
  • ベストアンサー

VBA 今日の日付に+1した場合、月末失敗する

VBA初心者の私ですが、いつも回答者さまに助けていただいております。 今回も質問させてください。 エクセル2002を使用しています。 今日の日付に+1をして、翌日の日付を変数に入れたいのですが、 月末の場合、失敗してしまいます。 例えば、3月31日に+1をすると、3月32日になってしまします。 Dim MMM As String, DD As String MMM = Format(Date, "MMM") DD = Day(Date) + 1 DDが文字列なので当然だと思い、変数宣言を日付型にするとエラーになります。 Dim MMM As Date, DD As Date MMM = Format(Date, "MMM") DD = Day(Date) + 1 実行時エラー‘13’ 型が一致しません。 この時、MMMの値は 0:00:00 です。 日付型にすれば月末を認識して4月1日になってくれると思ったのですが・・・。 私の書き方が悪いのでしょうか? 他に書き方がありましたら教えてください。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 「日」のみの値にしてから1を加えるからおかしくなるのです。  翌日の日付を求めてから、「月」や「日」のみの値に変換すれば良いだけです。 Dim MMM As String, DD As String, Nextday As Date Nextday = Date + 1 MMM = Format(Nextday, "MMM") DD = Day(Nextday)

kasetsu
質問者

お礼

なるほど!!! ありがとうございます。

その他の回答 (3)

回答No.4

【添付図差し替え】ミスってました。

回答No.3

Q、他に書き方がありましたら教えてください。 A、添付図のような書き方もあります。 ただし、標準モジュールに次の関数を登録する必要があります。 Option Explicit Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs(N <= UBound(strDatas))) End Function

  • ubku
  • ベストアンサー率37% (227/608)
回答No.1

日付の計算をするときはDateAdd関数を使います。 1日後を求める場合は a = DateAdd("d", 1, CDate("2016/3/31")) で 2016/4/1 が返ります。

関連するQ&A

  • エクセルVBA 実行時エラー‘13’型が一致しまん

    VBAは初級レベルです。説明が分かりづらかったらすみません。 Windows7/Excel2002を使っています。 エクセルVBAで、変数MMMと変数DDに処理する日付を入れたいのですが、 実行時エラーになってしまい、うまく変数が設定できません。 例えば、31MAR.xls というエクセルファイルがあります。 (ファイルは、デイリーベースで存在します。) このファイル名の月と日にちを変数に入れます。 DD = 日にち (例えば、31日なら“31”) MMM = アルファベット3文字 (3月なら“MAR”) そして、入力する為のワークシートを Set NYURYOKU = Workbooks(DD & MMM & ".xls").Worksheets("入力") としたのですが、 『実行時エラー‘9’インデックスが有効範囲にありません。』 となってしまいます。 このとき、 DDの値は、0: MMMの値は、00: になっています。 --------------------------- Dim HIDUKE As Date  HIDUKE = Left(ThisWorkbook.Name, 5) MMM = Mid(HIDUKE, 3, 3) DD = Left(HIDUKE, 2) Set NYURYOKU = Workbooks(DD & MMM & ".xls").Worksheets("入力") --------------------------- 変数宣言で、Dim HIDUKE As Date にすると、 HIDUKE = Left(ThisWorkbook.Name, 5) の所で『実行時エラー‘13’型が一致しません。』 となってしまい、 試しに Dim HIDUKE As String にすると、 MMM = Mid(HIDUKE, 3, 3) の所で『実行時エラー‘13’型が一致しません。』 となってしまいます。 変数宣言をしないと、 Set NYURYOKU = Workbooks(DD & MMM & ".xls").Worksheets("入力")の所で 『実行時エラー‘9’インデックスが有効範囲にありません。』 となってしまいます。 どなたか回避策を教えてください。 どうぞよろしくお願いします。

  • エクセルVBA 実行時エラー‘13’型が一致しまん

    VBAは初級レベルです。説明が分かりづらかったらすみません。 Windows7/Excel2002を使っています。 エクセルVBAで、変数MMMと変数DDに処理する日付を入れたいのですが、 実行時エラーになってしまい、うまく変数が設定できません。 例えば、31MAR.xls というエクセルファイルがあります。 (ファイルは、デイリーベースで存在します。) このファイル名の月と日にちを変数に入れます。 DD = 日にち (例えば、31日なら“31”) MMM = アルファベット3文字 (3月なら“MAR”) そして、入力する為のワークシートを Set NYURYOKU = Workbooks(DD & MMM & ".xls").Worksheets("入力") としたのですが、 『実行時エラー‘9’インデックスが有効範囲にありません。』 となってしまいます。 このとき、 DDの値は、0: MMMの値は、00: になっています。 --------------------------- Dim HIDUKE As Date  HIDUKE = Left(ThisWorkbook.Name, 5) MMM = Mid(HIDUKE, 3, 3) DD = Left(HIDUKE, 2) Set NYURYOKU = Workbooks(DD & MMM & ".xls").Worksheets("入力") --------------------------- 変数宣言で、Dim HIDUKE As Date にすると、 HIDUKE = Left(ThisWorkbook.Name, 5) の所で『実行時エラー‘13’型が一致しません。』 となってしまい、 試しに Dim HIDUKE As String にすると、 MMM = Mid(HIDUKE, 3, 3) の所で『実行時エラー‘13’型が一致しません。』 となってしまいます。 変数宣言をしないと、 Set NYURYOKU = Workbooks(DD & MMM & ".xls").Worksheets("入力")の所で 『実行時エラー‘9’インデックスが有効範囲にありません。』 となってしまいます。 どなたか回避策を教えてください。 どうぞよろしくお願いします。

  • VBA 数日後の日付をうまく求められません

    Windows7/Excel2002を使っています。 エクセルVBAで、数日後の日付をうまく求められません。 例えば、31MAR.xls というエクセルファイルがあります。 (ファイルは、デイリーベースで存在します。) このファイル名の月と日にちを変数に入れます。 DD = 日にち (例えば、31日なら“31”) MMM = アルファベット3文字 (3月なら“MAR”) 入力シートのセルC3に納期日を入れたいのです。 納期日は5日後もあれば、6日後もあり、取引先によって違いますので、 31MAR.xlsファイルのSheet1に、会社毎の納期日を入力しておきます。 セルA列(会社名)  セルB列(納期日) ABC会社        5 DEF会社        6 GHI会社        7 セルB列は、5とか6とかシンプルに数字のみ入っています。 今日の日付をファイル名から変数に格納し、それにB列の数字をプラスした日付を求めたいのです。 -------------------- Dim HIDUKE As Date  Dim PLUS As Integer HIDUKE = Left(ThisWorkbook.Name, 5) MMM = Mid(HIDUKE, 3, 3) DD = Left(HIDUKE, 2) Set NYURYOKU = Workbooks(DD & MMM & ".xls").Worksheets("入力") ※ここで、変数PLUSを求める記述あり(省略させていただきます) NYURYOKU.Cells(3, 3) = HIDUKE + PLUS -------------------- 上記マクロを起動すると、 NYURYOKU.Cells(3, 3) = HIDUKE + PLUSのところで 実行時エラー‘13’ 型が一致しません。 となってしまいます。 変数HIDUKEには、31MARと入ってきており、 変数PLUSには、処理したい会社の納期日は入ってきています。 ABC会社であれば、NYURYOKU.Cells(3, 3)に 4月4日 と値を入れたいのです。 どなたか教えてください。よろしくお願いします。

  • VBA での日付の計算

    お世話になってます。 Access VBA 初心者です。 string型変数に日付(YYYYMMDD)がセットされています。 その日付に1日プラスした日付を算出したいのですが、 どうすればよいのかよく分かりません。 たとえば Dim w_Date As String w_Date = "20070726" としたならば、 w_Dateは"20070727"となるようにしたいのですが。。。 よろしくお願いいたします。

  • エクセルVBAの日付の表示で教えてください

    A1セルに「2021年9月5日(日)です」と表示したいのですが、下記のマクロを実行すると「9月04日(木)です」と表示され、日付も曜日も違う結果が表示されてしまいます。 初心者で良く分からないため、マクロに詳しい方、教えていただけないでしょうか。 Sub test() Dim niti As Date niti = "2021/ 9 /5" Range("A1").Value = Month(niti) & "月" & Format(Day(niti), "dd") & "日" & Format(Day(niti), "(aaa)") & "です" End Sub

  •  日付型なら変数の先頭になんてつけてますか?

    変数名で、 文字列型なら Dim str組織名 As String 数値型なら Dim intNo As Long としてるのですが、 日付型なら変数の先頭になんてつけてますか? Dim date月日 As Date にしようかなと思ったのですが なんかくどいかなって感じます。

  • エクセル VBA 今日の日付を変数にする

    いつまでたってもVBA初心者のものですが 前回は、セルに入力されている日付を変数に利用する場合のことを 聞かしていただいたのですが 今回は、今日の日付を変数に利用する場合はどうすればいいのでしょう? Sub Today() Dim i As String i = Day(Today()) Range("A1").Value = i End Sub こんな感じなんですけど上手くいきません 何から何まで頼りっきりですが、よろしくお願いします

  • ACCESS97のモジュールで 日付の計算をしたい

    以前の例題を検索したのですが 改めて質問します。 ACCESS97のモジュールで 日付の計算をしたいのです。 例えば ある日付を入力すれば、その2週間後の日付を取得したいのです。  テキストボックス "日付"で入力するとします Dim Sdate As Date  Dim Edate As Date Sdate = Format(Me.日付, "yy/mm/dd") Edate = Format(Sdate+14, "yy/mm/dd") ← ではエラーになります。 Q どうすればいいのでしょうか?

  • 日付からの曜日取得

    VB6を使っています。 取得した年月の一日の曜日を取得したいのですが うまくできません。formatもなぜかエラー出るんです・・・ どなたか教えてください Dim dtCurrent As Date Dim y As Integer Dim m As Integer Dim j as string Dim nWeek As Integer j=DateTime.Date() y = Mid(j, 1, 4)'年 m = Mid(j, 6, 2)'月 dtCurrent = Format(y&m&01, yyyy / mm / dd) Week = Weekday(dtCurrent) - 1 '曜日取得

  • vbaで配列に値を格納する場合

    vbaで配列に値を格納する場合 変数の宣言はどちらを使った方が良いのでしょうか? Sub Sample1() Dim i As Long Dim myStr As String Dim tmp() As String myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub か Sub Sample1() Dim i As Long Dim myStr As String Dim tmp As Variant myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub でも問題なく動くのですが、 Variant型での宣言はあまりしない方が良いですか? あと Dim tmp() As String ならエラーにならないのですが Dim tmp As String だとエラーになってしまう理由がよくわからないので教えて頂けますか?

専門家に質問してみよう