2014-02-13 4 views
0

У меня есть 2 столбца в электронной таблице, оба они выбраны из выпадающего списка.Создать проверку данных в ячейке на основе значения в другой ячейке

Col А «Вы хотите получить больше информации», - Возможные значения Да \ Нет

Col B не является «Как вы узнали о нас» - Возможные значения Email \ Phone \ Другие

Вопрос: Если в Col A выбрано «Нет», тогда значение Col B должно быть N/A, иначе пользователь должен иметь возможность выбрать из раскрывающегося списка и выбрать значение. Используя следующую формулу, я могу получить N/A, но параметр «false» перезаписывает любые доступные значения выпадающего списка или ранее выбранные значения. Поэтому просто поставьте, если выбрано «Да», позвольте пользователю выбрать значение в другой ячейке. Если выбрано No, покажите N/A в другой ячейке. Мысли о том, как я могу заставить это работать?

Моя текущая формула, которая не работает (который находится в ячейке A2):

=IF(A1="No","N/A","Select Value") 
+0

Даже с помощью формулы вы можете использовать проверку данных в ячейке для создания выпадающего списка. Однако, если вы это сделаете, даже если ячейка «N/A», у вас все еще есть раскрывающийся список. Кроме того, если они выбрали любой вариант из раскрывающегося списка, формула будет стерта. Поэтому, даже если вы измените «Да» на «Нет», «Нет/Нет» снова не появится. Вы согласны с этим VBA? – Manhattan

+0

VBA будет в порядке! Я не был уверен, что это слишком усложнит ситуацию. Итак, мой единственный вопрос с VBA - это что-то, что будет запускаться в каждом обновлении ячеек в A1? Или это что-то, что нужно запускать вручную, как макрос? Id предпочитает, что это происходит автоматически. – ewitkows

+1

Это легко через VBA. Автоматически это хорошо. Позвольте мне взломать образец очень быстро. :) – Manhattan

ответ

1

Попробуйте это:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim Cell As Range 
    If Target.Column = 1 Then 
     Set Cell = Target.Offset(0, 1) 
     If Len(Target.Value) = 0 Then 
      Cell.Validation.Delete 
      Cell.Value = vbNullString 
     Else 
      If Target.Value = "Yes" Then 
       With Cell.Validation 
        .Delete 
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
        Operator:=xlBetween, Formula1:="=ContactMethod" 
       End With 
      ElseIf Target.Value = "No" Then 
       Cell.Validation.Delete 
       Cell.Value = "N/A" 
      Else 
       MsgBox "Input only Yes or No." 
       Target.ClearContents 
       Cell.Validation.Delete 
      End If 
     End If 
    End If 
End Sub 

Скриншот:

Если Yes вводится в Колонка A (обратите внимание на стрелку раскрывающегося списка):

enter image description here

Если No вводится в колонке А (заметим, ныне отсутствующий стрелку раскрывающегося списка):

enter image description here

Если что-нибудь еще вводится в колонке А:

enter image description here

В Кроме того, он безопасно удаляет подтверждение, если значение столбца A удаляется или изменяется на No. Таким образом, нет возможности получить доступ к выпадающему списку, если только колонка A не является Yes.

Убедитесь, чтобы вставить его в модуль листа (в Sheet9 на скриншоте ниже):

enter image description here

Дайте нам знать, если это помогает.

+1

+ 1 Хорошая работа :) –

+1

@SiddharthRout: Спасибо. Но, человек, этот материал, с которым ты связался, просто сумасшедший. Отличная работа с этим! – Manhattan

+0

Nah на второй мысли, я хочу использовать функцию вместо ... j/k это здорово :) Большое спасибо, я попробую и вернусь к вам \ mark как ответ. спасибо! – ewitkows

0

Просто для удовольствия, потому что это не полное решение, для которого потребуется litle vba ... Firs ComboBox в A1 (Да/Нет), в D1: D3 (Электронная почта/Телефон/Другое) , в E1 (NA). Написать в качестве источника для списка B1 Data Validation:

=CHOOSE(IF(A1="Yes";1;2);D1:D3;E1) 

Вам нужно VBA, потому что, по крайней мере, удалить значение в B1, когда значение A1 изменений, и изменить его на «NA», если A1 = Нет

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