Отключить автоматическое изменение ссылки на ячейки Excel после копирования / вставки

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

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

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

EDIT: я только что узнал, что вы можете сделать это с VBA, скопировав содержимое ячейки в виде текста вместо формулы. Я хотел бы не делать этого, хотя, потому что я хочу скопировать целые строки/столбцы сразу. Есть ли простое решение, которого мне не хватает?

11 ответов


от http://spreadsheetpage.com/index.php/tip/making_an_exact_copy_of_a_range_of_formulas_take_2:

  1. поместите Excel в режим просмотра формул. Самый простой способ сделать это-нажать Ctrl+` (этот символ является "обратным Апострофом" и обычно находится на той же клавише, что и ~ (Тильда).
  2. выберите диапазон для копирования.
  3. Нажмите Ctrl + C
  4. Запустите Блокнот Windows
  5. нажмите Ctrl+V, чтобы передать скопированные данные в Блокнот
  6. в блокноте нажмите Ctrl+A, затем Ctrl+C, чтобы скопировать текст
  7. активировать Excel и активировать верхнюю левую ячейку, куда вы хотите вставить формулы. И убедитесь, что лист копируется в режиме просмотра формулы.
  8. нажмите Ctrl+V для вставки.
  9. нажмите Ctrl+`, чтобы выйти из режима просмотра формул.

Примечание: Если операция вставки обратно в Excel работает неправильно, скорее всего, вы использовали Excel Функция Text-to-Columns недавно, и Excel пытается быть полезным, помня, как вы в последний раз анализировали свои данные. Вам нужно запустить мастер преобразования текста в Столбцы. Выберите параметр с разделителями и нажмите кнопку Далее. Снимите все флажки опции разделителя, кроме Tab.

или, от http://spreadsheetpage.com/index.php/tip/making_an_exact_copy_of_a_range_of_formulas/:

If you're a VBA programmer, you can simply execute the following code: 
With Sheets("Sheet1")
 .Range("A11:D20").Formula = .Range("A1:D10").Formula
End With

есть очень простое решение-выбрать диапазон, который вы хотите скопировать, а затем найти и заменить (Ctrl + h), изменение = к другому символу, который не используется в вашей формуле (например,#) - таким образом, останавливая его от активной формулы.

затем скопируйте и вставьте выбранный диапазон в новое место.

наконец, найти и заменить, чтобы изменить # на = как в исходном, так и в новом диапазоне, таким образом, снова восстанавливая оба диапазона в формулы.


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

предположим, что у вас есть необработанные данные в Столбцах A и B и формула в C (например, C=A+B), и вы хотите ту же формулу в столбце F, но копирование из C В F приводит к F=D+E.

  1. скопируйте содержимое C в любой пустой временный столбец, скажем R. относительные ссылки изменятся на R=P+Q, но игнорируют это, даже если он помечен как ошибка.
  2. вернитесь к C и переместите (не копировать) его в F. Формула должна быть неизменной, поэтому F=A+B.
  3. Теперь перейдите к R и скопируйте его обратно в C. Относительная ссылка вернется к C=A+B
  4. удалить временную формулу в R.
  5. Боб твой дядя.

Я сделал это с рядом ячеек, поэтому я думаю, что это будет работать с практически любой уровень сложности. Нужно просто пустое место для парковки coiped клеток. И конечно, ты должен помнить, где ты их оставил.


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


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

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

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 для что-то другое!--9-->

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

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 ошибки, например.

было бы полезно работать над этим поэтапно и конвертировать обратно в формулы так часто, чтобы проверить что никаких катастроф не было!--9-->


обычно используется find / replace для отключения формул при выполнении манипуляций. Например, копировать с транспонированием. Формула отключается путем размещения перед ней некоторого заполнителя (например,"$="). Find replace может избавиться от них, как только манипуляция будет завершена.

этот vba просто автоматизирует поиск / замену для активного листа.

' toggle forumlas on active sheet as active/ inactive
' by use of "$=" prefix

Sub toggle_active_formulas()
    Dim current_calc_method As String
    initial_calc_method = Application.Calculation
    Application.Calculation = xlCalculationManual
    Dim predominant As Integer
    Dim c As Range
    For Each c In ActiveSheet.UsedRange.Cells
        If c.HasFormula Then
            predominant = predominant + 1
        ElseIf "$=" = Left(c.Value, 2) Then
            predominant = predominant - 1
        End If
    Next c
    If predominant > 0 Then
        For Each c In ActiveSheet.UsedRange.Cells
            On Error Resume Next
            If c.HasFormula Then
                c.Value = "$" & c.Formula
            End If
        Next c
    Else
        For Each c In ActiveSheet.UsedRange.Cells
            On Error Resume Next
            If "$=" = Left(c.Value, 2) Then
                c.Formula = Right(c.Value, Len(c.Value) - 1)
            End If
        Next c
    End If
    Application.Calculation = initial_calc_method
End Sub

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


Я нашел еще один обходной путь, который очень прост: 1. Вырезать содержимое 2. Вставить их в новое место 3. Скопируйте содержимое, которое вы только что вставили в новое место, которое вы хотите. 4. Отмените операцию вырезать-вставить, поместив исходное содержимое туда, где вы их получили. 5. Вставьте содержимое буфера обмена в то же место. Эти материалы будут иметь исходные ссылки.

Это выглядит много, но очень быстро с сочетаниями клавиш: 1. Ctrl-x, 2. Ctrl-v, 3. Ctrl-c, 4. Ctrl-z, 5. Ctrl " и " V


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

все дело переписывания адресов происходит во время последовательного
(А1) вырезать
(А2) вставить

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

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


нажмите на ячейку, которую вы хотите скопировать. В строке формул выделите формулу.

пресс Ctrl C.

нажмите escape (чтобы вывести вас из активного редактирования этой формулы).

выберите новую ячейку. Сочетание Клавиш Ctrl В.


простое решение я просто сейчас в подобной ситуации:

  1. сделайте дубликат рабочего листа
  2. "вырезать" + "вставить" из дубликата листа
  3. удалить дубликат рабочего листа для очистки

Ваши ссылки на ячейки скопированы без изменения.