Основная проблема, с которой вы сталкиваетесь сейчас, - это круговые ссылки.
VLOOKUP не является отношением A = B
но больше похоже на отношение if A then B
(где A и B - массивы значений, как в вашем случае). Другими словами, он однонаправлен, и A не зависит от B. Из того, что я вижу, я не думаю, что в Excel есть прямой способ обработки циклической ссылки исключительно с использованием пользовательского интерфейса, поскольку формула не может быть сохранена в бэкэнде (если вы не используете макрос).
Один из способов заключается в том, чтобы иметь относительные значения как в A, так и в B, и третий лист (или много дополнительных столбцов) для выполнения некоторых условных ячеек, например, лист A содержит относительное значение (которое может быть новым обновленным значением в B или исходным значением в C). ), Лист C содержит исходные значения, а лист B содержит ячейки для отражения значений и обновления значений.
На листе B создайте новый столбец для каждого столбца, на который есть ссылки. Это будет столбец значений обновления. На листе C сохраните исходные значения. На листе A используйте условие, которое говорит: «Если поле значений обновления на листе B имеет значение, используйте его, иначе обратитесь к листу C». Столбец отражающих значений листа B будет по-прежнему ссылаться на лист A, поэтому он будет динамически изменяться, если в столбце обновления будут новые значения. Обратите внимание, что это на самом деле не решает проблему циклических ссылок, а просто обходит ее.
Однако если вам нужно, чтобы лист A был фиксированным, а не относительным значением, вам придется либо скопировать и paste as value
либо использовать что-то вроде:
ActiveSheet.Range("A1:D1000").Value = ActiveSheet.Range("A1:D1000").Value
в VB конвертировать относительные значения (с формулами) в фиксированные значения.