2010-09-16 2 views
0

вот моя проблема с исполнением формулы excel.Условная формула саморегуляции (только выполнить, если значение ячейки == "")

Эти требования:

  • У меня есть несколько строк в качестве первенствуйте листа.
  • В конце каждой строки есть поле под названием «Месяц».
  • Если кто-то вводит новые значения в этой строке , текущий месяц должен быть установлен в .
  • Если значения изменятся, не следует изменять месяц .

Чтобы включить текущий месяц, я использую некоторые формулы, как это (А10 просто случайное поле, которое будет заполнено):

=IF(A10<>0; MONTH(NOW()); "") 

Теперь мне нужно некоторое условие, чтобы проверить, если поле содержит месяц allready, и если это так, ничего не делайте. Я попробовал следующее (A15 должен содержать месяц):

=IF(A15 <> ""; IF(A10<>0; MONTH(NOW()); "") ;) 

Чтобы решить, если поле должно быть изменено формульной, я должен проверить его текущее значение. Проблема в том, что это закончится круговой ссылкой на само поле.

У кого-нибудь есть рабочее решение для такого рода проблем? Я стараюсь не использовать какой-либо код VBA.

ответ

5

Вы не можете делать это с помощью формул, вы должны использовать VBA. Формула не может ссылаться на себя.

Другая проблема заключается в том, что СЕЙЧАС будет меняться каждый раз, когда вы пересчитываете. Поэтому даже с вашей первой формулой месяц не останется статичным.

Если вы решите, что можете жить с VBA, щелкните правой кнопкой мыши на вкладке листа и выберите Просмотреть код. Код, который вам понадобится, будет выглядеть примерно так:

Private Sub Worksheet_Change(ByVal Target As Range) 

    'We only care if cells are changed in a certain range 
    If Not Intersect(Target, Me.Range("A1:G10")) Is Nothing Then 

     'Only do this if there's nothing in row 15 for whatever column 
     'was changed 
     If IsEmpty(Me.Cells(15, Target.Column).Value) Then 

      'Put the month in row 15 of the current column 
      Me.Cells(15, Target.Column).Value = Month(Now) 
     End If 
    End If 

End Sub 
+0

Кажется, мне нужно жить с VBA :-) Спасибо за ваш ответ! – echox

+0

К сожалению, так. Чтобы уточнить, на самом деле это не проблема самореференциального характера (мы можем обойти это с помощью скрытых полей и т. Д.), Тем более, что вы хотите, чтобы формулы оценивались только при определенных условиях, тогда как на самом деле они все пересматриваются всякий раз обновляется поле, в котором они ссылаются, загружается рабочий лист и еще сто ситуаций - поэтому у вас нет возможности сравнить со старыми значениями. – Basic

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