
エクセルのユーザーフォームに配置したスピンボタンの設定について教えてください。
お世話になります。エクセルの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

No.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
-------------------------------------------------------------------------------------------
凄い!できました!!!
こんな方法もあるんですね、知らなかったです!
こうなったらいいなあと思っていた通りの動作です、とても嬉しいです…!!
本当に、ありがとうございます!
No.2
- 回答日時:
念の為に確認ですが「前月26日から当月25日までの間で設定」で良いのでしょうか?
当日が25日までは「前月26日から当月25日までの間で設定」、26日以降は「当月26日から来月25日までの間で設定」ではないのでしょうか?
あっ!そ、そうです!
その通りです、日本語がおかしかったですね、すみません。
「今日」が2017/9/5だと「2017/8/26〜2017/9/25」ですが
「今日」が例えば2017/9/27とかだったとすれば
「2017/9/26〜2017/10/25」
を範囲にしたいです。
No.1
- 回答日時:
(´・ω・`)
その使い方なら…
年と月と日をそれぞれ指定して日付とすれば良いだけと思うのは自分だけでしょうか。
なんで日を引き算して前月に戻ろうとするの?
戻る日は決まっているのですよね。
・・・
日を引き算して前月へ戻そうとしているので気づいていると思いますが、
-1月を指定すると、前年の12月になります。
回答ありがとうございます。
説明足らずで申し訳ありません。実はこのフォームとは別の入力フォームを作成し、日付の指定に上のようなスピンボタンを用いています。ただ、フォームが大きく、写真にすると縮小されて潰れてしまうので、知りたい部分だけを抜き取った簡易フォームを作り質問させて頂きました。
元のフォームで年から日までをひとまとめで使用しているので、バラしてしまうと元のフォームに記述し直した時動かなくなる可能性があり、「yyyy年m月d日」のまとまりのまま戻れる方法を探しています。
せっかく考えて頂いたのに、こちらの説明不足があって本当に申し訳ないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
ExcelのVBAコードについて教え...
-
システム日付とは?
-
VBAのオーバーフローについて質...
-
エクセルのVBAで日付を検索し転...
-
ユーザーフォームのラベルに日...
-
VB6.0 のformat関数について
-
日付の差を求めるには
-
このPASMOの通知来ないようにで...
-
iPhoneのプッシュ通知の過去履...
-
ラインの通知設定有りにしてる...
-
スマホにYahooニュースが来ない...
-
Androidのスマホについてです。...
-
CANONのZoomBrowser EXインスト...
-
iPhoneのメールで、特定の人だ...
-
スマホ 電話の着信・受信履歴が...
-
アプリケーションの自動アップ...
-
g08を工場出荷時に戻したい!
-
iPhone7を使用しているのですが...
-
ゼンリーについてです。 充電も...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
DataGridViewでyyyy/MM/dd
-
エクセルのVBAで日付を検索し転...
-
ユーザーフォームのラベルに日...
-
VisualBasic6.0のFormat関数で...
-
1本あたり○円と表示する時どの...
-
システム日付とは?
-
Googleフォームで選択肢に応じ...
-
指定した日付が、その月の第何...
-
VB6.0 のformat関数について
-
VBA 日付、未来の日付はエラー...
-
コンボボックスに日付を表示する
-
JSPからYYYYMMDDで日付入力する
-
テキストボックスに今日の日付...
-
【VBA】土日をスキップして日付...
-
VBAのapplication.ontime メソ...
-
VBでDate型の大小比較がうまく...
-
誕生日より星座を表示するには
-
特定の項目セルにスキャン(入...
-
VBAで日付入力しているのですが
おすすめ情報