ExcelVBAでTextBoxなどのControlオブジェクトを変数制御する
入力するテキストボックスが複数あって、それを一度にクリアしたい!この範囲のやつだけはロックかけたい!ユーザーフォームってfor~next使えないのかなーと思った時に役に立ちました。
複数のコントロールを抱えたUserForm
例えば、こんな感じのUserForm。コントロールオブジェクト名は、上からUserForm1.TextBox1~5です。何か入っているとして、これを全部クリアしたい。
普通?に書くと
UserForm1.TextBox1 = "" UserForm1.TextBox2 = "" UserForm1.TextBox3 = "" UserForm1.TextBox4 = "" UserForm1.TextBox5 = ""
やってられるか!というコードですね。
変数で制御!
For i = 1 To 5 UserForm1.Controls("TextBox" & i).Value = "" Next i
こんな感じで出来ちゃいます!らくちん!もちろんTextBoxじゃなくてもいけますし、stepを使えば使える範囲も広がりますね。
For i = 1 To 5 UserForm1("TextBox" & i).Value = "" Next i
ちなみに.Controls
は省略できます!(.Value
は省略できないですが)
2020/9/10追記
.Value 省略しても動くようになっていました! びっくりです。コメントにて教えていただきました、ありがとうございました!
いつも、「あ、あれどうやって書くんだっけ…」と思うので、まとめてみました!
追記
各コントロールオブジェクトのchangeイベントも変数で制御しちゃおうという記事も書きました。
ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。
2件のコメント
2020/9/7現在試してみましたが「.Value」を省略しても動作しました。
For i = 1 To 10
UserForm1(“TextBox” & i) = “”
Next
使用環境
OS:Windows10 Microsoft 365
コメントありがとうございます。確認してみましたが動くようになっていたのですね! 情報ありがとうございました!
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。