- ベストアンサー
EXCEL VBE ユーザフォームのスピンボタンの増減値
excel2000でVBEにてユーザフォームを作りました。そのフォームの中にスピンボタンがあります。スピンボタンのプロパティsmallchangeにて増減値を変えることができるのは知っているのですが、整数しか選択できないようです。作成した当初はデフォルトの1ずつの増減で問題なかったのですが、0.1ずつ増減させる必要が出てきました。どのようにすればよいのでしょうか。excel97なら以下のサイトに方法がかかれていますが、当方excel2000な上に、記述された内容が理解できません。 http://support.microsoft.com/kb/151498/ja よろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
値を表示したいコントロール.value=スピンボタン.value / 10 というコードを書くよう提案したのは、スピンボタンのValueは整数値に限られているからです。 ここでやっていることは、スピンボタンの値が585のとき、値を表示したいコントロールの値は58.5ということにしましょうということです。 したがって、値を表示したいコントロールのChangeイベントでは、 スピンボタン.value = 値を表示したいコントロール.value * 10 としないと、スピンボタンの値が、決めたルールに従ったように変わりません。
その他の回答 (6)
#2です。 ごめんなさい。 #6さんの回答が正解ですね。 何かめんどくさい事考えていました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 単に、TextBox がきちんと数値が入れられるようにしてあれば、後は、以下のようにすればよいのではありませんか? Private Sub SpinButton1_SpinDown() TextBox1.Text = CStr(Val(TextBox1.Text) - 0.1) End Sub Private Sub SpinButton1_SpinUp() TextBox1.Text = CStr(Val(TextBox1.Text) + 0.1) End Sub 値を確保するのは、TextBoxですから、単に、SpinButton の上下のイベントだけがあれば、それでよいのだと思うのですが……。
お礼
Wendy02様、ありがとうございます。 なるほど、このような方法もあるのですね。非常に参考になります。 私の持っている入門書以上のことは考えもつかないので、Changeイベントでしかできないものと考えていました。SpinUp/Downイベントの使い方が理解できました。 本当にありがとうございました。
よく検証していませんが 下記ではどうでしょう まだエラー処理が抜けてるかもです。 Option Explicit Dim myT As Double '------------------------------------------ Private Sub SpinButton1_Change() Dim myAns As Double If Me.TextBox1.Value = "" Then Exit Sub If IsNumeric(TextBox1.Value) = False Then myT = 0 Me.SpinButton1.Value = 0 Exit Sub End If myAns = Me.SpinButton1.Value / 10 Me.TextBox1.Value = myT + myAns End Sub '------------------------------------------ Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.TextBox1.Value = "" Then Exit Sub If IsNumeric(TextBox1.Value) = False Then myT = 0 Me.SpinButton1.Value = 0 Exit Sub End If myT = CDbl(Me.TextBox1.Value) End Sub '------------------------------------------ Private Sub UserForm_Initialize() With Me.SpinButton1 .Max = 200 .Min = -200 End With End Sub
お礼
Kasouken様、ありがとうございます。 今回の私がやりたかったことは、Raistlin様の回答で解決いたしました。 このコードを理解するには大変時間がかかりそうです。 今後の勉強に使わせてもらいます。 また、分からないことがあった時はよろしくお願いいたします。
TextBoxの値をSpinButtonに入れる必要があるのですか?
補足
Kasouken様、ありがとうございます。 上記の質問は、 Private Sub Txt月_Change() Spn月 = Txt月 End Sub が必要ないのではと言うことでよろしいでしょうか。試しに上記コードを削除してみましたが、上記コードがないと、スピンボタンのMin値からいつもスタートすることになるようです。これではちょっと困るのです。 実は、VBAの勉強のために今まで手入力していた日々の体重測定値を、ユーザフォームを使ってやろうとしているのです。それくらいのことにVBA(ユーザフォーム)がいるのかという意見が当然出てくると思いますが、あくまでもVBAの勉強のためです。それで出来上がったものがスマートなものならば、それで手入力の手間が少しでも省けるだろうと考えています。 それで、普通の人なら日々の体重に大きな変化がないと思いますし、変化量も0.1kg単位だと思います。さらに、私の体重だけではなくて家族の分も対応できるようにしたいと思っています。ここで上記コードがないと、スピンボタンのMin値からいつもスタートすることになるので、私の体重だけならMin値の設定を調節すればMin値から0.1kgずつ増やしていく手間はそんなに感じないかもしれませんが、私と20kg以上離れた家族の分をカバーするとなると、手入力の方が早いという結論になりますし、体重の変化に合わせてMin値を設定し直すというのも汎用性に欠けるので、各人の前日の体重をtextboxの値に設定したいと思っています。とりあえずは一人分の入力環境を整えたいと考えています。 皆様に何とか知恵をお借りしたいと思っています。 よろしくお願いいたします。
TextBox1.Value = SpinButton1.Value / 10 では如何ですか?
お礼
Kasouken様、回答ありがとうございます。 ANo.1 Raistlin様の回答と同じ内容と理解しています。ですので、ANo.1 Raistlin様へのお礼にかかせていただいた質問の補足を参照していただいて、何かアドバイスいただけたら幸いです。 よろしくお願いいたします。
- Raistlin
- ベストアンサー率63% (65/102)
スピンボタンのChangeイベントに、 値を表示したいコントロール.value=スピンボタン.value / 10 を記述すればよいのではないでしょうか。 提示のURLは0.1刻みではなく0.25刻みとするときのやり方が書いてありますが、コントロールへのマクロの登録の仕方が異なります(覚えなくて良いと思います)。
お礼
Raistlin様、回答ありがとうございます。 お礼と質問の補足です。 あるVBAマクロの入門書に日付をスピンボタンでテキストボックスに入力する方法が書かれています。以下、その抜粋です。Txt月はテキストボックスのオブジェクト名、Spn月はスピンボタンのオブジェクト名です。MyDate、MyMonthは変数です。 Private Sub Spn月_Change() Txt月 = Spn月 End Sub Private Sub Txt月_Change() Spn月 = Txt月 End Sub Private Sub UserForm_Initialize() MyDate = Date MyMonth = Month(MyDate) Txt月.Text = MyMonth End Sub これを参考にこれまでは1ずつの増減で問題なく使っていました。 Raistlin様のアドバイス通り、試しにスピンボタンのChangeイベントTxt月 = Spn月の部分をTxt月.Value = Spn月.Value / 10としたところ、以下のエラーが発生し、デバッグにてテキストボックスのChangeイベントSpn月 = Txt月が黄色でクローズアップされました。 「実行時エラー'380': Valueプロパティを設定できません。プロパティの値が不正です。」 各式の値を確認したところ、 スピンボタンのChangeイベントにて Txt月.Value = "0.1" Spn月.Value = 1 Txt月.Value = Spn月.Value / 10なので問題ないと思われます。 テキストボックスのChangeイベントにて Spn月 = 1 Txt月 = "0.1" Spn月 = Txt月となっていません。なぜ、Txt月の値がSpn月に代入されないのでしょうか。 入門書以上の内容に対してはお手上げです。皆様の助けが必要です。 どのようにこの問題を解決すればよろしいのでしょうか。どうかよろしくお願いいたします。
お礼
Raistlin様、大変ありがとうございます。 私が期待していた動作が実現できました。 私がやりたかったことは基本が分かっていれば簡単なことだったんですね。私が持っている入門書の説明は分かり難いです。Raistlin様の説明でばっちり理解できました。 本当にありがとうございました。