excel

【Excel】エクセルでチェックボックスを一括クリアするボタンの作り方

チェックボックスを一括クリアするマクロの作成 - フォームコントロールの確認
当サイトでは記事内に広告を含みます

Excelでアンケート表、点検表、申請書などを作成すると、複数のチェックボックスを一度に未選択へ戻したい場面があります。

1個ずつクリックしてチェックを外す方法では時間がかかり、操作漏れも起こりやすくなります。

そこで便利なのが、ワンクリックでシート内のチェックボックスを一括クリアするボタンです。

この記事では、フォームコントロールのチェックボックスを対象に、VBAマクロの作成、ボタンへの登録、うまく動かない場合の確認方法まで解説します。

チェックボックスを一括クリアするには、対象シートのチェックボックスを順番に取得して値をFalseへ変更するVBAを使う方法が分かりやすい方法です。

フォームコントロールとActiveXコントロールではコードが異なるため、作成したチェックボックスの種類を先に確認しましょう。

 

チェックボックスを一括クリアするマクロの作成

項目 確認 状態
資料の確認 ☑ 完了
入力内容の確認 ☑ 完了
承認者の確認 ☐ 未完了

それではまず、フォームコントロールのチェックボックスをまとめて外すマクロについて解説していきます。

この方法では、同じワークシートに配置されたチェックボックスを対象にして、すべて未チェックの状態へ戻します。

最初に保存形式をExcelマクロ有効ブックのxlsmに変更しておくことが重要です。

通常のxlsx形式で保存すると、VBAコードを保存できません。

 

フォームコントロールの確認

フォームコントロールのチェックボックスかどうかを確認していきます。

対象のチェックボックスを右クリックし、メニューに「マクロの登録」と表示される場合は、通常はフォームコントロールです。

一方で「コードの表示」や「プロパティ」といった項目が中心に表示される場合は、ActiveXコントロールである可能性があります。

本記事の最初のコードは、Excelで一般的に使われるフォームコントロール用です。

チェックボックスを一括クリアするマクロの作成 - フォームコントロールの確認

フォームコントロールは、開発タブの挿入から選べるため、点検表や印刷用の帳票にも利用しやすい特徴があります。

既存の表で種類が混在していると一括処理の対象外が発生するため、同一シートではできるだけ同じ種類にそろえると管理しやすくなります。

 

標準モジュールへのコード入力

続いては、チェックを外すVBAコードを標準モジュールへ入力する操作を確認していきます。

Altキーを押しながらF11キーを押すと、Visual Basic Editorが開きます。

画面上部の挿入から標準モジュールを選び、表示されたコード画面へ次の内容を貼り付けます。

チェックボックスを一括クリアするマクロの作成 - 標準モジュールへのコード入力
Sub チェックボックスを一括クリア()

    Dim cb As CheckBox

    For Each cb In ActiveSheet.CheckBoxes
        cb.Value = xlOff
    Next cb

End Sub

For Eachは、対象となるチェックボックスを1個ずつ取り出して処理するための構文です。

ActiveSheet.CheckBoxesは、現在開いているシート上のフォームコントロールのチェックボックス一覧を意味します。

cb.Value = xlOffは、取り出したチェックボックスの値をオフ、つまり未選択に設定する命令です。

チェックボックスの表示位置やキャプションに関係なく、対象シートのフォームコントロールをまとめて解除できます。

 

マクロの実行と保存

続いては、作成したマクロを試し、ファイルへ保存する手順を確認していきます。

VBA画面を閉じてExcelへ戻り、Altキーを押しながらF8キーを押してください。

マクロ一覧から「チェックボックスを一括クリア」を選択し、実行をクリックすると、選択済みのチェックボックスがすべて外れます。

処理後には、必要に応じて元に戻す操作ができるかではなく、再度チェックを付け直せるかを確認しておくと安心です。

【操作のポイント】マクロを初めて保存するときは、ファイル、名前を付けて保存の順に進み、ファイルの種類でExcelマクロ有効ブックを選択します。

 

シートを指定してチェックボックスを初期化する設定

シート名 対象 クリア後
入力フォーム ☑ ☑ ☑ ☐ ☐ ☐
集計表 ☑ ☑ 変更しない

続いては、表示中のシートではなく、指定したシートだけを確実に初期化する設定を確認していきます。

複数のシートを含むブックでは、ActiveSheetを使うと別のシートを誤ってクリアするおそれがあります。

業務用ファイルでは、シート名を明記して処理対象を限定するコードが安全です。

 

対象シート名を固定する記述

対象のワークシートを固定するコードについて解説していきます。

たとえばシート名が「入力フォーム」の場合は、Worksheets(“入力フォーム”)と記述します。

Sub 入力フォームのチェックをクリア()

    Dim cb As CheckBox

    For Each cb In Worksheets("入力フォーム").CheckBoxes
        cb.Value = xlOff
    Next cb

End Sub

このコードなら、集計表や印刷用シートを表示しているときに実行しても、「入力フォーム」のチェックボックスだけが解除されます。

シート名は全角文字、半角スペース、記号も含めて完全に一致させる必要があります。

