メインコンテンツへスキップ

Kutools for Office — 1つのスイート、5つのツールで、もっと多くのことを成し遂げましょう。

Excelでチェックボックスがチェックされたときに別のチェックボックスのチェックを外すにはどうすればよいですか?

Author Siluvia Last modified

多くの実用的なシナリオでは、例えば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. View Code menu
  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機能をお楽しみください!今すぐダウンロード!

最高のオフィス業務効率化ツール

🤖 Kutools AI Aide:データ分析を革新します。主な機能:Intelligent Executionコード生成カスタム数式の作成データの分析とグラフの生成Kutools Functionsの呼び出し……
人気の機能重複の検索・ハイライト・重複をマーキング空白行を削除データを失わずに列またはセルを統合丸める……
スーパーLOOKUP複数条件での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でタブによる編集・閲覧を実現
  • 新しいウィンドウを開かず、同じウィンドウの新しいタブで複数のドキュメントを開いたり作成できます。
  • 生産性が50%向上し、毎日のマウスクリック数を何百回も削減!

全てのKutoolsアドインを一つのインストーラーで

Kutools for Officeスイートは、Excel、Word、Outlook、PowerPoint用アドインとOffice Tab Proをまとめて提供。Officeアプリを横断して働くチームに最適です。

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