KutoolsforOffice— 1 つのソリューション、5 つの強力なツール。少ない労力で大きな成果。

Excel でチェックボックスをチェックした際に、他のチェックボックスが自動的に解除されるようにするにはどうすればよいですか?

著者Siluvia変更日

実際の業務では、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 ソリューションを適用する手順:

  1. VBA エディターを開く:チェックボックスを配置したシートタブを右クリックして、コードの表示を選択します。
  2. コードメニューを表示
  3. 次のコードをワークシートのコードウィンドウに貼り付けます:
  4. 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
  5. VBA エディターを閉じて(Alt + Q)、Excel に戻り、チェックボックスをテストしましょう。

📌 重要な注意事項:

  • チェックボックスの名前プロパティ(ラベルではなく)が、コード内の名前と完全に一致しているかご確認ください。
  • グループ分けは次の配列行で定義されています:
    xAllArr = Array("CheckBox1,CheckBox2,CheckBox3", "CheckBox4,CheckBox5,CheckBox6,CheckBox7", "CheckBox8,CheckBox9,CheckBox10")
  • この VBA はActiveX コントロールのチェックボックスでのみ動作し、フォームコントロールではご利用いただけません。
  • この自動化機能を動作させるには、マクロを有効にしてください。

📺 デモ:

🔍 トラブルシューティングのヒント:

  • チェックボックスの名前が重複していないことをご確認ください。
  • すべてのチェックボックスがActiveX コントロールであることをご確認ください。
  • 各チェックボックスのプロシージャは、正しくSetCheckBoxesを呼び出す必要があります。
  • 複数のワークシートにまたがるシナリオでは、クラスモジュールまたは集中制御によるカスタマイズが不可欠です。

💡 代替ソリューション:組み込みの単一選択機能を使いたい場合は、フォームコントロールのオプションボタンをご利用いただけます。ただし、高度なレイアウトやロジック制御が必要な場合には、VBA とチェックボックスを組み合わせる方が柔軟性に優れています。

✨ ヒント:Kutools for Excel のようなツールを使えば、コーディング不要で GUI ベースのチェックボックス管理を簡単に設定できます。


デモ:Excel でチェックボックスをチェックしたときに他のチェックボックスを自動的に解除する

 
Kutools for Excel:300 個を超える便利なツールがすぐそこへ!AI 搭載の機能で、よりスマートでスピーディーな作業をぜひお楽しみください!今すぐダウンロード!

最高の Office 業務効率化ツール

🤖KUTOOLS AI アシスタント:次に基づいてデータ分析を革新します:インテリジェント実行     コード生成  カスタム数式作成    データ分析とチャート生成  拡張機能呼び出し
人気の機能検索・ハイライト、または重複をマーキング     空白行を削除する     データを失うことなく列の結合またはセルを     数式を使用しない四捨五入...
スーパー LOOKUP複数条件 VLookup    複数値 VLookup     複数シート間 VLookup      ファジーマッチ....
高度なドロップダウンリストドロップダウンリストをすばやく作成     連動型ドロップダウンリスト     複数選択可能なドロップダウンリスト....
列マネージャー指定した数の列を追加列の移動非表示列の表示状態を切り替え範囲および列の比較...
注目の機能グリッドフォーカス     デザインビュー   強化された数式バー    ワークブックとシートマネージャー     リソースライブラリ(オートテキスト)  日付ピッカー     ワークシートの統合    暗号化/セルの復号化    リストからメール送信     スーパーフィルター      特殊フィルタ(太字のフォントを持つセルをフィルタリング/斜体/取り消し線。。。) 。。。
トップ15 ツールセット12 テキストツールテキストの追加特定の文字を削除、...)   50+チャートタイプガントチャート、...)   40+実用的関数誕生日に基づいて年齢を計算します、...)   19 挿入ツールQR コードを挿入パスから画像を挿入、...)   12 変換ツール単語に変換する為替レートの変換、...)   7 結合と分割ツール高度な行のマージセルの分割、...)さらに多数
Kutools はお好みの言語でご利用いただけます。英語、スペイン語、ドイツ語、フランス語、中国語、および40+の他の言語をサポートしています!

Kutools for Excel でExcel スキルを強化し、これまでにない効率を体験しましょう。Kutools for Excel は、生産性を高め、時間を大幅に節約できる高度な機能を300 以上提供します。最も必要な機能を今すぐ入手するにはこちらをクリック。。。


Office Tab は Office にタブインターフェースをもたらし、作業を大幅に簡単にします

  • Word、Excel、PowerPoint でタブを使った編集と閲覧を有効にします。Publisher、Access、Visio、Project でもご利用いただけます。
  • 複数のドキュメントを、新しいウィンドウではなく、同じウィンドウ内の新しいタブで開いたり作成したりできます。
  • 日々の生産性を50%も向上させ、毎日数百回ものマウスクリックを削減します!

すべてのKutools アドインが、たった1 つのインストーラーで完結。

Kutools for Officeスイートには、Excel ・Word ・Outlook ・PowerPoint 用のアドインと Office Tab Pro が含まれており、複数の Office アプリを横断して作業するチームに最適です。

ExcelWordOutlookTabsPowerPoint
  • オールインワンスイート— Excel、Word、Outlook、PowerPoint 用アドイン+Office Tab Pro
  • インストーラー1 つ、ライセンス1 つ— 数分でセットアップ可能(MSI 対応)
  • 連携してさらにパワーアップ— Office アプリ全体で生産性が向上
  • 30 日間のフル機能トライアル— 登録不要、クレジットカード不要
  • 最高のお得感— 個別アドイン購入よりお得