如何从一个 EXCEL 列表创建分组下拉菜单

问题描述 投票:0回答:1

我有一份包含以下信息的清单:

类别  项目
水果  橙色
蔬菜  生菜
水果  苹果
水果  梨
蔬菜  胡萝卜
 鸡

我希望创建一个基于类别的下拉列表。因此,如果我选择水果,那么我希望主列表中的所有水果都成为下拉菜单中的选项。

类别选择=水果
下拉选项
橙色
苹果
梨子

我不想在自己的列中创建每个类别列表,因为我只想从我的一个列表中提取下拉选项。在 Excel 中可以吗?

excel list dropdown
1个回答
0
投票

将此代码复制到工作表的代码窗格中。

在功能区上分配一个参考(命令)按钮,或在工作表上为 veget() 子创建一个 ControlButton。

选择数据所在的工作表。单击创建的项目。单击生成的组合框下拉箭头。首先,将出现类别成员。选择一个项目并再次单击下拉箭头。出现所选类别的成员。

要选择新类别,请再次单击参考(命令)按钮。

Dim cl As Integer, filt As String, combo As OLEObject
Private Sub ComboBox1_Change()
Set combo = ActiveSheet.OLEObjects("gt6r43!7lß")
If cl = 2 Then Exit Sub
If cl = 0 Then
  ActiveSheet.ShowAllData
  cl = 1
  filt = combo.Object.text
  combo.Object.Clear
Else
  Set datarng = Range("A1:A" & Range("A1").End(xlDown).Row)
  For Each cell In datarng
    If cell = filt Then
      combo.Object.AddItem cell.Offset(0, 1).value
    End If
  Next cell
  cl = 2
End If
End Sub

Private Sub veget()
cl = 2
On Error Resume Next
Set combo = ActiveSheet.OLEObjects("gt6r43!7lß")
On Error GoTo 0
If combo Is Nothing Then
  ActiveSheet.OLEObjects.Add "forms.combobox.1", , , , , , , 250, 100, 100, 20
  Set combo = ActiveSheet.OLEObjects(ActiveSheet.OLEObjects.Count)
  combo.Name = "gt6r43!7lß"
End If
Set datarng = Range("A1:A" & Range("A1").End(xlDown).Row)
combo.Object.Clear
datarng.AdvancedFilter xlFilterInPlace, , , True
For Each cell In Range("A2:A" & 
  Range("A1").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Cells
  combo.Object.AddItem cell.value
Next cell
cl = 0
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.