- ベストアンサー
エクセル/マクロ ユーザーフォーム内のテキストボックスの値の制限
エクセルマクロに関する質問です。ユーザーフォーム内にテキストボックス(DayBox1)とスピンボタン(DaySpin1)を設置し、日付を入力できるようにしたいと思っています。スピンボタンには以下のようなコードを与えました。 Private Sub DaySpin1_Change() DayBox1.Value = Day(Now()) + DaySpin1.Value End Sub テキストボックス内の値が現実的な値(1≦DayBox1.Value≦31)に収まるようにするにはどのようなコードを与えるべきでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
SpinButtonのMaxプロパティで設定しておけば良いような気もします。 UserForm_Initializeイベントで設定するなら Private Sub UserForm_Initialize() With Me.SpinButton1 .Min = 1 .Max = Day(DateSerial(Year(Date), Month(Date) + 1, 0)) .Value = Day(Date) Me.TextBox1.Value = .Value End With End Sub Private Sub SpinButton1_Change() Me.TextBox1.Value = Me.SpinButton1.Value End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
スピンボタンなど、格好よいだけで現実的でないと私は思う。 こういう質問をしている間は、シンプルにやるべきだ。 >コードを与えるべきでしょうか 入力規則のようなものがテキストボックスに無い以上、自分で範囲内をチェック(端的に言えばIF文で)するほか無い。 何か良い方法があると考えているのかな。 ーー 私ならユーザーフォームに TextBox1 TextBox2 TextBox3 (年、月、日入力用)と コマンドボタンを貼り付ける。 コマンドボタンのクリックイベントに Private Sub CommandButton1_Click() d = DateSerial(TextBox1, Val(TextBox2) + 1, 1) - 1 '月の月末日 dm = Day(d) '月末 MsgBox dm If Val(TextBox3) > dm Then MsgBox "日付エラー" TextBox3.SetFocus TextBox3 = "" End If End Sub これで月末日超えチェックをする。あと、1以上である必要があるが。 コンボボックスも使われているが、まどろっこしい。 ほかにカレンダーコントロール(まがい)のものを作る・使うこともあるが、エクセル程度では、普通のケースでは、やりすぎと思う。
- bin-chan
- ベストアンサー率33% (1403/4213)
> テキストボックス内の値が現実的な値(1≦DayBox1.Value≦31)に収まるように 11月31日や、2月31日があっても良いなら 31の剰余で常に0~30に収まるように調整する。 Private Sub DaySpin1_Change() DayBox1.Value = ((Day(Now()) + DaySpin1.Value - 1) mod 31) + 1 End Sub
お礼
解決しました。丁寧なご回答ありがとうございました。