如何在 Excel 中勾選一個核取方塊時取消另一個核取方塊的勾選?
在許多實際情況中,例如在 Excel 中管理一份冗長的購買清單時,您可能會遇到需要確保在特定類別或群組中只能選擇一個選項的情況。例如,如果某些類別超出設定的預算,您可能需要重新選擇項目,以確保每個群組中只有一個項目保持勾選狀態。手動管理大型清單中的核取方塊既沒有效率又容易出錯,特別是在類別數量增加的情況下。為了簡化此過程並減少錯誤,您可以設置 Excel,使得在群組中勾選新的核取方塊時自動取消先前選定的核取方塊,從而確保每組中的單一選擇。本文提供了一個逐步指南,教您如何實現這一目標,讓您的工作流程更高效且可靠。
使用 VBA 程式碼在勾選新核取方塊時取消另一個核取方塊的勾選
為說明這個過程,考慮一下如上方視頻所示的情況。您有十個標記為 CheckBox1 到 CheckBox10 的核取方塊,它們被組織成三個群組,代表不同的購買類別。
✅ 群組結構:
- 群組 1: CheckBox1, CheckBox2, CheckBox3
- 群組 2: CheckBox4, CheckBox5, CheckBox6, CheckBox7
- 群組 3: CheckBox8, CheckBox9, CheckBox10
在每個群組中,一次只能選擇一個核取方塊。當勾選新的核取方塊時,同一群組中的其他核取方塊會自動取消勾選——類似於單選按鈕行為,但使用的是核取方塊。
🧩 應用 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 助手:以智能執行為基礎,革新數據分析 |生成程式碼 | 創建自訂公式 | 分析數據並生成圖表 | 調用 Kutools 增強函數… |
熱門功能:查找、選取項目的背景色或標記重複值 | 刪除空行 | 合併列或單元格且不遺失數據 | 四捨五入(免公式)... | |
高級 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
- 一鍵安裝,一份授權 — 幾分鐘完成設置(支援 MSI)
- 協同運作更順暢 — Office 應用間無縫提升生產力
- 30 天全功能試用 — 無需註冊、無需信用卡
- 最超值 — 一次購買,節省單獨外掛費用