シートを指定してチェックボックスを初期化する設定 - 対象シート名を固定する記述

シート見出しを右クリックして名前の変更を選び、実際のシート名を確認してからコードへ入力しましょう。

 

一部のチェックボックスだけを残す条件

シートを指定してチェックボックスを初期化する設定 - 一部のチェックボックスだけを残す条件

続いては、特定のチェックボックスだけを残して初期化する条件を確認していきます。

たとえば「確認済み」という文字を含むチェックボックスは残し、それ以外だけをクリアしたいケースがあります。

Sub 条件付きでチェックをクリア()

    Dim cb As CheckBox

    For Each cb In Worksheets("入力フォーム").CheckBoxes
        If InStr(cb.Caption, "確認済み") = 0 Then
            cb.Value = xlOff
        End If
    Next cb

End Sub

InStrは文字列の中に指定した文字が含まれているかを調べる関数です。

結果が0の場合は「確認済み」が見つからないため、そのチェックボックスをオフにします。

キャプションを条件に使う場合は、利用者が勝手に表示文字を変更しない運用にしておくことが大切です。

 

セルと連動したチェック状態の確認

続いては、チェックボックスにリンクしたセルの扱いを確認していきます。

フォームコントロールのチェックボックスは、書式設定のコントロールタブでセルリンクを設定できます。

チェック時はTRUE、未チェック時はFALSEがリンク先セルに表示されます。

1行目にヘッダーがあるサンプルでは、B2からB10にリンク結果が入り、C列で判定式を使う構成にできます。

数式は次のように入力します。

=IF(B2=TRUE,”確認済み”,”未確認”)

この数式をC2へ入力し、C10までオートフィルすると、各行のチェック状態を文字で判定できます。

一括クリアの実行後はB列がFALSEとなり、C列の表示も自動的に未確認へ変わります。

【操作のポイント】セルリンクを設定すると、チェックボックスの状態をCOUNTIF関数やFILTER関数の条件として利用できます。

 

シート上のボタンへのマクロ登録

操作 クリックする場所 結果
ボタンの作成 開発タブの挿入 フォームボタンを配置
マクロの登録 マクロの登録 一括クリアを実行

続いては、利用者がVBA画面を開かずに処理できるよう、シート上のボタンへマクロを登録する方法を確認していきます。

ボタンを設置すると、点検作業の終了後や入力のやり直し時に、誰でも同じ操作で初期化できます。

ボタンの表示名は「チェックをクリア」など、実行後の状態が分かる短い名称にすると誤操作を減らせます。

 

開発タブとフォームボタンの挿入

まずは、開発タブからフォームコントロールのボタンを挿入する操作について解説していきます。

リボンに開発タブがない場合は、ファイル、オプション、リボンのユーザー設定を開き、開発へチェックを入れます。

開発タブの挿入をクリックし、フォームコントロールの中からボタンを選択してください。

チェック表.xlsm – Excel − □ ×
ファイル ホーム 挿入 ページ レイアウト 数式 データ 校閲 表示 開発
Visual Basic挿入 ▼デザイン モード➤ボタン
fx 
A B C
1 項目 確認 状態
2 資料確認 ☑ 完了
3 チェックをクリア➤ここへボタンを配置

マウスポインターが十字の形に変わったら、シート上でドラッグしてボタンの大きさを決めます。

作成直後にはマクロの登録ダイアログが表示されるため、登録したいマクロを選択できます。

 

マクロの登録と表示名の変更

続いては、ボタンへマクロを登録し、表示名を分かりやすく変更する方法を確認していきます。

マクロの登録ダイアログで「チェックボックスを一括クリア」を選択し、OKをクリックします。

ボタン上の文字を右クリックして編集し、「チェックをクリア」または「すべて解除」と入力してください。

フォームコントロールのボタンは、右クリック時にマクロの登録を選び直せるため、後から別のマクロへ変更することも可能です。

操作ミスを防ぐため、ボタンの近くに「クリックするとすべてのチェックが外れます」といった補足を表示してもよいでしょう。

 

実行前の確認メッセージ

続いては、誤ってボタンを押した場合に備えた確認メッセージを確認していきます。

初期化後に手作業で復元する手間が大きい表では、実行前に確認ダイアログを出す設計が向いています。

Sub 確認後にチェックをクリア()

    Dim cb As CheckBox
    Dim answer As VbMsgBoxResult

    answer = MsgBox("すべてのチェックを外します。よろしいですか?", vbYesNo + vbQuestion)

    If answer = vbYes Then
        For Each cb In Worksheets("入力フォーム").CheckBoxes
            cb.Value = xlOff
        Next cb
    End If

End Sub

MsgBoxは、Excel上にメッセージを表示するVBA関数です。

Yesを選んだ場合だけ処理を進めるため、誤クリックしたときはNoを選択して中止できます。

【操作のポイント】共有ファイルでは、ボタンの実行前に確認メッセージを出すことで、他の利用者による意図しない初期化を防ぎやすくなります。

 

ActiveXチェックボックス用のVBAコード

