質問: "7月" End If End Sub ``` 上記コードのように、上期ならば**1月、2月、3月...、 下期ならば7月、8月、9月...、と、同じコードをずらずら書いていくのは成果物として見栄えが悪い為、関数や変数(例:m1~m6)を使って、1~6のラベルに月を加算していけるようなコードに仕上げたい**と思っています。 試行錯誤したところ、**DateSerial関数やDateAdd関数**などが当てはまりそうな気はしたのですが、 **この場合どのように記述すればよいのか**行き詰ってしまい、質問をさせていただくことにいたしました。 この関数を使用したものでも、また他の方法でも、皆様のお考えを伺いたく存じます。 また、**ラベルに出力したい値は、「○月」のみ**です。 1**のラベルに1月または7月から始まり、6までに一月ずつ加算された値を出したい**です。 サンプルコードなどございますとますます参考になります。 有職者の皆様、ご教示のほどよろしくお願いいたします。
回答: 見た目は日付に紐付いているように見えますが、実際やっていることは数値の足し上げですよね。 つまり、初期値(1か7)に対して、+1、+2、と各ラベルにやっているのと変わらないのではないでしょうか。 ``` Private Sub cmb期_AfterUpdate() Dim i As Long ' ループ変数 Dim lngStart As Long ' 初期値 Const H1 = "01" Const H2 = "07" If Me!cmb期.Value In (H1,H2) Then ' 一応正しい選択肢なのかだけチェック lngStart = CLng(Me!cmb期.Value) For i = 0 to 5 Forms![メインフォーム名]![サブフォーム名].Form.Controls("label月_" & CStr(i+1)).Caption = CStr(lngStart + i) & "月" ' ラベルを変数を利用して指定、月を初期値+ループ変数として指定 Next End If End Sub ``` テストせず記憶で書いているのでどこか間違っているかもしれませんが、ラベル名が連番になっている前提で上記のようなコードでいいのではないでしょうか。 ※ただし、初期値が8以降、つまり終わりまでの間に12月→1月という表示がある場合はそれを踏まえた書き方をする必要があります。13月にならないように。 追記 === ``` Private Sub cmb期_AfterUpdate() Dim i As Long ' ループ変数 Dim lngStart As Long ' 初期値 Const H1 = "01" Const H2 = "07" If Me!cmb期.Value = H1 OR Me!cmb期.Value = H2 Then ' 一応正しい選択肢なのかだけチェック lngStart = CLng(Me!cmb期.Value) ' この時点で lngStart は 1 か 7なはず For i = 0 to 5 Forms![メインフォーム名]![サブフォーム名].Form.Controls("label月_" & CStr(i+1)).Caption = CStr(lngStart + i) & "月" ' ラベルを変数を利用して指定、月を初期値+ループ変数として指定 Next End If End Sub ```