• ベストアンサー

エクセル/マクロ ユーザーフォーム内のテキストボックスの値の制限

エクセルマクロに関する質問です。ユーザーフォーム内にテキストボックス(DayBox1)とスピンボタン(DaySpin1)を設置し、日付を入力できるようにしたいと思っています。スピンボタンには以下のようなコードを与えました。 Private Sub DaySpin1_Change() DayBox1.Value = Day(Now()) + DaySpin1.Value End Sub テキストボックス内の値が現実的な値(1≦DayBox1.Value≦31)に収まるようにするにはどのようなコードを与えるべきでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

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

ocypodidae
質問者

お礼

解決しました。丁寧なご回答ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

スピンボタンなど、格好よいだけで現実的でないと私は思う。 こういう質問をしている間は、シンプルにやるべきだ。 >コードを与えるべきでしょうか 入力規則のようなものがテキストボックスに無い以上、自分で範囲内をチェック(端的に言えば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)
回答No.1

> テキストボックス内の値が現実的な値(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

関連するQ&A

専門家に質問してみよう