KutoolsforOffice — 一套方案,五大工具。事半功倍。三月特賣:20% 折扣

在 Excel 下拉列表中選取多個項目-完整指南

作者Siluvia修改日期

Excel 下拉式清單是確保資料一致性並簡化輸入作業的絕佳工具。然而,預設情況下僅能選取單一項目。若您需要從同一個下拉式清單中選取多個項目,該如何實現?本完整指南將帶您了解如何在 Excel 下拉式清單中啟用多重選取、管理重複項目、設定自訂分隔符號,並定義這些清單的作用範圍。

顯示在 Excel 下拉式清單中進行多選的動畫示範截圖。

提示:在套用下列方法前,請確認您的工作表中已事先建立下拉列表。若您想知道如何建立資料驗證下拉列表,請參閱本文說明:如何在 Excel 中建立資料驗證下拉列表

在下拉列表中啟用多重選取

本節提供兩種方法,協助您在 Excel 下拉式清單中啟用多重選取功能。

使用 VBA 程式碼

若要在下拉列表中啟用多重選取功能,可透過 Excel 的「Visual Basic for Applications」(VBA)來實現。此腳本能調整下拉列表的行為,將其轉換為支援多重選擇的清單。請依照下列步驟操作:

步驟 1:開啟工作表(程式碼)編輯器
  1. 開啟包含您要啟用多重選擇功能之下拉式清單的工作表。
  2. 以滑鼠右鍵按一下工作表標籤,然後從快捷功能表中選取「檢視程式碼」。
    Excel 工作表標籤快捷選單中「檢視程式碼」選項的截圖
步驟 2:使用 VBA 程式碼

現在請複製下列 VBA 程式碼,並貼到已開啟的工作表(程式碼)視窗中。

VBA 程式碼:啟用 Excel 下拉式清單的多重選取功能。

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20240118
    Dim xRng As Range
    Dim xValue1 As String
    Dim xValue2 As String
    Dim delimiter As String
    Dim TargetRange As Range

    Set TargetRange = Me.UsedRange ' Users can change target range here
    delimiter = ", " ' Users can change the delimiter here

    If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
    On Error Resume Next
    Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
    If xRng Is Nothing Then Exit Sub
    Application.EnableEvents = False

    xValue2 = Target.Value
    Application.Undo
    xValue1 = Target.Value
    Target.Value = xValue2
    If xValue1 <> "" And xValue2 <> "" Then
        If Not (xValue1 = xValue2 Or _
                InStr(1, xValue1, delimiter & xValue2) > 0 Or _
                InStr(1, xValue1, xValue2 & delimiter) > 0) Then
            Target.Value = xValue1 & delimiter & xValue2
        Else
            Target.Value = xValue1
        End If
    End If

    Application.EnableEvents = True
    On Error GoTo 0
End Sub

貼入 Excel VBA 編輯器中的 VBA 程式碼截圖

結果

當您返回工作表時,下拉列表將允許您選擇多個選項,如下方示範所示:

顯示在 Excel 下拉式清單中進行多選的動畫示範截圖

注意事項
上述 VBA 程式碼:
  • 適用於目前工作表中所有現有及未來新增的資料驗證下拉式清單。
  • 避免您在同一個下拉式清單中重複選取相同項目。
  • 使用逗號作為選取項目數量的分隔符號。若要改用其他分隔符號,請參閱此節以變更分隔符號

透過 Kutools for Excel 點擊幾下即可完成

若您不熟悉 VBA,更簡單的替代方案是使用「Kutools for Excel」的「使下拉列表可多次選擇」功能。這款使用者友善的工具能輕鬆啟用下拉列表的多重選取功能,讓您無需費力即可自訂分隔符號並靈活管理重複項目,滿足各種需求。

Kutools for Excel 提供超過 300 項進階功能,簡化複雜任務,提升創意與效率。整合 AI 功能,Kutools 能精準自動化任務,讓資料管理變得毫不費力。更多 Kutools for Excel 詳細資訊……         免費試用……