種類 判別の目安 主な対象
フォームコントロール マクロの登録 CheckBoxes
ActiveXコントロール プロパティ、コードの表示 OLEObjects

続いては、ActiveXコントロールで作られたチェックボックスを一括クリアするコードを確認していきます。

フォームコントロール用のコードを実行しても何も変わらない場合は、ActiveXコントロールを使用している可能性があります。

 

OLEObjectsを使った一括解除

ActiveXチェックボックスの解除方法について解説していきます。

Sub ActiveXのチェックを一括クリア()

    Dim obj As OLEObject

    For Each obj In Worksheets("入力フォーム").OLEObjects
        If TypeName(obj.Object) = "CheckBox" Then
            obj.Object.Value = False
        End If
    Next obj

End Sub

OLEObjectsは、シートに配置されているActiveXコントロールなどのオブジェクトを扱うための集合です。

TypeNameでオブジェクトの種類を調べ、CheckBoxである場合にだけValueをFalseへ変更しています。

同じシートにコマンドボタンやテキストボックスがある場合でも、CheckBoxだけを判定するため、ほかのコントロールを変更しません。

 

フォームコントロールとの使い分け

続いては、フォームコントロールとActiveXコントロールの使い分けを確認していきます。

単純なチェック表や、配布先のExcel環境を幅広く想定する帳票では、フォームコントロールが扱いやすい選択です。

一方、クリック時の細かなイベント処理や、フォントなどの細部まで制御したい場合はActiveXコントロールが候補になります。

初めてVBAで一括クリアを作る場合は、フォームコントロールへ統一するとコードと保守の負担を抑えやすくなります。

 

混在時の確認方法

続いては、2種類のチェックボックスが混在している場合の確認方法を解説していきます。

フォームコントロール用とActiveX用のマクロを別々に作り、それぞれを実行して対象がどちらかを確認できます。

ただし、見た目が似ていても種類が異なると、片方のマクロでは解除されません。

新しく追加するチェックボックスは、既存のものと同じ開発タブの挿入グループから選ぶと、混在を避けられます。

【操作のポイント】動作しないチェックボックスが残った場合は、コードの誤りだけでなく、コントロールの種類の違いを最初に確認します。

 

一括クリアできない場合の確認項目

症状 主な原因 確認先
ボタンを押しても変化しない マクロ無効 セキュリティ警告
一部だけ残る 種類の混在 右クリックメニュー

続いては、ボタンを押してもチェックが外れない場合の確認項目を解説していきます。

問題の多くは、マクロの無効化、保存形式、シート名、コントロールの種類に関係しています。

 

マクロの有効化と保存形式

マクロが実行できる状態かを確認していきます。

ファイルを開いた直後にセキュリティ警告が表示された場合は、内容の有効化をクリックしなければボタンは動作しません。

また、ファイル名の拡張子がxlsxなら、VBAを保存できない形式です。

必ずxlsm形式で保存し直し、信頼できる作成元のファイルだけでマクロを有効にしましょう。

 

シート保護とオブジェクト保護

続いては、シート保護による影響を確認していきます。

シートが保護されていると、チェックボックスの状態変更やオブジェクト操作が制限される場合があります。

校閲タブからシート保護の解除を確認し、必要に応じてパスワードを入力してください。

保護を再設定する場合は、利用者がチェック操作を行える必要があるかも含めて、保護のオプションを見直すことが重要です。

 

デバッグ時の確認手順

続いては、原因を絞り込むための基本的な確認手順を解説していきます。

AltキーとF8キーでマクロ一覧を開き、目的のマクロ名が表示されるかを確認します。

表示されない場合は、コードが標準モジュールではなく、シートモジュールなどへ入力されている可能性があります。

マクロ名が表示され、実行時にエラーが出る場合は、シート名のスペル、ダブルクォーテーション、End Subの不足を順番に見直します。

エラーが出た行は黄色で表示されるため、該当するシート名やオブジェクト名を確認する手がかりになります。

【操作のポイント】不具合の確認時は、重要な元ファイルを複製してからテストし、入力済みのチェック状態を失わないようにします。

 

まとめ エクセルでチェックボックスを一括クリアするボタンの作り方

エクセルのチェックボックスを一括で外すには、フォームコントロールならCheckBoxes、ActiveXコントロールならOLEObjectsを使って値をFalseまたはxlOffに変更します。

もっとも基本的な方法は、対象シートのチェックボックスをFor Eachで順番に取得し、Valueをオフへ設定するVBAです。

作成したマクロをフォームボタンへ登録すれば、VBAの知識がない利用者でもワンクリックで初期化できます。

複数シートを扱うときは、ActiveSheetではなくWorksheets(“入力フォーム”)のようにシート名を指定すると、誤って別のシートを初期化するリスクを下げられます。

また、チェックボックスが解除されない場合は、フォームコントロールとActiveXコントロールの違い、xlsm形式での保存、マクロの有効化、シート保護を確認しましょう。

確認メッセージを表示するコードやセルリンクも組み合わせれば、入力ミスを抑えながら、使いやすいExcelチェック表を作成できます。