Как отключить автоматическое изменение ссылки на ячейку в Excel после копирования / вставки? - PullRequest
41 голосов
/ 12 июля 2011

У меня есть большая таблица Excel 2003, над которой я работаю.Есть много очень больших формул с множеством ссылок на ячейки.Вот простой пример.

='Sheet'!AC69+'Sheet'!AC52+'Sheet'!AC53)*$D$3+'Sheet'!AC49

Большинство из них более сложны, но это дает хорошее представление о том, с чем я работаю.Немногие из этих ссылок на ячейки являются абсолютными ($ s).Я хотел бы иметь возможность скопировать эти ячейки в другое место без изменения ссылок на ячейки.Я знаю, что могу просто использовать f4, чтобы сделать ссылки абсолютными, но данных много, и мне может понадобиться использовать Fill позже.Есть ли способ временно отключить изменение ссылки на ячейку при копировании-вставке / заполнении, не делая ссылки абсолютными?

РЕДАКТИРОВАТЬ: Я только что обнаружил, что вы можете сделать это с VBA, скопировав содержимое ячейки в виде текста вместоформулы.Я хотел бы не делать этого, потому что я хочу скопировать целые строки / столбцы сразу.Есть ли простое решение, которое мне не хватает?

Ответы [ 13 ]

0 голосов
/ 19 сентября 2015

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

0 голосов
/ 30 июня 2015

Не проверял в Excel, но это работает в Libreoffice4:

Вся перезапись адреса происходит во время последовательного
(a1) вырезания
(a2) вставки

Вам нужно прервать последовательность, поместив что-то между:
(b1) cut
(b2) выбрать несколько пустых ячеек (более 1) и перетащить (переместить) их
(b3) paste

Шаг (b2) - это то, где ячейка, которая собирается обновиться, останавливает отслеживание.Быстро и просто.

0 голосов
/ 12 июля 2011

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

Я бы начал с преобразования каждой формулы на листе в текст, примерно такой:

Dim r As Range

For Each r In Worksheets("Sheet1").UsedRange
    If (Left$(r.Formula, 1) = "=") Then
        r.Formula = "'ZZZ" & r.Formula
    End If
Next r

, где 'ZZZ использует ' для обозначения текстового значения, а ZZZ - как значение, которое мы можем искать, когда хотим преобразовать текст обратно в формулу. Очевидно, что если любая из ваших ячеек фактически начинается с текста ZZZ, тогда измените значение ZZZ в макросе VBA на что-то другое

Когда перестановка будет завершена, я тогда преобразую текст обратно в формулу, подобную этой:

For Each r In Worksheets("Sheet1").UsedRange
    If (Left$(r.Formula, 3) = "ZZZ") Then
        r.Formula = Mid$(r.Formula, 4)
    End If
Next r

Один реальный недостаток этого метода в том, что вы не можете видеть результаты какой-либо формулы, пока вы реорганизуете. Вы можете обнаружить, что при обратном преобразовании текста в формулу у вас есть, например, множество ошибок #REF.

Возможно, было бы полезно поработать над этим поэтапно и время от времени возвращаться к формулам, чтобы убедиться, что никаких катастроф не произошло

...