カレンダー表示と閏年設定について簡単に整理してみました。
VS Basicを起動したら[新しいプロジェクトの作成]にて新規プログラム作成モードに入ります。最初にTextBox3つ、Button2つ、Label2つを配置します。
プロパティーにて文字やパーツのサイズを調整して上の様なレイアウトとしました。次にソースです。TextBox1、2の文字サイズは12ポイントとしています。
ところで、ソース中のcal(36)は何故36か?
1週間は7日。日曜日から始まると最後は土曜日。土曜日が1日の月の場合はCal(6)。そのまま31日まで進むとCal(36)というわけです。
「-----------------」は区切り線なので記述の必要はありません。
青字は自動入力部分で修正の必要はありません。
黒字が入力部分です。
赤字はコメント文なので記述の必要はありません。
-----------------
Public Class Form1
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
' c_year, c_month, i, m, h, r, p は整数型変数
Dim c_year, c_month, i, m, h, r, p As Integer
' Cal() は 36 までの整数型変数
Dim cal(36) As Integer
' TextBox3はスタート時のデータは無し
TextBox3.Text = ""
Dim tuki() As Integer = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
' tuki() は整数型変数で 12 ヶ月分の日数を1月から、
' 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
' と入れる。最初の0は最初に入れるダミーデータとしての「0」。
c_year = Val(TextBox1.Text)
' c_yearに入力した文字を数値に変換して入れる
c_month = Val(TextBox2.Text)
' c_monthに入力した文字を数値に変換して入れる
If c_year Mod 4 = 0 Then tuki(2) = 29
If c_year Mod 100 = 0 Then tuki(2) = 28
If c_year Mod 400 = 0 Then tuki(2) = 29
' 閏年のときは2月[tuki(2)]の最終日を29日に修正する
' 西暦を4で割って余りが出なければ閏年である。
' ただし、続けて100で割って余りが出なければ閏年ではない。
' 常に西暦を400で割って余りが出なければ閏年である。
' 1年365日で1日、閏年は曜日が2日ズレる
' 西暦0001年からの曜日のずれの日数を計算する
m = c_year + (c_year - 1) \ 4 - (c_year - 1) \ 100 + (c_year - 1) \ 400
' 1月1日から前月までの延べ日数を計算する
h = 0
For i = 1 To c_month - 1
h = h + tuki(i)
Next
r = (m + h) Mod 7
' その月の朔日(毎月の第一日)の曜日を求める
' 日数の配列 cal に日付を入れる↓
' cal(i) = cal(i) +1という感じ
p = 1
For i = r To r + tuki(c_month) - 1
cal(i) = p
p = p + 1
Next
' カレンダーを表示する
TextBox3.Text &= vbCr
' 改行する
TextBox3.Text &= Space(1) & "日" & vbTab & "月" & vbTab & "火" & vbTab & "水" & vbTab & "木" & vbTab & "金" & vbTab & "土"
' 日月火水木金土をTabキーを鋏んで表示。
TextBox3.Text &= vbCrLf
' 改行する
For i = 0 To 36
If i Mod 7 = 0 Then TextBox3.Text &= vbCrLf + vbCrLf
' 日数の配列calが36まで7で割って余りが出なければ改行2回を繰り返す。
' vbCrLfは改行、 vbCrLf + vbCrLfで改行を2回
If cal(i) = 0 Then
TextBox3.Text &= vbTab
' calが0(1日以前)であればTextBox3にTabキーを入れる
' vbTabはTabキー
Else
TextBox3.Text &= Str(cal(i)) & vbTab
' TextBaoc3には日数の配列calとTabキーを入れて繰り返す。
End If
Next
End Sub
-----------------
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' プログラムを終了
End
End Sub
End Class
-----------------
ソース記述中にエラーがなければデバッグです。
西暦と月を入力
指定した月のカレンダーが表示。今回はソースが長いので1桁の日の桁が合っていないのはご愛敬。
Visual Studio Basic 2019