
Я импортировал информацию о ежедневном курсе обмена валют с внешнего сайта в Excel.
Я использую обменный курс в некоторых формулах каждый день. Проблема в том, что когда наступает следующий день, обменный курс меняется, все формулы меняются, а я хотел бы, чтобы они менялись только для формул в строке, относящихся к текущей дате. Для вчерашнего дня я хотел бы сохранить вчерашний обменный курс.
Есть ли способ остановить обновление формулы, если выполняется условие? Условием в этом случае будет, если дата, к которой относится формула, меньше, чем TODAY().
решение1
Да, этого результата можно достичь без VBA и даже без крайних мер.
Но не в том смысле, о котором вы думаете. Я уверен, что именно в этом направлении вы и мыслите, и что вы не привязаны ни к какому конкретному шагу или условию. Так что...
Один из способов — добавить или использовать, если у вас уже есть, столбец для ваших данных, который содержит дату получения данных. Как только у вас это есть, вы можете сделать одно из двух, а может быть, и больше, хотя я сосредоточусь на двух вещах.
Одна из них — простая IF()
формула для использования ячейки значения обменного курса. Например, это может выглядеть так, если ваш столбец даты — это столбец A, ваш столбец расчета — это столбец B, а ежедневно меняющийся обменный курс — в ячейке $M$1:
=IF(A1<TODAY(),B1,IF(A1>TODAY(),"",2000*$M$1))
В дату в столбце A рабочая формула будет рассчитываться. В последующие дни — нет. По мере того, как дата, соответствующая сегодняшнему дню, продвигается все дальше и дальше вниз по столбцу, новые ячейки, в которых ничего не отображалось ( ""
), будут рассчитываться правильно, а затем присоединятся к другим ячейкам над ними, которые не пересчитываются по мере продвижения даты.
Однако если вы КОГДА-ЛИБО войдете в ячейку, скажем, через F2-Edit
, и нажмете Enter, заставив ячейку пересчитаться, эта ячейка пересчитается и даст сбой, что приведет к "0", что является результатом Excel, если формула не может быть рассчитана из-за циклической ссылки. Если вы сделаете это случайно, UNDO
( Ctrl-Z
) вернет вас в дело. Если вы заметили это до нажатия Enter, просто нажмите ESC вместо этого, чтобы сохранить данные. Изменения форматирования не вызовут проблем.
Так что, это, вероятно, сработает, с некоторой осторожностью. Кто этого хочет? Ну, тот, у кого нет лучшего способа.
Второй подход — лучший способ. Было бы проще сделать и администрировать, если бы кто-то создал таблицу с ежедневными датами в столбце 1 и обменным курсом для каждой даты в столбце 2. Таким образом, она увеличивалась бы каждый день по мере добавления нового обменного курса. Или можно было бы сделать так, чтобы многие будущие даты уже заполняли столбец 1, а новый обменный курс нужно было бы просто добавлять ежедневно.
Затем формула выполнит поиск по вашему выбору для сегодняшней даты ( TODAY()
) в столбце 1, найдя текущий обменный курс в столбце 2.
Легко привить, поместить на какую-нибудь скрытую где-то вспомогательную страницу. Тогда вашим формулам не понадобятся странные трюки. Они могли бы ссылаться на свою колонку даты для поиска и всегда находить обменный курс на эту дату, даже годы спустя. Никаких проблем с взаимодействием с цикличностью.
Этот метод также удобен для таблиц. Одним из преимуществ таблиц является то, как формулы заполняются вниз по мере добавления каждой строки. Однако одним из недостатков таблиц является то, как формулы заполняются вниз по мере добавления каждой строки...
Если вам нужно изменить формулу, сохранив ее старую форму в текущих строках, но используя новую форму вниз по мере добавления строк данных, у вас проблема. Таблицы просто не делают этого. Измените все формулы, которые хотите, но новые продолжают приходить со старой формулой.
Да, технически, изменение такого рода МОЖНО сделать, но все описанные методы не работают так, как описано. Например, предположительно, если изменить четыре строки в строке, предположительно это станет новой формулой. По моему опыту, я НИКОГДА НЕ видел, чтобы это работало с менее чем шестью измененными строками, и часто 10-30 строк требовали изменения, прежде чем Excel сдавался и использовал новую формулу. Все это можно сделать, но... нет, на практике это просто не работает. Другой способ — перейти к диапазону, а затем обратно к таблице. Это создает проблемы, хотя они в основном незначительны, но он берет первую строку формул в качестве основной формулы, и она вряд ли будет одной с новой формулой, так что...
Но многие формулы можно написать так, чтобы изменения в их работе происходили за пределами Таблицы. Например, ваш обменный курс. В Таблице есть только ссылка на некоторое значение, возможно, Именованный диапазон, возможно, фрагмент формулы. Этот Именованный диапазон или фрагмент может ссылаться на диапазон данных (или Таблицу), содержащую изменяющийся обменный курс. Таким образом, новые курсы можно использовать, не изменяя формулу Таблицы, используя ее. Никаких трудностей с необходимостью изменения формулы Таблицы. Что-то, что нужно запомнить.
Но это также показывает, как частое редактирование данных, особенно изменение и добавление данных, чтобы предвидеть эти вещи, может облегчить внесение изменений и использование различных фрагментов.