Как исправить часть имени листа ссылки на ячейку Excel при копировании всего листа?

1

Я хочу сослаться на другую ячейку в своем рабочем листе таким образом, чтобы при копировании листа я все еще указывал на ячейку на исходном листе. Если ссылка относится к ячейке на другом листе, то имя листа сохраняется при копировании листа, но если ссылка находится на том же листе, Excel изменяет имя листа на целевой лист при копировании листа.

Я попытался определить имя ячейки, сделать ее область охвата всей книгой и сослаться на ячейку по имени, но, когда я копирую лист, Excel «услужливо» создает дублированное имя с областью действия только для листа назначения.

Я знаю, что могу использовать функцию «Косвенный» для ссылки на ячейку со ссылкой, которая не изменится при копировании листа, но я не хочу этого делать, потому что произойдет сбой, если на листе, содержащем клетка.

Приложение требует, чтобы были сделаны последовательные копии каждого листа, чтобы отслеживать моментальные снимки данных с течением времени, но, для одного аспекта, я всегда хочу вернуться к ячейке на исходном листе. Шаблон для рабочей книги содержит только исходный лист, ожидающий исходных данных, который затем будет скопирован на новый лист для следующей итерации данных. Может ли кто-нибудь помочь мне с подходящей техникой ссылки на ячейку, которая не требует перепроектирования приложения.

Питер К
источник

Ответы:

1

Я не уверен, что полностью понимаю ваши требования / ограничения, но я все равно предложу это. Определить функцию VBA

Function Original(Ref)
    Application.Volatile
    With Application.Caller.Parent
        Original = .Parent.Sheets(1).Range(Ref.Address)
    End With
End Function

Заменить 1ин Sheets(1)с номером листа вы хотите сослаться, или его имя, например, Sheet("PeterK_Master"). Теперь, если вы хотите скопировать ссылку Sheet1!Q42, просто скажите Original(Q42). Это будет автоматически обновляться, если вы вставите столбцы слева Qили строки выше 42 (это то, что вы хотели, верно?). И, если вы скопируете / перетащите его, он автоматически обновится, как любая другая относительная ссылка (на том же листе); и, конечно, вы можете остановить это с помощью $s.

Скотт
источник
1
Большое спасибо, Скотт, ты, кажется, прекрасно все понял. Копирование и вставка ячеек никогда не вызывало проблем, но при создании копии листа Excel настаивал на изменении части имени листа ссылки на ячейку, если она ссылалась на тот же лист, который вы копировали (но не если вы указывали на другой лист). ). Ваше решение преодолевает это блестяще. Кроме того, если я сделаю имя функции таким же, как имя мастер-листа, всем станет ясно, что происходит, например, master! Q42 просто станет master (Q42).
Питер К
Отличная идея; ясность важна.
Скотт