- ベストアンサー
Excel ユーザーフォームの入力値をシートに転記
Excelでユーザーフォームを作りました。 ユーザーフォームには、テキストボックスを2個、ボタンを1個("記入"という文字が入っています)置いてあります。 テキストボックスに入れた数値をSheet1のセル"C24","C25"に転記したいので、ユーザーフォームのコードを次のようにしましたが、エラーメッセージは出ないかわりに何も動いてくれません。 「どこ」と「なに」が違いどうするのが正しいのか教えて下さい。よろしくお願いします。 Private Sub Tbox1_Change() a = Tbox1.Value End Sub ---------------------------- Private Sub Tbox2_Change() b = Tbox2.Value End Sub ---------------------------- Sub 記入Button_Click() '入力値をSheet1に転記 Dim a As Range Dim b As Range Sheets("Sheet1").Select Set a = Range("C24") Set b = Range("C25") End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >Sheet1のセル"C24","C25"に転記 なら、単に、TextBox のそれぞれのControlSource に、Sheet1!C24, Shee1!C25 と書けばよいのですが。 ただ、#2さんも触れていますが、初歩的な基礎がまだ足りないようですね。1週間もすれば、この程度のコードは書けるようになりますから、何か、適当な参考書を手に入れて参照したほうがよいです。 変数のプロパティ ← 値 Set オブジェクトの変数 =実際のセル こうして変数に格納されます。
その他の回答 (3)
- J2J
- ベストアンサー率22% (2/9)
Rangeの概念はよく分からないのですが、 気が付いたのは、 ・a,bがプロシャージャーレベル変数であるので、 プロシャージャ[記入Button_Click(])内でしか使えず Tbox■_changeで使用するためには、モジュールレベル変数にして、 そのモジュール全体で使用できる必要があると思います. ・オブジェクト型変数 Renge に value は代入できないのでは? (こっちが微妙) valueで代入するなら、変数宣言をintegerにしてみてはいかがでしょうか? と思います. よって、私が直したモジュールは、 --------------------------------------- Dim a As Integer'モジュールレベル変数 Dim b As Integer Private Sub TBox1_Change() a = TBox1.Value End Sub Private Sub TBox2_Change() b = TBox2.Value End Sub Private Sub 記入Button_Click() Sheets("Sheet1").Select Range("C24") = a Range("C25") = b End Sub ------------------------------------- また、今回の処理では、TBox■_Change()はあまり意味をなしません. さらに、changeで毎回監視をしている場合、複雑な処理をする時に、 コンピュータがさらに遅くなる場合があります. よって、tbox■_change()のプロシャージャは消去して ----------------------------------------- Private Sub 記入Button_Click() Dim a As Integer Dim b As Integer Sheets("Sheet1").Select b = TextBox2.Value a = TextBox1.Value Range("C24") = a Range("C25") = b End Sub ------------------------------------- または ------------------------------------- Private Sub 記入Button_Click() Dim a As Integer Dim b As Integer Sheets("Sheet1").Select Range("C24") = TBox1.Value Range("C25") = TBox2.Value End Sub ------------------------------------- だけでも良いと思います もちろん、#1さんの形がプログラムとして一番奇麗だと思います #1さんの Tbox1 と Tbox2 の後に.value を付けたら、数字として使用できると思います.(未確認)
お礼
J2Jさん ありがとうございました。 ControlSource の記述で、とりあえずの問題は片付きました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
何も動かないのではなく、指示された通りに動作しただけです。 >「どこ」と「なに」が違いどうするのが正しいのか教えて下さい。よろしくお願いします。 変数の使い方、使われ方の理解が無いですね。 >a = Tbox1.Value 「Sub Tbox1_Change()」内部で定義した a と言う変数に値を格納。し、プロシージャの終了とともに消滅。 >Set a = Range("C24") 「Sub 記入Button_Click()」内部で定義した a と言う変数にセルC24を定義(セット)し、プロシージャの終了とともに消滅。 双方の a と言う変数は全く無関係な変数なので、同じ値を共有する事は出来ません。 また、双方とも変数への格納なので、変数の値をどこかに格納する記述がありません。 プロシージャ間で変数を共有する場合は「グローバル変数」を定義する必要があります。
お礼
hana-hana3さん ありがとうございました。 ControlSource の記述で、とりあえずの問題は片付きました。 変数のこと、いただいた解説でだんだんわかってきました。勉強いたします。
- bonaron
- ベストアンサー率64% (482/745)
Sub 記入Button_Click() '入力値をSheet1に転記 Worksheets("Sheet1").Range("C24")=Me.Tbox1 Worksheets("Sheet1").Range("C25")=Me.Tbox2 End Sub だけで良いのでは?(未確認)
お礼
bonaronさん ありがとうございました。 ControlSource の記述で、とりあえずの問題は片付きました。
お礼
Wendy02さん ありがとうございました。簡単なんですね。 ControlSourceをまだ知りませんでした。勉強いたします。 次にボタン2 の Control に移ります。またよろしくお願いします。