「はぁ……。この入力フォーム、項目が30個もあるよ。リセットボタンを作るのに、また1行ずつ TextBox1 = “” って書かなきゃいけないの? 指が腱鞘炎になっちゃうよ……」
こんな経験はありませんか?
現場で「みんなが入力しやすいフォームを!」と張り切って作ったは良いものの、項目が増えるたびにコードも長くなり、修正するだけで日が暮れる。結局、コピペミスで特定のボックスだけがクリアされないというトラブルも発生しやすくなります。
しかし、VBAの「ループ処理」を使えば、項目が10個でも100個でも、たった数行のコードで一気に操作可能です。
今回は、実務で今日から活用できる「コントロールの一括操作」について分かりやすく解説していきます。
個別指定から卒業してコントロールをループ処理する
通常、フォームのテキストボックスを空にするには、各コントロールの名前を個別に指定する必要があります。
しかし、VBAにはフォーム上に配置されたパーツ(コントロール)を「ひとまとめのグループ」として扱う便利な仕組みが用意されています。この仕組みを「Controlsコレクション」と呼びます。
コピペで使える一括リセットのサンプルコード
ここでは「全テキストボックスを一括で空にするコード」をご紹介します。
Private Sub btnReset_Click()
Dim ctrl As Control
' フォーム内のパーツ(コントロール)を1つずつ取り出してループ
For Each ctrl In Me.Controls
' 取り出したパーツの種類が「テキストボックス」かどうかを判定します
If TypeName(ctrl) = "TextBox" Then
' テキストボックスだったら、中身を空にします
ctrl.Value = ""
End If
Next ctrl
MsgBox "すべての入力をリセットしました!", vbInformation, "完了"
End Sub
ポイント
このコードの最大のメリットは、入力項目が増加してもコードを一切書き直す必要がないという点にあります。
例えば、急な仕様変更で入力項目が30個だったところ、50個に増えたとします。1つずつ書いていた人は、追加で20行も書かなきゃいけません。
でも、このループ処理を使っていれば、コードはそのまま自動で50個分処理してくれます。これで修正にかかる時間は大幅に削減され、長期的な業務効率化へとつながります!
応用編:チェックボックスも一括でOFFにする方法
「テキストボックスだけじゃなく、設置されているチェックボックスも同時に全部リセットしたい!」という時もありますよね。
これもとても簡単です。先ほどの TypeName(ctrl) = “TextBox”の部分を”CheckBox”に変えるだけで対応可能です。
もし「特定のグループだけ操作したい」という場合は、パーツの「タグ(Tagプロパティ)」を利用する応用技もありますが、まずはこのTypeNameをマスターするだけで、日々の事務作業の効率は劇的に上がります。
ぜひ活用してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント