Excel “验证”下拉列表中的条件
写我的想法有点混乱,但我会试试看。 这就是我能做的。我在我的垂直单元格上有一个下拉列表,因此我有一个名称列表可供选择,通过[name]->[define]和[data]->[validation]链接。 我希望另一个垂直单元格根据第一个单元格的条件填充另一个下拉列表 例如,我有一份水果和蔬菜的清单。我的第一个下拉菜单询问类型,所以我选择水果。由于这样的选择,我的第二个下拉列表将只列出水果(没有蔬菜),反之亦然+ 非常感谢你的帮助 谢谢大家Excel “验证”下拉列表中的条件,excel,excel-2003,excel-formula,Excel,Excel 2003,Excel Formula,写我的想法有点混乱,但我会试试看。 这就是我能做的。我在我的垂直单元格上有一个下拉列表,因此我有一个名称列表可供选择,通过[name]->[define]和[data]->[validation]链接。 我希望另一个垂直单元格根据第一个单元格的条件填充另一个下拉列表 例如,我有一份水果和蔬菜的清单。我的第一个下拉菜单询问类型,所以我选择水果。由于这样的选择,我的第二个下拉列表将只列出水果(没有蔬菜),反之亦然+ 非常感谢你的帮助 谢谢大家 如果我想命名细胞而不是蔬菜,但2009年和水果2010
如果我想命名细胞而不是蔬菜,但2009年和水果2010年,我会得到一个错误。有路可走吗?
谢谢这是我的代码,可以完全按照您的要求执行 我已经将独立列定义为名为
Major\u Category
的命名范围,并将下拉验证设置为数据列表。然后我有几个其他的数据列表,它们被命名为cat\u子项
。因此,对于您的示例,主要类别将包含项目
- 果
- 蔬菜
- 猫科水果
- 猫科蔬菜
cat\u水果
或cat\u蔬菜
注意:如果您使用excel的“保护工作表”,则此代码不起作用。
有关如何处理Excel的工作表/书籍保护,请参阅
Public Sub Worksheet_Change(ByVal target As Range)
On Error GoTo ErrHandler:
Dim VRange As Range, cell As Range
Dim msg As String
Dim validateCode As Variant
Dim modCell As Range
Set VRange = Range("Major_Category")
If Intersect(VRange, target) Is Nothing Then Exit Sub
For Each cell In Intersect(VRange, target)
b = cell.Value
curRow = target.Row
Set modCell = cell.Offset(0, 1) 'cell to modify the validation'
If Not (b = "") Then
modCell.Validation.Delete
modCell.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
'sets the validation formula to the list/range name'
xlBetween, Formula1:="=cat_" & b
modCell.Validation.IgnoreBlank = True
modCell.Validation.InCellDropdown = True
modCell.Validation.InputTitle = ""
modCell.Validation.ErrorTitle = ""
modCell.Validation.ErrorMessage = ""
modCell.Validation.ShowInput = True
modCell.Validation.ShowError = True
End If
Next cell
Cleanup:
Exit Sub
ErrHandler:
MsgBox Err, vbOKOnly, "Error Occurred"
Resume Cleanup:
End Sub
这是我的代码,完全按照你的要求去做 我已经将独立列定义为名为
Major\u Category
的命名范围,并将下拉验证设置为数据列表。然后我有几个其他的数据列表,它们被命名为cat\u子项
。因此,对于您的示例,主要类别将包含项目
- 果
- 蔬菜
- 猫科水果
- 猫科蔬菜
cat\u水果
或cat\u蔬菜
注意:如果您使用excel的“保护工作表”,则此代码不起作用。
有关如何处理Excel的工作表/书籍保护,请参阅
Public Sub Worksheet_Change(ByVal target As Range)
On Error GoTo ErrHandler:
Dim VRange As Range, cell As Range
Dim msg As String
Dim validateCode As Variant
Dim modCell As Range
Set VRange = Range("Major_Category")
If Intersect(VRange, target) Is Nothing Then Exit Sub
For Each cell In Intersect(VRange, target)
b = cell.Value
curRow = target.Row
Set modCell = cell.Offset(0, 1) 'cell to modify the validation'
If Not (b = "") Then
modCell.Validation.Delete
modCell.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
'sets the validation formula to the list/range name'
xlBetween, Formula1:="=cat_" & b
modCell.Validation.IgnoreBlank = True
modCell.Validation.InCellDropdown = True
modCell.Validation.InputTitle = ""
modCell.Validation.ErrorTitle = ""
modCell.Validation.ErrorMessage = ""
modCell.Validation.ShowInput = True
modCell.Validation.ShowError = True
End If
Next cell
Cleanup:
Exit Sub
ErrHandler:
MsgBox Err, vbOKOnly, "Error Occurred"
Resume Cleanup:
End Sub
让我们使用一些命名范围 名称E7“选项” 将“蔬菜”放入E4,将“水果”放入E5 在E7中,数据>验证>列表,源$E$4:$E$5 在H4:H7中放入一些蔬菜;将该范围命名为“蔬菜” 在J4:J7中放入一些水果;将该范围命名为“水果” 现在,在E8:Data>Validation>List中,source“=间接(选项)”
当您在E7中进行选择时,E8的选项将相应地设置。让我们使用一些命名范围 名称E7“选项” 将“蔬菜”放入E4,将“水果”放入E5 在E7中,数据>验证>列表,源$E$4:$E$5 在H4:H7中放入一些蔬菜;将该范围命名为“蔬菜” 在J4:J7中放入一些水果;将该范围命名为“水果” 现在,在E8:Data>Validation>List中,source“=间接(选项)” 当您在E7中进行选择时,E8的选项将相应地设置。您不能将范围命名为“2009”-因为Excel将很难将其与整数值2009区分开来。还有一些其他限制-您不能将范围命名为“A1”,因为Excel会与单元格A1混淆。你可以做的是把2009年和2010年的数据放在一张表中,在它们旁边放上范围的名称,然后做一个VLOOKUP得到范围的名称。或者,您可以使用,比如说,“_2009”,并将您的公式作为 =间接(“\u”&option)不能将范围命名为“2009”-因为Excel很难将其与整数值2009区分开来。还有一些其他限制-您不能将范围命名为“A1”,因为Excel会与单元格A1混淆。你可以做的是把2009年和2010年的数据放在一张表中,在它们旁边放上范围的名称,然后做一个VLOOKUP得到范围的名称。或者,您可以使用,比如说,“_2009”,并将您的公式作为
=间接(“\u”和选项)嗨,卡尔,非常有用,非常简单。每一步都解释得很好。非常感谢CarlHi Carl,非常有用,非常简单。每一步都解释得很好。非常感谢你的帮助,但是对我来说有点太复杂了:C但是再次感谢:D感谢你的帮助,但是对我来说有点太复杂了:C但是再次感谢:D