Как временно копировать абсолютные ссылки на ячейки как относительные ссылки в Excel?
В Excel (2007), когда ячейки, содержащие абсолютные ссылки (например: $A$3
), копируются, абсолютная ссылка остается неизменной. Это по дизайну и причина использования абсолютных ссылок.
Проблема. Однако иногда мне нужно скопировать блок ячеек (которые содержат абсолютные и, возможно, также относительные ссылки), и вставить их с абсолютными ссылками, правильно сдвинутыми для нового блока. То есть, я хочу, чтобы абсолютные ссылки отображались как относительные ссылки при копировании, но все же были абсолютными ссылками в окончательном скопированном результате.
Пример. В скриншоте примера я хочу скопировать блок A2: B3 вниз. При копировании я в основном хочу, чтобы формула в B3 ( =$A$3
) изменилась так, чтобы она ссылалась на ячейку слева от нее, например, став =$A$11
при копировании на B11, как в нижней части Снимок экрана.
- Excel: подсчет количества значений MAX в диапазоне
- Код VBA для скрытия или отображения строк на основе значения ячейки
- Форматирование CSV с разделителями-запятыми, чтобы заставить Excel интерпретировать значение как строку
- Excel: сочетание клавиш для перемещения (своп) столбца влево или вправо?
- Как заставить Excel (и другие продукты Microsoft Office) прекратить открытие файлов в одном приложении?
Обходной путь – я нашел обходное решение для этого:
- Сделав копию всего рабочего листа (вкладка рабочей таблицы ctrl-drag в новое место),
- Затем режут (ctrl-X) соответствующий блок ячеек из нового рабочего листа
- Вставка (ctrl-v) в исходный рабочий лист.
- Наконец, удаление нового временного листа (вкладка рабочего листа правой кнопкой мыши и удаление).
Вопрос. Но это слишком много действий на мой вкус. Есть ли более простой способ (возможно, какой-то скрытый вариант Вставить)?
- Как остановить Excel от преобразования значения 0503E000 в 5.03E + 02 автоматически?
- Не удается открыть файл Excel 2010 на SharePoint Foundation 2013
- Пиксельный текст с помощью Excel Camera Tool
- Многострочные заголовки и сортировка / фильтрация Excel 2007
- Несколько меток Y-оси в линейке строк Excel 2010
- Как разделить один столбец в Excel на несколько столбцов по 55 строк
- Как скопировать таблицы Word в Excel без разделения ячеек на несколько строк?
- Как настроить Excel для импорта всех столбцов CSV-файлов в виде текста?
Вы всегда можете попробовать написать макрос для этого. Excel имеет действительно хороший инструмент для записи макросов, который вы тоже можете использовать, а затем просто запускайте его по мере необходимости (при условии, что вы сначала внесете некоторые изменения в программу)
dim firstLetter as String dim secondLetter as String dim firstNumber as integer dim secondNumber as integer dim firstReference as string dim secondReference as string dim contents as string firstLetter = inputbox("Where's the first column? (it's letter)") firstNumber = inputbox("And what's the first row? (just the number)") secondLetter = inputbox("What column is this going to be moved to? (the letter only.)") secondNumber = inputbox("And what row? (the number.)") contents = range(firstletter + cstr(firstnumber)).formula range(secondletter + cstr(secondnumber)).formula = contents
Работа, которую я использовал, заключается в следующем:
-
Создайте блок ячеек, который вы хотите вставить, который включает в себя все ваши абсолютные реферансы (в вашем примере блок заблокирован «Исходный блок»)
-
Затем создайте рабочий лист, который вы хотели бы видеть в конце, копируя и пася в любом стиле, которое вам нравится. Поэтому, чтобы проиллюстрировать ваш пример, вы должны использовать «Исходный блок» и скопировать его в 10 раз ниже этого, что будет окончательным макетом рабочего листа. (Вы заметите, что у вас все еще есть такая же проблема с абсолютной ячейкой, ссылающейся на ячейку (я) из исходного блока.)
-
Возьмите и выделите весь рабочий лист и CUT и скопируйте его на новый рабочий лист
Затем вы заметите, что все ячейки связаны с их абсолютными абсолютами, которые вы пожелали на своем новом и улучшенном листе.
Удачи π
Если я попытаюсь выполнить шаги по вырезанию и вставке с нового листа, я обнаружил, что все ссылки в формулах остаются фиксированными при копировании в новое место, включая относительные ссылки. Фактически в Excel 2010 я обнаружил, что после вырезания и вставки формул первая строка и столбец содержат ссылки на старые листы, но другие строки и столбцы ссылаются на новый лист, который выглядит как ошибка?
Если вы хотите скопировать блок формул, сохраняя все ссылки одинаковыми, вы можете нажать Ctrl + `(backquote), чтобы отобразить формулы, а затем скопировать и вставить, щелкнув значок на панели задач Clipboard (активируйте с помощью маленькой стрелки в разделе буфера обмена Главная вкладка). Если это не то, чего вы пытаетесь достичь, простой пример поможет.
Я пробовал этот макрос (хранился в Personal.xlsb и привязывался к клавише быстрого доступа), чтобы преобразовать ссылки на абсолютный перед копированием.
Sub ToAbsolute() Dim c As Variant Application.ScreenUpdating = False For Each c In Selection If (Not IsEmpty(c.Value)) Then c.Value = Application.ConvertFormula(c.Formula, xlA1, , xlAbsolute) End If Next c Application.ScreenUpdating = True End Sub Sub ToRelative() Dim c As Variant Application.ScreenUpdating = False For Each c In Selection If (Not IsEmpty(c.Value)) Then c.Value = Application.ConvertFormula(c.Formula, xlA1, , xlRelative, c) End If Next c Application.ScreenUpdating = True End Sub
Следующее будет работать с меньшей сложностью, чем писать собственный макрос и достигает конечного результата.
Да, я знаю, что я не использую ссылку на ячейку Absolute, но, как показано в примере OP, вам это не нужно.
Выберите диапазон, который вы хотите скопировать.
Затем в раскрывающемся меню «Вставить» выберите вариант «Формулы», как показано здесь.
Это было проверено мной и работает в Excel 2007 и 2010. Наслаждайтесь π
Один из способов решения этой проблемы – использовать только относительные ссылки и следовать приведенной ниже процедуре, чтобы скопировать относительные ссылки таким образом, чтобы рассматривать их как абсолюты. Источники для этого ответа включают переполнение стека и эту страницу .
- Поместите Excel в режим просмотра формул. Самый простой способ сделать это – нажать Ctrl + `(этот символ является« назад апострофом »и обычно находится на том же ключе, что и ~ (тильда).
- Выберите диапазон для копирования.
- Нажмите Ctrl + C
- Запуск Windows Notepad
- Нажмите Ctrl + V, чтобы скопировать скопированные данные в Блокнот
- В «Блокноте» нажмите Ctrl + A, а затем Ctrl + C, чтобы скопировать текст. В некоторых случаях мне приходилось возвращаться в Excel и очищать существующий выбор, прежде чем делать Ctrl + C в Блокноте)
- Активируйте Excel и активируйте верхнюю левую ячейку, в которую вы хотите вставить формулы. И убедитесь, что лист, который вы копируете, находится в режиме просмотра формул.
- Нажмите Ctrl + V, чтобы вставить.
- Нажмите Ctrl + `, чтобы переключиться из режима просмотра формул.