このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

ユーザーフォームの入力項目を一括クリアするプログラム(VBA)

2024年4月22日

入力用のユーザーフォームなどだと、転記が終わった後には入力内容をクリアしたいですよね。

そうした時には、入力項目を一括でクリアできるプログラムを作っておくと便利です。

今回紹介するコードは入力項目の数や種類に影響されないため、どんなユーザーフォームに対しても使用できます。

汎用的なプロシージャにしているので、ライブラリとして使ってみてください。

VBAが難しいと感じたら
VBAのプロに代わりに作ってもらうのはいかがでしょうか?
ココナラでVBAの作成請負を受け付けています。お気軽にご相談ください。

入力項目を一括クリアするプログラム

Public Sub CtrlsClear(ctrls As Controls, Optional blListClear As Boolean = False)
'ユーザーフォームの入力項目をすべてクリア
'blListClear:Trueの場合はコンボボックスとリストボックスの候補もクリア
    'コントロールコレクション(Controls)から1つずつ取り出してクリア
    Dim ctrl As Control
    For Each ctrl In ctrls
        Select Case TypeName(ctrl)
            Case "TextBox", "RefEdit"
                ctrl.Value = ""
            Case "CheckBox", "OptionButton", "ToggleButton"
                ctrl.Value = False
            Case "ComboBox", "ListBox"
                ctrl.Value = ""
                If blListClear Then ctrl.Clear
        End Select
    Next
End Sub
'/////呼び出し方法(ユーザーフォーム)/////
Private Sub CommandButton1_Click()
'クリックイベントなどでCtrlsClearプロシージャを呼び出す
    
    Call CtrlsClear(Me.Controls)
    
    'コンボボックス/リストボックスの候補もクリアしたい場合
    Call CtrlsClear(Me.Controls, True)
End Sub

CtrlsClearが入力項目を一括で削除するプロシージャです。

呼び出し方法のようにCall CtrlsClear(Me.Controls)とするとユーザーフォームの入力項目を削除することができます。

Call CtrlsClear(Me.Controls, True)とすると、コンボボックス/リストボックスの候補も削除することができます。

入力項目の一括クリア

画像のように次の7つの入力項目をすべてクリアすることができます。
(画像ではコンボボックス/リストボックスの候補もクリアしてします)

  1. テキストボックス
  2. コンボボックス
  3. リストボックス
  4. チェックボックス
  5. ラジオボタン
  6. トグルボタン
  7. RefEdit

解説

ユーザーフォームの入力項目はすべてコントロールコレクションに含まれます。

そのため、コントロールコレクションを引数ctrlsとして受け取っています。

    'コントロールコレクション(Controls)から1つずつ取り出してクリア
    Dim ctrl As Control
    For Each ctrl In ctrls
        Select Case TypeName(ctrl)
            Case "TextBox", "RefEdit"
                ctrl.Value = ""
            Case "CheckBox", "OptionButton", "ToggleButton"
                ctrl.Value = False
            Case "ComboBox", "ListBox"
                ctrl.Value = ""
                If blListClear Then ctrl.Clear
        End Select
    Next

このコードがメインの処理をしている部分で、コントロールコレクションから1つずつコントロールを取り出し、その種類(TypeName)に応じて分岐処理をさせています。

テキストボックスとRefEditについてはValueを""とします。

チェックボックス、オプションボタン、トグルボタンについてはValueをFalseとします。

コンボボックス、リストボックスもValueを""とするのですが、これらには選択候補があります。

そのため、If blListClear Then ctrl.Clearの部分にてblListClearがTrueの場合のみ候補もクリアしています。

VBAが難しいと感じたら
VBAのプロに代わりに作ってもらうのはいかがでしょうか?
ココナラでVBAの作成請負を受け付けています。お気軽にご相談ください。

VBA

Posted by やろまい