アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのユーザーフォームに配置したスピンボタンの設定について教えてください。

お世話になります。エクセルのVBAについてお力をお貸しください。
エクセルのユーザーフォーム上にて
ラベル01に今日の日付・02に曜日を表示し、その横に配置したスピンボタン1でラベル01の日付とラベル02の曜日を変えられるようにしました。

このスピンボタンで表示できる上限と下限を設定して、前月26日から当月25日までの間で設定できるようにしたいです。(今日の日付2017/9/5で言えば、2017/8/26〜2017/9/25まで)
上限25日までは設定できたのですが、30日までしかない月と31日まである月、更にうるう年のある2月の事を考えると、下限の設定をどのようにしたら良いかわかりません。

前月26日まで戻れるよう設定するには、どのようなコードを書けばいいか、どうかお教え願います。

以下現在のコードです。


Private Sub CommandoButton1_Click()
Unload Me
End Sub


Private Sub UserForm_Initialize()

Me.Label01.Caption = Format(Date, "yyyy年m月d日")
Me.SpinButton1.Max = 25 - Format(Date, "d") ' 加算限度(当月25日まで)

Me.SpinButton1.Value = 0

End Sub


Private Sub SpinButton1_Change()

Me.Label01.Caption = Format(Date, + Me.SpinButton1.Value, "yyyy年m月d日")

Me.Label02.Caption = Format(Date, + Me.SpinButton1.Value, "aaaa")

End Sub

「エクセルのユーザーフォームに配置したスピ」の質問画像

A 回答 (3件)

それでしたら、スピンボタンの上限や下限など決めずに日付を限定した方が簡単だと思います。



標準モジュールに次のように変数を定義しておきます。これを戻り値としても使えます。
Public 日付 As Date

-------------------------------------------------------------------------------------------
Private Sub CommandoButton1_Click()
Unload Me
End Sub

Private Sub SpinButton1_SpinDown()
Dim 初日 As Date
If Day(Date) <= 25 Then
初日 = CDate(Format(DateAdd("m", -1, Date), "yyyy/mm") & "/26")
Else
初日 = CDate(Format(Date, "yyyy/mm") & "/26")
End If
If 日付 > 初日 Then
日付 = 日付 - 1
Me.Label01.Caption = Format(日付, "yyyy年m月d日")
Me.Label02.Caption = Format(日付, "aaaa")
End If
End Sub

Private Sub SpinButton1_SpinUp()
Dim 終日 As Date
If Day(Date) <= 25 Then
終日 = CDate(Format(Date, "yyyy/mm") & "/25")
Else
終日 = CDate(Format(DateAdd("m", 1, Date), "yyyy/mm") & "/25")
End If
If 日付 < 終日 Then
日付 = 日付 + 1
Me.Label01.Caption = Format(日付, "yyyy年m月d日")
Me.Label02.Caption = Format(日付, "aaaa")
End If
End Sub

Private Sub UserForm_Initialize()
日付 = Date
Me.Label01.Caption = Format(日付, "yyyy年m月d日")
Me.Label02.Caption = Format(日付, "aaaa")
End Sub
-------------------------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

凄い!できました!!!
こんな方法もあるんですね、知らなかったです!
こうなったらいいなあと思っていた通りの動作です、とても嬉しいです…!!
本当に、ありがとうございます!

お礼日時:2017/09/05 10:46

念の為に確認ですが「前月26日から当月25日までの間で設定」で良いのでしょうか?



当日が25日までは「前月26日から当月25日までの間で設定」、26日以降は「当月26日から来月25日までの間で設定」ではないのでしょうか?
    • good
    • 0
この回答へのお礼

あっ!そ、そうです!
その通りです、日本語がおかしかったですね、すみません。
「今日」が2017/9/5だと「2017/8/26〜2017/9/25」ですが

「今日」が例えば2017/9/27とかだったとすれば
「2017/9/26〜2017/10/25」
を範囲にしたいです。

お礼日時:2017/09/05 10:01

(´・ω・`)


その使い方なら…

年と月と日をそれぞれ指定して日付とすれば良いだけと思うのは自分だけでしょうか。
なんで日を引き算して前月に戻ろうとするの?
戻る日は決まっているのですよね。

・・・
日を引き算して前月へ戻そうとしているので気づいていると思いますが、
-1月を指定すると、前年の12月になります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
説明足らずで申し訳ありません。実はこのフォームとは別の入力フォームを作成し、日付の指定に上のようなスピンボタンを用いています。ただ、フォームが大きく、写真にすると縮小されて潰れてしまうので、知りたい部分だけを抜き取った簡易フォームを作り質問させて頂きました。
元のフォームで年から日までをひとまとめで使用しているので、バラしてしまうと元のフォームに記述し直した時動かなくなる可能性があり、「yyyy年m月d日」のまとまりのまま戻れる方法を探しています。
せっかく考えて頂いたのに、こちらの説明不足があって本当に申し訳ないです。

お礼日時:2017/09/05 10:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!