エクセルのユーザーフォームに配置したスピンボタンの設定について教えてください。
お世話になります。エクセルの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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) VBA。複数のChangeイベントをまとめる方法 2 2022/03/31 12:03
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) 標準モジュール Public mOnTime As Date Sub sample() '実行プロシ 1 2023/02/22 15:44
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3人のじゃんけんのプログラム
-
DataGridViewでyyyy/MM/dd
-
エクセルVBAで機械の稼働時間を...
-
VB 日付範囲チェック
-
JSPからYYYYMMDDで日付入力する
-
C++で日付判定を行いたい!!
-
今日より前の書き方 マクロ
-
VB6で時刻の範囲に入っているか...
-
テキストボックスにカレンダー...
-
VBAのvalueとvalue2の違いに...
-
エクセルのVBAで日付を検索し転...
-
Eclipseの対応する括弧の強調表...
-
VBAで日付入力しているのですが
-
システム日付とは?
-
ユーザーフォームのラベルに日...
-
excelのVBAについて、以下のコ...
-
VBA 日付・時刻の判別 時刻を認...
-
SQLサーバに日付と時間を入れる
-
コンボボックスに日付を表示する
-
【Excel VBA】条件に合った行の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
ユーザーフォームのラベルに日...
-
VBAの質問になります 行の非表示
-
エクセルのVBAで日付を検索し転...
-
VisualBasic6.0のFormat関数で...
-
DataGridViewでyyyy/MM/dd
-
3人のじゃんけんのプログラム
-
システム日付とは?
-
コンボボックスに日付を表示する
-
今日より前の書き方 マクロ
-
【VBA】土日をスキップして日付...
-
エクセルVBAで機械の稼働時間を...
-
VBA 日付、未来の日付はエラー...
-
DataGridViewの和暦表示について
-
VBAで当月の1日を表示するには...
-
「eclipseで作るカレンダー(ス...
-
テキストボックスにカレンダー...
-
ExcelVBAでSQLサーバの日付時刻...
-
【Excel VBA】条件に合った行の...
-
VBAのapplication.ontime メソ...
おすすめ情報