安裝 Kutools for Excel 後,請前往「Kutools」選項卡,點選「下拉列表」>「使下拉列表可多次選擇」,並依下列方式進行設定。

  1. 指定包含您要從中選取多個項目的下拉式清單範圍。
  2. 指定用於分隔下拉列表儲存格中所選項目數量的符號。
  3. 點擊「確定」即可完成設定。
    Kutools 多重選擇下拉式清單設定畫面的截圖,包含範圍與分隔符號選項的設定
結果

現在,當您在限定區域中點選含有下拉列表的儲存格時,旁邊會立即顯示一個清單方塊。只需點擊項目旁的「+」按鈕,即可將其加入下拉儲存格;點擊「——」按鈕,則能輕鬆移除不再需要的項目。效果如下方示範所示:

使用 Kutools 在 Excel 下拉式清單中管理多重選擇的示範截圖

注意事項
  • 若希望在儲存格內垂直顯示所選項目數量,請勾選「插入分隔符後換行」;若偏好水平顯示,則取消勾選此選項。
  • 若想為下拉列表新增搜尋欄位,請勾選「啟用搜尋功能」選項。
  • 若要使用此功能,請先 下載並安裝 Kutools for Excel

多重選取下拉列表的更多操作

本節彙整了在資料驗證下拉列表中啟用多重選取時可能遇到的各種情境。


在下拉列表中允許重複項目

當下拉式清單啟用多重選取功能時,重複項目可能引發問題。上述 VBA 程式碼會防止下拉式清單中出現重複項目。若您希望保留重複項目,請嘗試本節所提供的 VBA 程式碼。

VBA 程式碼:在資料驗證下拉列表中允許重複項目

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20240118
    Dim xRng As Range
    Dim xValue1 As String
    Dim xValue2 As String
    Dim delimiter As String
    Dim TargetRange As Range

    Set TargetRange = Me.UsedRange ' Users can change target range here
    delimiter = ", " ' Users can change the delimiter here

    If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
    On Error Resume Next
    Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
    If xRng Is Nothing Then Exit Sub
    Application.EnableEvents = False

    xValue2 = Target.Value
    Application.Undo
    xValue1 = Target.Value
    Target.Value = xValue2
    If xValue1 <> "" And xValue2 <> "" Then
        Target.Value = xValue1 & delimiter & xValue2
    End If

    Application.EnableEvents = True
    On Error GoTo 0
End Sub
結果

現在,您可以從當前工作表的下拉列表中選取多個項目。若要在下拉儲存格中重複某個項目,只需持續從清單中選取該項目即可。請參閱以下截圖:

顯示在 Excel 下拉式清單中重複選擇的動畫示範截圖


從下拉列表中移除現有項目

從下拉式清單中選取多個項目後,有時可能需要移除儲存格內的某個既有項目。本節提供另一段 VBA 程式碼,協助您輕鬆完成這項任務。

VBA 程式碼:從下拉列表儲存格中移除任何現有項目

Private Sub Worksheet_Change(ByVal Target As Range)
    'Updated by Extendoffice 20240118
    Dim xRngDV As Range
    Dim TargetRange As Range
    Dim oldValue As String
    Dim newValue As String
    Dim delimiter As String
    Dim allValues As Variant
    Dim valueExists As Boolean
    Dim i As Long
    Dim cleanedValue As String

    Set TargetRange = Me.UsedRange ' Set your specific range here
    delimiter = ", " ' Set your desired delimiter here

    If Target.CountLarge > 1 Then Exit Sub

    ' Check if the change is within the specific range
    If Intersect(Target, TargetRange) Is Nothing Then Exit Sub

    On Error Resume Next
    Set xRngDV = Target.SpecialCells(xlCellTypeAllValidation)
    If xRngDV Is Nothing Or Target.Value = "" Then
        ' Skip if there's no data validation or if the cell is cleared
        Application.EnableEvents = True
        Exit Sub
    End If
    On Error GoTo 0

    If Not Intersect(Target, xRngDV) Is Nothing Then
        Application.EnableEvents = False
        newValue = Target.Value
        Application.Undo
        oldValue = Target.Value
        Target.Value = newValue

        ' Split the old value by delimiter and check if new value already exists
        allValues = Split(oldValue, delimiter)
        valueExists = False
        For i = LBound(allValues) To UBound(allValues)
            If Trim(allValues(i)) = newValue Then
                valueExists = True
                Exit For
            End If
        Next i

        ' Add or remove value based on its existence
        If valueExists Then
            ' Remove the value
            cleanedValue = ""
            For i = LBound(allValues) To UBound(allValues)
                If Trim(allValues(i)) <> newValue Then
                    If cleanedValue <> "" Then cleanedValue = cleanedValue & delimiter
                    cleanedValue = cleanedValue & Trim(allValues(i))
                End If
            Next i
            Target.Value = cleanedValue
        Else
            ' Add the value
            If oldValue <> "" Then
                Target.Value = oldValue & delimiter & newValue
            Else
                Target.Value = newValue
            End If
        End If

        Application.EnableEvents = True
    End If
End Sub
結果

這段 VBA 程式碼讓您能從下拉清單中輕鬆選取多個項目,並隨時移除已選的項目。只要再次點選清單中的特定項目,即可將其從已選項目中移除。

顯示如何從 Excel 下拉式清單中移除現有項目的動畫示範截圖


設定自訂分隔符號

上述 VBA 程式碼預設使用逗號作為分隔符號。您可以將此變數修改為任何偏好的字元,用以下拉式清單中選取項目的分隔符號。操作方式如下:

如您所見,上述所有 VBA 程式碼都包含以下這一行:

delimiter = ", "

您只需將逗號替換為所需的分隔符號即可。例如,若希望以分號分隔項目,請將該行修改為:

delimiter = "; "
注意:若要將這些 VBA 程式碼中的分隔符號改為換行字元,請將此行更改為:
delimiter = vbNewLine

設定限定區域

上述 VBA 程式碼適用於目前工作表中的所有下拉式清單。若您僅希望將該程式碼套用至特定範圍的下拉式清單,可依照下列方式,在上述 VBA 程式碼中指定目標範圍。

如您所見,上述所有 VBA 程式碼都包含以下這一行:

Set TargetRange = Me.UsedRange

您只需將該行更改為:

Set TargetRange = Me.Range("C2:C10")
注意:此處的 C2:C10 是您希望設定為多重選取的下拉列表所在範圍。

在受保護的工作表中執行

假設您已使用密碼「123」保護工作表,並在啟用保護前將下拉列表儲存格設為「未鎖定」,以確保多重選取功能在保護後仍可正常運作。然而,上述 VBA 程式碼在此情境下無法執行;本節將介紹另一段專為受保護工作表設計的 VBA 腳本,有效支援多重選取功能。

VBA 程式碼:在下拉列表中啟用多重選取(不含重複項目)


Private Sub Worksheet_Change(ByVal Target As Range)
    'Updated by Extendoffice 20240118
    Dim xRng As Range
    Dim xValue1 As String
    Dim xValue2 As String
    Dim delimiter As String
    Dim TargetRange As Range
    Dim isProtected As Boolean
    Dim pswd As Variant

    Set TargetRange = Me.UsedRange ' Set your specific range here
    delimiter = ", " ' Users can change the delimiter here

    If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
    
    ' Check if sheet is protected
    isProtected = Me.ProtectContents
    If isProtected Then
        ' If protected, temporarily unprotect. Adjust or remove the password as needed.
        pswd = "yourPassword" ' Change or remove this as needed
        Me.Unprotect Password:=pswd
    End If

    On Error Resume Next
    Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
    If xRng Is Nothing Then
        If isProtected Then Me.Protect Password:=pswd
        Exit Sub
    End If
    Application.EnableEvents = False

    xValue2 = Target.Value
    Application.Undo
    xValue1 = Target.Value
    Target.Value = xValue2
    If xValue1 <> "" And xValue2 <> "" Then
        If Not (xValue1 = xValue2 Or _
                InStr(1, xValue1, delimiter & xValue2) > 0 Or _
                InStr(1, xValue1, xValue2 & delimiter) > 0) Then
            Target.Value = xValue1 & delimiter & xValue2
        Else
            Target.Value = xValue1
        End If
    End If

    Application.EnableEvents = True
    On Error GoTo 0

    ' Re-protect the sheet if it was protected
    If isProtected Then
        Me.Protect Password:=pswd
    End If
