我有一个Excel工作表,其中有一个具有两列和可变行数的表。这些行中的一些将被填充,而一些则将为空。 B列包含一些值,A列在每个单元格中都有一个下拉列表。
我希望如果B列单元格具有某个值,则相邻的A列单元格应在下拉列表中显示3个选项-修改,添加,删除,并且当B列单元格为空时,相邻的A列单元格应仅显示其下拉列表中的一个选项-添加。可以使用VBA或excel公式完成吗?
请不要将其与基于下拉选择来更改单元格值混淆。相反。
答案 0 :(得分:1)
您可以使用Excel的Data Validation工具进行此操作:
首先,您需要将所有下拉选项(ADD,MODIFY,DELETE)添加到一个范围中。可以在同一工作表中,也可以在任何其他工作表中。对于我的示例,我将它们放在同一工作表的范围F1:F3
中。
然后选择整个列A,然后从功能区菜单›数据›数据工具›数据验证中添加数据验证:
在设置选项卡上的允许下,选择列表,并在来源中使用以下公式:< / p>
=IF(B1<>"",$F$1:$F$3,$F$1)
请注意,第一个范围$F$1:$F$3
指向ADD,MODIFY,DELETE,而第二个范围$F$1
指向ADD!
答案 1 :(得分:0)
VBA解决方案
以下内容将达到您的期望,它将遍历B列,如果为空,则将在列A上添加一个下拉列表,作为数据验证,值为“ ADD”,如果不为空,则将添加列表“修改”,“添加”,“删除”:
Sub foo()
Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
'declare and set the worksheet you are using, amend as required
LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
'get the last row with data on Column B
For i = 2 To LastRow 'loop from Row 2 to Last
If ws.Cells(i, "B").Value <> "" Then
With ws.Cells(i, "A").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="MODIFY,ADD,DELETE"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
Else
With ws.Cells(i, "A").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="ADD"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
End If
Next i
End Sub
答案 2 :(得分:0)