Excelでチェックボックスがチェックされたときに別のチェックボックスのチェックを外すにはどうすればよいですか?
多くの実用的なシナリオでは、例えばExcelで長い購入リストを管理する際に、特定のカテゴリやグループ内で1つの選択肢だけを選択可能にしたい場合があります。たとえば、特定のカテゴリが予算を超えた場合、各グループで1つだけが選択されるように項目を再選択する必要があるかもしれません。大きなリストで手動でチェックボックスを管理するのは非効率的でミスしやすいものです。特にカテゴリの数が増えると大変です。このプロセスを合理化しミスを減らすために、新しいチェックボックスを選択するとそのグループ内の以前に選択していたチェックボックスが自動的に外れるようにExcelを設定できます。これにより、常に各カテゴリで1つのみの選択が保証されます。本記事ではこれを実現するためのステップバイステップガイドを提供し、作業効率と信頼性を向上させます。
新しいチェックボックスがチェックされたときにVBAコードを使用して別のチェックボックスのチェックを外す
プロセスを説明するために、上記のビデオに示されている状況を考えてみましょう。CheckBox1からCheckBox10というラベルの付いた10個のチェックボックスがあり、これらは異なる購入カテゴリを表す3つのグループに整理されています。
✅ グループ構成:
- グループ1: CheckBox1, CheckBox2, CheckBox3
- グループ2: CheckBox4, CheckBox5, CheckBox6, CheckBox7
- グループ3: CheckBox8, CheckBox9, CheckBox10
各グループ内では、一度に1つのチェックボックスのみを選択できるようにします。新しいチェックボックスが選択された場合、同じグループ内の他のチェックボックスは自動的に選択解除されます。これはラジオボタンのような動作ですが、チェックボックスを使用しています。
🧩 VBAソリューションを適用するためのステップ:
- VBAエディターを開く: チェックボックスが配置されているシートタブを右クリックし、「コードの表示」を選択します。
- 次のコードをワークシートのコードウィンドウに貼り付けます:
- VBAエディターを閉じる (Alt + Q) し、Excelに戻ってチェックボックスをテストします。

