
taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
どうも、taka(@takabou63)です(^^♪
今回はExcelVBAのユーザーフォームでテキストボックスが大量使用する場合になった時に役立つ対処法をご紹介します(^^)/
VBAでユーザーフォームを使う場合、テキストボックスはよく使うコントロールですので10や20使うこともあるかと思います。
そのテキストボックスを一つずつ全て操作するのは大変ですし、大変な手間もかかってしまいます(;^ω^)
たとえばですが、ユーザーフォーム上にテキストボックスが5個設置されている場合、コマンドボタンを押すとテキストボックスの内容がAからEまで反映されるとします、この場合のコードは
Range("A1")=Textbox1.value Range("B1")=Textbox2.value Range("C1")=Textbox3.value Range("D1")=Textbox4.value Range("E1")=Textbox5.value
このように書くか、cells()で書いていくのが多いと思います。
ですが、上記のように書いていくにしても5個のテキストボックスならまだいいですが、10個のテキストボックスだったら?20個のテキストボックスだったらどうでしょう?
作業量はかなり増えてしまうと思います(;^ω^)
そしてセルへの書き込み以外でも使う場合はまた同じ作業をしなければいけませんし、コード数は増え、可読性も失われてしまい、これはどの処理なのか?
など作っていてわかりずらくなってしまいます。
なので今回ご紹介する方法を使いすっきりさせてあげましょう(^_-)-☆
Controlsコレクションを使ってVBAのコントロールを変数で処理
というわけで、変数で処理することにより、このようになりました。
Dim i As Long For i = 1 To 5 Cells(, i).Value = Controls("TextBox" & i).Value Controls("TextBox" & i).Value = "" Next i
注目はControlsコレクションです、上記にはControls(“TextBox” & i).Valueと書いてあります、ControlsコレクションによってTextBoxのオブジェクトに変数を付けることが可能になります。※もちろんTextBoxの部分をcomboboxなどにすることも可能です.
ちなみにControlsは省略可能です
Dim i As Long For i = 1 To 5 Cells(, i).Value = UserForm1("TextBox" & i).Value Controls("TextBox" & i).Value = "" Next i
このようにすることも可能です。
VBAのControlsコレクションの解説
簡単に説明をさせていただくと、TextBoxにiという変数をつけて処理をする、なので上記の場合は変数iは1から5までとしているのでTextBoxの1~5までの処理をしますよ~。という事になります。
そしてCells(, i).Value はCells(, 1~5)の内容はTextBoxの1~5ですよ=という処理をしてあげているわけです。
そして最後のControls(“TextBox” & i).Value = “”はTextBox1~5の内容を空にしますよ~という処理です。
この方法を使えばTextBoxの20だろうが30だろうが楽に処理ができます(^^♪上記の「For i = 1 To 5」の5の部分の数字を20や30に変えればいいだけなので(笑)
この方法を使うときの注意点は繰り返し処理ということです。おそらくこの方法を使えばかなりのことができますが、一括で処理したい場合などがあった場合この方法が使えません、見かけ上は一括に見えますが、高速で繰り返しているだけなのでそこのところをお忘れがないようにしてください。私はそれで少し困ったことがありました(;’∀’)
フォロー・チャンネル登録お願いします
VBA以外についてのブログはこちら↓
https://yb-log.com/■Twitterフォロー
Follow @taka_pc1027■YouTubeチャンネル登録
コメントを残す