- ベストアンサー
VBA 月末の値の計算方法
- VBAを使用して値が月末の場合、月に1を足して日は1とする方法について説明します。
- TextBox1には年、TextBox2には月、TextBox3には日が入力されています。次の行に移動すると、TextBox3の値を1増やします。
- ただし、前の値が月末の場合は、自動的に月に1を足して日は1とします。さらに、月が12の場合は年に1を足して月と日を1とします。
- みんなの回答 (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)
参考に 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