2014-02-18 4 views
0

Я пытаюсь создать оператор формулы на основе того, что пользователь входит в ячейку. Если пользователь вводит 0, 1 или 2, значение ячейки SAME необходимо изменить. Например:Измените значение ячейки на основе введенного значения

если пользователь вводит «1» в ячейку Е2, то необходимо изменить на «2500»
если пользователь вводит «0» в ячейку Е2, она должна остаться при 0
если пользователь вводит «2» в ячейку E2, ее необходимо заменить на «5000»

Можно ли достичь?
Если да, то какая формула необходима? Я пробовал разные способы без везения, потому что я продолжаю получать круговую ошибку цикла. Означает ли это, что это невозможно?
Возможно, с VBA?

+0

Вам понадобится VBA (скриптинг), чтобы сделать что-то подобное. Ячейка содержит либо простые данные, которые еще не обработаны, либо формула, но не оба одновременно, если у вас нет сценария, выполняющего какую-либо обработку. – Jerry

+0

Спасибо, я думал, что все будет так. Вы знаете, как добиться этого с помощью VBA? –

+0

Просто любопытно, почему? (например, почему не проверка данных или VLOOKUP?) – pnuts

ответ

1

Например:

=VLOOKUP(A8,$C$1:$D$3,2,0) 

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

С подтверждением, в A1, Data, Data Validation, Data Validation ..., Settings, Allow List, Source 0,2500,5000 OK. Это создаст маленькую стрелку вниз, которая при нажатии откроет небольшое окно, из которого можно выбрать только одно из трех указанных значений.

SO21862981 example

0

Вы должны атаковать эту проблему с некоторыми VBA; в частности макрос события Worksheet_Change. Формулы не могут переписать ячейку, в которой они находятся, если вы перепечатываете их со значением.

Щелкните правой кнопкой мыши на вкладке имени рабочего листа и выберите Просмотреть код. Когда VBE откроется, вставьте следующее в панель кода рабочего листа под названием что-то вроде Book1 - Sheet1 (Code).

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range("E2")) Is Nothing Then 
     On Error GoTo bm_Safe_Exit 
     Application.EnableEvents = False 
     With Range("E2") 
      Select Case .Value2 
       Case 0 
        'do nothing 
       Case 1 
        .Value = 2500 
       Case 2 
        .Value = 5000 
       Case Else 
        'possibly clear the cell contents as undesirable 
        '.ClearContents 
      End Select 
     End With 
    End If 

bm_Safe_Exit: 
     Application.EnableEvents = True 
End Sub 

Я оставил комментировал строку кода, чтобы удалить запись, которая не является 0, 1 или . Раскомментируйте это, если это предпочтительное поведение.

Нажмите Alt + Q, чтобы вернуться на рабочий лист. Ввод любого из трех значений в E2 должен иметь желаемые результаты.

Отметьте, что Application.EnableEvents property временно отключен. Это происходит потому, что вы меняете значение на листе и хотите избежать инициирования другого события, которое будет пытаться выполнить рутину сверху.

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