以下是上下文:
Sheet 1 :
A1 = "50255"
A2 = "Soccer players"
A3 = The cell I'm having a problem with
Sheet 2 :
A1:A5 : List of soccer plays (Ronaldo, Zidane...)
Sheet 3 :
A lot of datas in which I can possibly find my Sheet1!A1 value
我希望能够做到这一点:
If A1<>"" then Vlookup in Sheet 3 and print my value "50255".
If A1="" then diplay the list of possible values you can set for Sheet2!Soccer players (Ronaldo, Zidane...)
问题:我能够在2个不同的单元格中完成这两件事,但我无法在一个单元格中做到我想要的...
总结一下:我希望得到Vlookup
的结果或(如果为空)可能值的列表。
我在数据验证方面的尝试:
=SI($E$31<>"";RECHERCHEV($E$31;'1 - Data players'!$G:$XFD;EQUIV('2 - OD'!$E38;'1 - Data players'!$G$6:$EX$6;0);FAUX);indirect($E$38))
英文Excel中的公式:
=IF($E$31<>"",VLOOKUP($E$31,'1 - Data players'!$G:$XFD,MATCH('2 - OD'!$E38,'1 - Data players'!$G$6:$EX$6,0),FALSE),INDIRECT($E$38))
你可以帮帮我吗?
答案 0 :(得分:2)
将Worksheet_Change
事件添加到第一个工作单(根据您的上下文),例如Sheet1
然后当目标单元格(A1
)发生变化时,您可以检查该值,然后
使用A3
或
Range("A3").Validation.Add...
添加数据验证
使用您需要的任何内容将公式插入A3
以下示例仅使用一个简单的列表和VLOOKUP
范围,您可以根据自己的情况进行调整:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim blnChange As Boolean
Dim strVlookupFormula As String
On Error GoTo ExitFunction:
'vlookup if target is not empty
strVlookupFormula = "=IFERROR(VLOOKUP($A$1,$E$2:$F$4,2,FALSE),""no match"")"
'was our cell changed
blnChange = Not Application.Intersect(Target, Sheet1.Range("A1")) Is Nothing
If blnChange Then
'disable events as we are going to update cells
Application.EnableEvents = False
'is cell empty
If IsEmpty(Target.Value) Then
'remove anything from cell
Sheet1.Range("A3").ClearContents
'add data validation to cell
With Sheet1.Range("A3").Validation
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:="=Sheet1!C2:C5"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Else
'remove any validation
Sheet1.Range("A3").Validation.Delete
'add vlookup formula to cell
Sheet1.Range("A3").Formula = strVlookupFormula
End If
End If
ExitFunction:
' re-enable events
Application.EnableEvents = True
End Sub
空A1
值的数据验证示例:
具有非空A1
值的公式的示例:
答案 1 :(得分:2)
您可以将vlookup公式和验证放在同一个单元格中。唯一的问题是,如果使用下拉列表设置值,则会覆盖公式。为了您的目的,您是否需要在以后返回公式?如果没有,那么以下解决方案可能是合适的。
请注意,要使用其他工作表中的验证,您需要先将范围名称应用于值列表,然后在数据验证中引用范围名称。
我根据你的例子设置了3张。我已经设置了#34;玩家&#34;作为Sheet2上包含播放器名称列表的A1:A3的范围名称。然后我将vlookup公式放入A3:
=IFERROR(VLOOKUP(A1,Sheet3!$A$1:$B$3,2,0),"")
然后使用List选项将数据验证添加到A3:
=IF($A$1="",Players,"")
如果我清除A1中的值,则会出现下拉菜单: