Джереми поставил задачу, основанную на двух ячейках, A1 и C1. Эти ячейки рассчитаны на дюймы и миллиметры соответственно.

Джереми хочет, чтобы кто-нибудь мог ввести значение в A1 и преобразовать его в миллиметры в C1. И наоборот, они могут ввести значение в C1, и оно будет преобразовано в дюймы в A1.

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

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

Конечно, если вы действительно хотите ограничиться двумя ячейками, вам нужно будет прибегнуть к использованию макросов для фактического преобразования. Вы можете использовать событие рабочего листа, которое запускается каждый раз при изменении значения ячейки, и обработчик событий может проверить, является ли изменяемая ячейка A1 или C1. Следующий макрос дает пример того, как это может работать:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False     With ActiveSheet         If Target = .[A1] Then             .[C1].Value = .[A1].Value * 25.4         ElseIf Target = .[C1] Then             .[A1].Value = .[C1].Value / 25.4         End If     End With     Application.EnableEvents = True End Sub

Обратите внимание, что в ячейках A1 или C1 не обязательно должны быть формулы; формулы находятся в самом макросе. Если есть изменение в ячейке A1 (дюймы вводятся пользователем), то значение в ячейке C1 изменяется макросом. Аналогичным образом, если есть изменение в ячейке C1 (миллиметры вводятся пользователем), то значение в ячейке A1 изменяется макросом.

Макрос игнорирует изменение в любой другой ячейке, кроме A1 или C1.

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

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

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

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

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

link: / excelribbon-Developing_Reciprocal_Conversion_Formulas [Разработка формул взаимного преобразования].