При использовании функции ЕСЛИ Vineet хочет сохранить старое значение в ячейке, если условие ложно. Другими словами, значение в ячейке, в которой используется функция ЕСЛИ, должно изменяться, только если условие, проверяемое функцией ЕСЛИ, истинно. Однако по умолчанию функция ЕСЛИ устанавливает значение 0, если условие ложно.

Функция ЕСЛИ может принимать до трех параметров. Первый параметр — это сравнение, которое должно быть выполнено, второй параметр — это то, что должно быть возвращено, если сравнение истинно, а третий — то, что должно быть возвращено, если сравнение ложно. Можно не указывать последний параметр, но если вы это сделаете, Excel вернет значение 0, если сравнение неверно. (Это то, что Винит видит в результате использования его функции ЕСЛИ.)

Таким образом, очевидное решение состоит в том, чтобы убедиться, что вы предоставляете функции ЕСЛИ что-то, что должно возвращаться, когда сравнение ложно. Например, предположим, что ваша формула находится в ячейке B1, и вы сравниваете что-то в ячейке A1. Формула, которую вы используете, может выглядеть так:

=IF(A1<10,"under ten",B1)

Обратите внимание, что слова «до десяти» возвращаются, если значение в A1 меньше 10. Если это условие не выполняется, возвращается значение в B1.

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

Это также означает, что формула содержит круговую ссылку. Чтобы циклические ссылки работали нормально, вам необходимо сообщить Excel, что они могут появляться на вашем листе. Выберите Инструменты | Опции | Вкладка «Расчет» и убедитесь, что установлен флажок Итерация. Excel теперь разрешает циклическую ссылку без жалоб.

Если вы не хотите разрешать циклическую ссылку на своем листе, то единственный выход — создать макрос, который обновляет значение в ячейке B1 на основе любых изменений в ячейке A1:

Private Sub Workbook_SheetChange(ByVal Sh As Object, _   ByVal Target As Range)



' See if the change is related to our cell     If Not (Application.Intersect(Target, Range("A1")) _       Is Nothing) Then         If Range("A1") < 10 Then             Range("B1") = "under ten"

End If     End If End Sub

Этот простой макрос, добавленный в модуль ThisWorkbook, выполняется каждый раз, когда в книге происходит изменение. Если значение ячейки A1 изменяется (и только эта ячейка), то значение проверяется, чтобы увидеть, меньше ли оно 10. Если это так, то значение в ячейке B1 изменяется. В противном случае значение в ячейке B1 остается без изменений.

Есть одна «ловушка», которую вам нужно иметь в виду при использовании любого из рассмотренных до сих пор подходов, формул или макросов. Если значение в ячейке A1 (скажем) 15, тогда ячейка B1 будет содержать то, что было раньше, чем бы оно ни было. Если вы измените значение в ячейке A1 на (скажем) 7, то B1 изменится на «меньше десяти». Это нормально, но с этого момента ячейка B1 никогда не изменится. Зачем? Потому что, если вы затем измените ячейку A1 на значение больше 10, ячейка B1 будет содержать (как только что объяснено) то, что было раньше. И, как вы теперь понимаете, значение, которое было раньше, является результатом предыдущего истинного результата, который был «меньше десяти». Таким образом, верно или неверно, формула или макрос с этого момента отображает текст «до десяти».

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (8260) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:

link: / excelribbon-Leaving_a_Cell_Value_Unchanged_If_a_Condition_Is_False [Оставление значения ячейки без изменения, если условие ложно].