ExcelVBAでTextBoxなどのControlオブジェクトを変数制御する

ExcelVBAでTextBoxなどのControlオブジェクトを変数制御する

入力するテキストボックスが複数あって、それを一度にクリアしたい!この範囲のやつだけはロックかけたい!ユーザーフォームってfor~next使えないのかなーと思った時に役に立ちました。


複数のコントロールを抱えたUserForm

120222-1

例えば、こんな感じの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イベントも変数で制御しちゃおうという記事も書きました。

公開日:2012/02/22
更新日:2020/09/10

2件のコメント

  1. VBA初心者 より:

    2020/9/7現在試してみましたが「.Value」を省略しても動作しました。

    For i = 1 To 10
    UserForm1(“TextBox” & i) = “”
    Next

    使用環境
    OS:Windows10 Microsoft 365

    • *you より:

      コメントありがとうございます。確認してみましたが動くようになっていたのですね! 情報ありがとうございました!


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。