如何在 Excel 中勾選一個核取方塊時,自動取消勾選另一個?
在許多實際應用情境中,例如使用 Excel 管理冗長的採購清單時,您可能會需要確保在特定類別或群組內僅能選擇一個選項。舉例來說,若某些類別超出預算,您可能必須重新挑選項目,使每個群組僅保留一個勾選項目。在大型清單中手動管理核取方塊不僅效率低下,還容易出錯,尤其當類別數量增加時更是如此。為簡化此流程並降低錯誤率,您可以設定 Excel,讓使用者在群組內勾選新項目時,自動取消先前已選的項目,確保每個類別在任何時間點都只有一個選項被選取。本文提供逐步指南,協助您輕鬆實現此功能,讓工作流程更高效、更可靠。
透過 VBA 程式碼,在勾選新核取方塊時自動取消勾選其他核取方塊
為說明操作流程,請參考上方影片所示情境:您有十個核取方塊,標示為 CheckBox 1 至 CheckBox 10,並依不同採購類別分為三個群組。
✅ 群組結構:
- 群組 1:CheckBox 1、CheckBox 2、CheckBox 3
- 群組 2:CheckBox 4、CheckBox 5、CheckBox 6、CheckBox 7
- 群組 3:CheckBox 8、CheckBox 9、CheckBox 10
每個群組內僅可同時選取一個核取方塊。當您勾選新的核取方塊時,同群組內的其他項目會自動取消勾選——效果如同選項按鈕,卻以核取方塊呈現。
🧩 套用 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 這類工具提供圖形化介面,讓您無需編寫程式碼即可輕鬆管理與設定核取方塊。
示範:在 Excel 中勾選一個核取方塊時自動取消勾選另一個
最佳 Office 生產力工具
| 🤖 | KUTOOLS AI 助手:基於以下內容徹底革新數據分析:智慧執行 | 產生程式碼| 建立自訂公式 | 分析資料並產生圖表| 呼叫增強函數…… |
| 熱門功能:尋找、醒目提示或標記重複值 | 刪除空白行 | 合併列或儲存格而不遺失資料 | 不使用公式的四捨五入…… | |
| 高級 LOOKUP:多重條件 VLookup | 多重數值 VLookup | 跨多個工作表 VLookup | 模糊查找…… | |
| 高級下拉列表:快速建立下拉式清單 | 相依式下拉式清單 | 多選下拉式清單…… | |
| 欄位管理員:新增指定數量的欄位|移動欄位|切換隱藏欄位的可見狀態|比較範圍與欄位…… | |
| 精選功能:網格聚焦 | 設計視圖 |增強編輯欄 | 工作簿與工作表管理員 | 資源庫(自動文字)| 日期提取 | 合併工作表 | 加密/解密儲存格 | 依清單傳送電子郵件 | 超級篩選 | 特殊篩選(篩選粗體儲存格/斜體/刪除線……) ...... | |
| 頂尖 15 工具組:12 文字工具(添加文本,刪除特定字符,……)| 50+ 圖表 類型(甘特圖,……)| 40+ 實用公式(基於生日計算年齡,……)| 19 插入工具(插入二維碼,從路徑插入圖片,……)| 12 轉換工具(金額轉大寫,匯率轉換,……)| 7 合併和拆分工具(高級合併行,分割儲存格,……)|……以及更多 |
運用 Kutools for Excel 強化您的 Excel 技能,體驗前所未有的高效能!Kutools for Excel 提供超過 300 項進階功能,大幅提升生產力並節省寶貴時間。立即點擊,取得您最需要的功能……
Office Tab 為 Office 帶來分頁式介面,讓您的工作更輕鬆自在!
- 在 Word、Excel、PowerPoint 中啟用分頁式編輯與閱讀功能,以及 Access、Visio 與 Project。
- 在同視窗的新分頁中開啟並建立多份文件,而非另開新視窗。
- 每天為您提升 50% 的工作效率,並省下數百次滑鼠點擊!
所有 Kutools 增益集,一個安裝程式
Kutools for Office 套件整合了 Excel、Word、Outlook 與 PowerPoint 的增益集,以及 Office Tab Pro,非常適合需要跨多個 Office 應用程式協作的團隊使用!
- 全能套件— 包含 Excel、Word、Outlook 與 PowerPoint 增益集,以及 Office Tab Pro
- 一個安裝程式,一個授權— 數分鐘內即可完成設定(支援 MSI)
- 協同運作更出色— 在多個 Office 應用程式間實現流暢的生產力體驗
- 30 天完整功能試用— 無需註冊,無需信用卡
- 超值之選— 比單獨購買各增益集更省費用