Dim xBol As Boolean
'Updated by Extendoffice
Private Sub CheckBox1_Change(): SetCheckBoxes "CheckBox1": End Sub
Private Sub CheckBox2_Change(): SetCheckBoxes "CheckBox2": End Sub
Private Sub CheckBox3_Change(): SetCheckBoxes "CheckBox3": End Sub
Private Sub CheckBox4_Change(): SetCheckBoxes "CheckBox4": End Sub
Private Sub CheckBox5_Change(): SetCheckBoxes "CheckBox5": End Sub
Private Sub CheckBox6_Click(): SetCheckBoxes "CheckBox6": End Sub
Private Sub CheckBox7_Click(): SetCheckBoxes "CheckBox7": End Sub
Private Sub CheckBox8_Click(): SetCheckBoxes "CheckBox8": End Sub
Private Sub CheckBox9_Click(): SetCheckBoxes "CheckBox9": End Sub
Private Sub CheckBox10_Click(): SetCheckBoxes "CheckBox10": End Sub
Private Function SetCheckBoxes(mCheckBoxName As String)
Dim xAllArr, xArrItem
Dim xI, xJ
If Not xBol Then Exit Function
xAllArr = Array("CheckBox1,CheckBox2,CheckBox3", _
"CheckBox4,CheckBox5,CheckBox6,CheckBox7", _
"CheckBox8,CheckBox9,CheckBox10")
For xI = LBound(xAllArr) To UBound(xAllArr)
If InStr(xAllArr(xI), mCheckBoxName) > 0 Then
xBol = False
xArrItem = Split(xAllArr(xI), ",")
For xJ = LBound(xArrItem) To UBound(xArrItem)
If xArrItem(xJ) <> mCheckBoxName Then
Me.OLEObjects(xArrItem(xJ)).Object.Value = False
End If
Next
End If
Next
xBol = True
End Function
Private Sub Worksheet_Activate(): xBol = True: End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range): xBol = True: End Sub
📌 重要な注意点:
- チェックボックスの名前プロパティ(ラベルではありません)がコード内の名前と正確に一致していることを確認してください。
- グループ化は配列行で定義されています:
xAllArr = Array("CheckBox1,CheckBox2,CheckBox3", "CheckBox4,CheckBox5,CheckBox6,CheckBox7", "CheckBox8,CheckBox9,CheckBox10")
- このVBAはActiveXコントロールのチェックボックスでのみ機能し、フォームコントロールでは動作しません。
- この自動化を機能させるには、マクロが有効になっている必要があります。
📺 デモ:
🔍 トラブルシューティングのヒント:
- 重複したチェックボックス名がないか確認してください。
- すべてのチェックボックスがActiveXコントロールであることを確認してください。
- 各チェックボックス手順は
SetCheckBoxes
を正しく呼び出す必要があります。 - 複数シート間でのシナリオは、クラスモジュールまたは集中制御によって適応させる必要があります。
💡 代替ソリューション: フォームコントロールのオプションボタンを使用して、組み込みの単一選択動作を実現することもできます。ただし、高度なレイアウトやロジック制御には、VBA+チェックボックスの方が柔軟性があります。
✨ ヒント: Kutools for Excelのようなツールを使用すると、コーディングなしでGUIベースのチェックボックス管理が可能です。
デモ: Excelでチェックボックスがチェックされたときに別のチェックボックスのチェックを外す
最高のオフィス業務効率化ツール
🤖 | Kutools AI Aide:データ分析を革新します。主な機能:Intelligent Execution|コード生成|カスタム数式の作成|データの分析とグラフの生成|Kutools Functionsの呼び出し…… |
人気の機能:重複の検索・ハイライト・重複をマーキング|空白行を削除|データを失わずに列またはセルを統合|丸める…… | |
スーパーLOOKUP:複数条件でのVLookup|複数値でのVLookup|複数シートの検索|ファジーマッチ…… | |
高度なドロップダウンリスト:ドロップダウンリストを素早く作成|連動ドロップダウンリスト|複数選択ドロップダウンリスト…… | |
列マネージャー:指定した数の列を追加 |列の移動 |非表示列の表示/非表示の切替| 範囲&列の比較…… | |
注目の機能:グリッドフォーカス|デザインビュー|強化された数式バー|ワークブック&ワークシートの管理|オートテキスト ライブラリ|日付ピッカー|データの統合 |セルの暗号化/復号化|リストで電子メールを送信|スーパーフィルター|特殊フィルタ(太字/斜体/取り消し線などをフィルター)…… | |
トップ15ツールセット:12 種類のテキストツール(テキストの追加、特定の文字を削除など)|50種類以上のグラフ(ガントチャートなど)|40種類以上の便利な数式(誕生日に基づいて年齢を計算するなど)|19 種類の挿入ツール(QRコードの挿入、パスから画像の挿入など)|12 種類の変換ツール(単語に変換する、通貨変換など)|7種の統合&分割ツール(高度な行のマージ、セルの分割など)|… その他多数 |
Kutools for ExcelでExcelスキルを強化し、これまでにない効率を体感しましょう。 Kutools for Excelは300以上の高度な機能で生産性向上と保存時間を実現します。最も必要な機能はこちらをクリック...
Office TabでOfficeにタブインターフェースを追加し、作業をもっと簡単に
- Word、Excel、PowerPointでタブによる編集・閲覧を実現。
- 新しいウィンドウを開かず、同じウィンドウの新しいタブで複数のドキュメントを開いたり作成できます。
- 生産性が50%向上し、毎日のマウスクリック数を何百回も削減!
全てのKutoolsアドインを一つのインストーラーで
Kutools for Officeスイートは、Excel、Word、Outlook、PowerPoint用アドインとOffice Tab Proをまとめて提供。Officeアプリを横断して働くチームに最適です。





- オールインワンスイート — Excel、Word、Outlook、PowerPoint用アドインとOffice Tab Proが含まれます
- 1つのインストーラー・1つのライセンス —— 数分でセットアップ完了(MSI対応)
- 一括管理でより効率的 —— Officeアプリ間で快適な生産性を発揮
- 30日間フル機能お試し —— 登録やクレジットカード不要
- コストパフォーマンス最適 —— 個別購入よりお得