Excel 让我根据另一个单元格中的值在一个单元格中显示数据范围的公式
Excel formula that will let me show a data range in a cell based on the value in another cell
我正在尝试创建一个表单,让用户可以从下拉列表中选择一个值,它会根据第一个单元格的值在下一个单元格中创建另一个下拉列表。下一个单元格下拉列表需要引用单独工作表上的单元格范围,并且仅将第 4-30 行显示为下拉列表。
这可能吗?我尝试使用间接公式进行数据验证,但我无法定义单元格范围,因为代码以数字开头。
有什么有用的建议吗?
这是一个非常简单的示例,使用 VBA
将此事件宏放在工作表代码区域:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A1 As Range, B1 As Range
Set A1 = Range("A1")
Set B1 = Range("B1")
If Intersect(A1, Target) Is Nothing Then Exit Sub
Select Case A1.Value
Case "animals"
Call SetupDV(B1, "dog,cat,bird")
Case "days"
Call SetupDV(B1, "monday,tuesday,wednesday")
Case "months"
Call SetupDV(B1, "january,february,march")
End Select
End Sub
并将此宏放在标准模块中:
Sub MAIN()
Cells.Validation.Delete
Call SetupDV(Range("A1"), "animals,days,months")
End Sub
Sub SetupDV(MyCells As Range, st As String)
With MyCells.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=st
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
然后运行MAIN
每当您从单元格 A1 的下拉菜单中进行选择时,单元格 B1 的下拉菜单将相应调整:
有一个单独使用公式的解决方案,无需 VBA 代码。
假设您的数据如下所示:
- 第一列 selection 列表是 Catgories,在 A2:A4.
- 第二列select离子列表将被选为C2:C6 | D2:D6 | E2:E6,按类别select分类。
- 在G2:G3中你可以select一个类别。
- H2:H3会根据G中的分类select分别显示列表。
H2:H3 的 验证列表源 将使用以下公式定义:
=CHOOSE(MATCH(G2,$C:$E,0),$C:$C,$D:$D,$E:$E)
Select H2:H3,转到数据验证,选择列表并将此公式放入源中。 (H3 的范围参考将自动更新)。
公式:
MATCH
部分 returns 1,2 或 3 用于 C1:E1 中的类别名称。
CHOOSE
returns 范围分别是 C、D 或 E,根据它们在函数中提供的顺序。
备注:
范围可以引用另一个 sheet 中的单元格,只需在验证列表公式中声明 sheet 名称 Sheet2!C2:C6
。在 Excel 的早期版本中,您需要为这些外部范围命名才能在验证列表中工作。
我正在尝试创建一个表单,让用户可以从下拉列表中选择一个值,它会根据第一个单元格的值在下一个单元格中创建另一个下拉列表。下一个单元格下拉列表需要引用单独工作表上的单元格范围,并且仅将第 4-30 行显示为下拉列表。
这可能吗?我尝试使用间接公式进行数据验证,但我无法定义单元格范围,因为代码以数字开头。
有什么有用的建议吗?
这是一个非常简单的示例,使用 VBA
将此事件宏放在工作表代码区域:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A1 As Range, B1 As Range
Set A1 = Range("A1")
Set B1 = Range("B1")
If Intersect(A1, Target) Is Nothing Then Exit Sub
Select Case A1.Value
Case "animals"
Call SetupDV(B1, "dog,cat,bird")
Case "days"
Call SetupDV(B1, "monday,tuesday,wednesday")
Case "months"
Call SetupDV(B1, "january,february,march")
End Select
End Sub
并将此宏放在标准模块中:
Sub MAIN()
Cells.Validation.Delete
Call SetupDV(Range("A1"), "animals,days,months")
End Sub
Sub SetupDV(MyCells As Range, st As String)
With MyCells.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=st
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
然后运行MAIN
每当您从单元格 A1 的下拉菜单中进行选择时,单元格 B1 的下拉菜单将相应调整:
有一个单独使用公式的解决方案,无需 VBA 代码。
假设您的数据如下所示:
- 第一列 selection 列表是 Catgories,在 A2:A4.
- 第二列select离子列表将被选为C2:C6 | D2:D6 | E2:E6,按类别select分类。
- 在G2:G3中你可以select一个类别。
- H2:H3会根据G中的分类select分别显示列表。
H2:H3 的 验证列表源 将使用以下公式定义:
=CHOOSE(MATCH(G2,$C:$E,0),$C:$C,$D:$D,$E:$E)
Select H2:H3,转到数据验证,选择列表并将此公式放入源中。 (H3 的范围参考将自动更新)。
公式:
MATCH
部分 returns 1,2 或 3 用于 C1:E1 中的类别名称。
CHOOSE
returns 范围分别是 C、D 或 E,根据它们在函数中提供的顺序。
备注:
范围可以引用另一个 sheet 中的单元格,只需在验证列表公式中声明 sheet 名称 Sheet2!C2:C6
。在 Excel 的早期版本中,您需要为这些外部范围命名才能在验证列表中工作。