2017-02-10 2 views
3

Вот контекст:Excel проверка данных обусловливающие другое значение ячейки

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

Если вы можете делать обе вещи в двух разных ячейках, не следует ли работать с формулой IF, чтобы выполнить как внутри 1 ячейки? IF (logical_test, value_if_true, value_if_false), поскольку тест равен - IF A1 равен или не равен. – Matts

ответ

2

Вы можете поставить обе формулу vlookup и проверку в той же ячейке. Единственная проблема заключается в том, что если вы установите значение с помощью раскрывающегося списка, оно перезапишет формулу. Для ваших целей вам нужна формула для возврата в более поздний момент? Если нет, то может оказаться подходящим следующее решение.

Обратите внимание, что для использования проверки с другого листа вам необходимо сначала применить имя диапазона к списку значений, а затем обратиться к имени диапазона в проверке данных.

Я установил 3 листа согласно вашему примеру. Я установил «Игроков» в качестве названия диапазона для A1: A3 на Листе2, содержащего список имен игроков.Я затем положить формулу ВПР в A3:

=IFERROR(VLOOKUP(A1,Sheet3!$A$1:$B$3,2,0),"") 

Formula

Затем добавляют проверку данных A3 с помощью опции списка:

=IF($A$1="",Players,"") 

Data Validation

Тогда раскрывающийся появляется меню, если я удаляю значение от А1:

Dropdown

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 значения:

enter image description here

пример с формулой с непустым A1 значения:

enter image description here

+0

Ничего себе, это большой кусок кода! Спасибо, Робин, это здорово. Я собираюсь посмотреть на него сегодня вечером. Чтобы быть ясным, я не могу избежать VBA за то, что мне нужно? Благодарю. Jean –

+0

Я не могу придумать способ сделать это с помощью формулы! –

Смежные вопросы