帶有多選的下拉列表

Excel 工作表中的經典下拉列表很棒,但它只允許您從提供的集合中選擇一個選項。 有時這正是您想要的,但在某些情況下用戶需要能夠選擇 一些 列表中的元素。

讓我們看一下這種多選列表的幾個典型實現。

選項 1. 水平

用戶從下拉列表中逐一選擇項目,它們出現在被更改單元格的右側,自動水平列出:

本例中單元格 C2:C5 中的下拉列表以標準方式創建,即

  1. 選擇單元格 C2:C5
  2. 選項卡或菜單 數據 選擇一個團隊 數據驗證
  3. 在打開的窗口中,選擇一個選項 名單 並指定為範圍 資源 具有列表 A1:A8 源數據的單元格

然後你需要在工作表模塊中添加一個宏,它會完成所有的主要工作,即在綠色單元格的右側添加選定的值。 為此,請右鍵單擊帶有下拉列表的工作表選項卡並選擇命令 源代碼. 將以下代碼粘貼到打開的 Visual Basic 編輯器窗口中:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Then Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

如有必要,將此代碼第二行中下拉列表 C2:C5 的敏感範圍替換為您自己的。

選項 2. 垂直

和上個版本一樣,只是新選擇的值不是加到右邊,而是加到底部:

它以完全相同的方式完成,但處理程序宏代碼略有變化:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:F2")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 Then Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

同樣,如有必要,請在此代碼的第二行中將 C2:F2 下拉列表的敏感範圍替換為您自己的範圍。

選項 3. 在同一個單元格中累積

在此選項中,累積發生在下拉列表所在的同一單元格中。 所選元素由任何給定字符(例如,逗號)分隔:

與前面的方法一樣,綠色單元格中的下拉列表以完全標準的方式創建。 再次,所有工作都由工作表模塊中的宏完成:

Private Sub Worksheet_Change(ByVal Target As Range)如果不相交(Target,Range(“C2:C5”))是Nothing並且Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Undo oldval = Target 如果 Len(oldval) <> 0 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If結束子  

如果需要,您可以將第 9 行代碼中的分隔符(逗號)替換為您自己的(例如,空格或分號)。

  • 如何在 Excel 工作表單元格中創建一個簡單的下拉列表
  • 包含內容的下拉列表
  • 添加了缺少選項的下拉列表
  • 什麼是宏,如何使用它們,在 Visual Basic 中插入宏代碼的位置

發表評論