End Sub
注意:在程式碼中,請務必將 pswd = "yourPassword" 這一行中的「yourPassword」替換為您實際用來保護工作表的密碼。例如,若您的密碼為「abc 123」,則該行應為 pswd = “abc 123“。

透過在 Excel 下拉列表中啟用多重選取功能,您將大幅強化工作表的功能性與彈性!無論您熟悉 VBA 編寫,或偏好使用 Kutools 等簡易解決方案,都能輕鬆將標準下拉列表升級為動態的多重選取工具。掌握這些技巧後,即可打造更具互動性且使用者友善的 Excel 文件。若您渴望深入探索 Excel 的更多潛能,我們網站提供豐富教學資源,立即探索更多 Excel 秘技

最佳 Office 生產力工具

🤖KUTOOLS AI 助手:以「智慧執行     產生程式碼  建立自訂公式    分析資料並產生圖表  呼叫增強函數……
熱門功能尋找、標示或標記重複值     刪除空白行     合併列或儲存格而不遺失資料     不使用公式的四捨五入……
高級 LOOKUP多重條件 VLookup    多重值 VLookup     跨多個工作表的 VLookup      模糊查找……
高級下拉列表快速建立下拉式清單     相依式下拉式清單     多重選擇下拉式清單……
欄位管理員新增指定數量的欄位移動欄位切換隱藏欄位的可見狀態比較範圍與欄位……
精選功能網格聚焦     設計視圖   增強編輯欄    工作簿與工作表管理員     資源庫(自動文字)  日期提取     合併工作表    加密/解密儲存格    依清單傳送電子郵件     超級篩選      特殊篩選(篩選粗體儲存格/斜體/刪除線……) ......
頂尖 15 工具組12 文字工具添加文本刪除特定字符,……)   50+ 圖表 類型甘特圖,……)   40+ 實用公式基於生日計算年齡,……)   19 插入工具插入二維碼從路徑插入圖片,……)   12 轉換工具金額轉大寫匯率轉換,……)   7 合併和拆分工具高級合併行分割儲存格,……)……以及更多
在您的慣用語言中使用 Kutools-支援英文、西班牙文、德文、法文、中文及 40+ 種其他語言!

透過 Kutools for Excel 強化您的 Excel 技能,體驗前所未有的高效工作方式!Kutools for Excel 提供超過 300 項進階功能,大幅提升生產力、節省寶貴時間。立即點擊,取得您最需要的功能……


Office Tab 為 Office 帶來分頁式介面,讓您的工作更加輕鬆

  • 啟用 Word、Excel、PowerPoint、Publisher、Access、Visio 與 Project 中的分頁式編輯與閱讀功能。
  • 在相同視窗的新分頁中開啟與建立多份文件,而非在新視窗中進行。
  • 每天為您減少數百次滑鼠點擊,工作效率提升 50%!

所有 Kutools 增益集。一個安裝程式

Kutools for Office 套件整合了適用於 Excel、Word、Outlook 與 PowerPoint 的增益集,以及 Office Tab Pro,是跨 Office 應用程式協作團隊的絕佳選擇!

ExcelWordOutlookTabsPowerPoint
  • 一體化套件— Excel、Word、Outlook 與 PowerPoint 增益集 + Office Tab Pro
  • 一個安裝程式,一個授權— 幾分鐘內即可完成設定(支援 MSI)
  • 協同運作效果更佳— 在多個 Office 應用程式間實現流暢的生產力
  • 30 天完整功能試用— 無需註冊,無需信用卡
  • 最佳價值— 比單獨購買增益集更省錢