• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 値が月末の時は月に1を足して日は1とする)

VBA 月末の値の計算方法

このQ&Aのポイント
  • VBAを使用して値が月末の場合、月に1を足して日は1とする方法について説明します。
  • TextBox1には年、TextBox2には月、TextBox3には日が入力されています。次の行に移動すると、TextBox3の値を1増やします。
  • ただし、前の値が月末の場合は、自動的に月に1を足して日は1とします。さらに、月が12の場合は年に1を足して月と日を1とします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

こんなことを質問しているのは、エクセルでは、「日付を入力すると、日付シリアル値という、1900年1月1日から数えて、その日が何番目の日に当たるかの、順序数でセルの値が保持される、」ことを明確に勉強してないということではないか。 VBAをやるには、VBA独自(プロクラムコードなど)のことだけでなく、エクセルのしくみや、機能を先に勉強しておくべきなんだ。 変数のことや、文字コード関連、フォントなど沢山あると思う。 >自動的に月に1を足して日は1とする とは、これを特殊パターンとして捉えるのでなく、次の日、すなわち+1した日付を作ればよい。 後はその日付シリアル値から、西暦年や月や日の数字は、セルの表示やプログラムの中での「表示形式の問題」に引き渡されるのだ。 +1した日付シリアル数が次月に当たれば(月末日を越えれば)、月数も+1され、日の数字も、月末数字を考慮して、正しく表示される。 和暦の年号なども、裏(エクセルのシステ側)で計算して処理しているわけだ。 だから月末日を判定して その場合だけ、+1した値を新しい変数などに保持すればよい。 月末日の判定は、+1した月数の、1日の前日(-1した数)で出せる。 ーーー テスト例を挙げておく A1:B4 B列は結果。 2019/7/30 2019/7/31 月末 2019/8/1 2019/8/31 月末 コード(標準モジュール) Sub test01() For i = 1 To 4 x = Cells(i, "A") If x = DateSerial(Year(x), Month(x) + 1, 1) - 1 Then Cells(i, "B") = "月末" End If Next i End Sub ==== 勿論EOMONTH関数を使う、などのやり方があるのは存じているよ。 http://officetanaka.net/excel/function/function/eomonth.htmhttp://officetanaka.net/excel/function/function/eomonth.htm エクセル関数愛好者などはどうぞ。 >このEOMONTH関数は、VBAでWorksheetFunctionから呼び出すこともできます。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

参考に Private Sub CommandButton1_Click()   ActiveCell.Offset(1).Activate   With ActiveCell     .Value = .Offset(-1).Value + 1     Me.TextBox1.Value = Year(.Value)     Me.TextBox2.Value = Month(.Value)     Me.TextBox3.Value = Day(.Value)   End With End Sub

関連するQ&A