Как предотвратить вырезание и вставку данных, изменяющих ссылки в формулах?


49

В Google Sheets есть функция, в которой, если у вас есть ссылка на ячейку данных в формуле, и вы вырезаете данные из этой ячейки и вставляете их в новом месте, ссылка в формуле обновляется, чтобы указывать на новое местоположение ячейки.

Я хотел бы иметь возможность вырезать и вставлять свои данные без изменения формул.

В прошлом я совершал некоторые отвратительные действия, связанные INDIRECT()с этой функцией, но кажется, что должен быть более простой способ. Какие-либо предложения?


2
забавно ... я никогда не думал об этой функции как об ошибке. Он работал это было в Excel на протяжении десятилетий.
mhoran_psprep

1
Вы нашли время, чтобы проверить ответы? Возможно, вы можете отметить один из них как лучший ответ.
Джейкоб Ян Туинстра

1
Ответы на многие разные вопросы приведены ниже. Можно ли убрать вопрос? Я думаю, что пример вашей проблемы будет следующим: Ячейка A2 содержит формулу, такую ​​как "= B1 + 5". В1 содержит «42». A2 отображает «47», как и ожидалось. Но вы поняли, что у B1 не должно быть «42», у C1 должно быть «42», а у B1 должно быть «58». Вы нажимаете на B1, «вырезаете», нажимаете на C1, вставляете. B1 теперь пуст (ожидаемо), C1 теперь «42» (ожидаемо), но A2 по-прежнему отображает «47», потому что A2 автоматически обновляется до «= C1 + 5», чтобы следовать вырезанию и вставке (не ожидается). То, что вы хотели, чтобы А2 остался "= B1 + 5". Я прав?
cesoid

Ответы:


22

Запись =$A$1также может быть автоматически перемещена, если значение в (скажем) A1изменено.

Единственное верное решение состоит в том, чтобы включить все ваши ссылки INDIRECT, например, =INDIRECT("$A$1")или даже просто =INDIRECT("A1").

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

=A1
=A2
=A3
...
=A99

Обычно вы должны заполнить первое, =A1а затем скопировать и вставить (или перетащить вниз, используя автозаполнение), чтобы автоматически заполнить последовательную формулу. Если, однако, первая формула есть =$A$1или =INDIRECT("A1")тогда этот трюк не сработает (на самом деле, это то, что $нужно для предотвращения его автоматического изменения).

Если у вас есть много последовательных формул, одно из решений:

  1. Создайте формулу как обычно (используйте обычное =A1и автозаполнение)
  2. Используйте диалог замены ( Ctrl+ H) и используйте «поиск в формулах», чтобы обернуть все =A1, =A2... =A99в и =INDIRECT("A1")т. Д. Обратите внимание, что у вас есть возможность использовать регулярные выражения при выполнении поиска и замены.

Обновленный ответ, предлагающий использовать более эффективные функции поиска и замены в новых таблицах Google, которые могут выполнять замену в формулах и использовать регулярные выражения,
Motti Strom

1
Можете ли вы привести пример того, какими будут параметры поиска / замены, чтобы обернуть все ссылки на ячейки в формулу с помощью параметра INDIRECT?
Майкл

Вы можете использовать INDIRECT в сочетании с ROW (), чтобы получить формулу, которая работает с текущей строкой. Например: = A1 + B1 становится = INDIRECT («A» & ROW ()) + INDIRECT («B» & ROW ())
злой голубь

31

С форума Google Docs :

Выберите диапазон ячеек. Затем используйте Ctrl+ C(копировать; это должно поместить ячейки и их формулы в буфер вставки).

Теперь перетащите (наведите курсор мыши на край выделения, пока курсор мыши не превратится в руку; теперь вы можете перетащить) выбранные ячейки в новую позицию.

Вернитесь в исходное верхнее левое положение скопированных ячеек и используйте Ctrl+ V(вставить).

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


6
Это единственный ответ, который сохраняет формулы.
amcnabb

3
Договорились - это единственный правильный ответ.
stevemidgley

1
Спасибо! Я был удивлен, что есть разница между «перетаскиванием» и копированием / вставкой!
rcreswick

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

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

30

Столкнулся с этим в поисках аналогичной проблемы и в итоге нашел решение для Excel, которое, похоже, отлично работает в таблицах Google.

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

Так G12стало бы$G$12

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

 =$G$1&Sheet1!B3&Sheet1!A3&$G$2

1
Это не сработало для меня. Смотрите мою альтернативу ниже webapps.stackexchange.com/questions/22558/…
Мотти Стром

@ Леонард, Вау, синтаксис ужасен . Это гораздо более интуитивно понятно, если наоборот, то есть относительные ячейки используются, $а абсолютные ячейки используются по умолчанию.
Пейсер

@Pacerier Я полностью с тобой согласен, хотя это работает, это ужасно и трудно читать. Я не использую таблицы достаточно часто, чтобы понять, что вы предлагаете. Не могли бы вы уточнить?
Леонард

@ Леонард, я имел в виду поведение по умолчанию другое, так что вместо этого $G$1&Sheet1!B3&Sheet1!A3&$G$2мы делаем G1&Sheet1!$B$3&Sheet1!$A$3&G2.
Pacerier

1
@grahamparks: Тогда понизьте и, возможно, оставьте комментарий, почему это не решение. Не пытайтесь добавить свой собственный комментарий в ответ.
Але

7

В электронных таблицах Google для вырезания и вставки ячеек без автоматического смещения их формул вы используете Ctrl+ Xдля вырезания (или Ctrl+ Cдля копирования) и Ctrl+ Shift+ Vдля вставки.

Он Shiftсообщает Google Sheets, что нужно оставить ваши формулы в покое.


Например, если вы используете такие приложения, как Flycut (mac) с уже активным сочетанием клавиш CTRL + SHIFT + V , это будет конфликтовать с ярлыком электронной таблицы, и блокировка формул не будет работать. Ярлык Отключить Flycut приложения в, или просто бросить его первым , прежде чем делать CTRL + SHIFT + V .
Хлунг

13
Похоже, что изменение пасты с помощью Shift позволяет вставлять значения в Google Spreadsheet вместо неизмененных формул.
Мэтт МакКлюр

4
Это неверно - ctrl-shift-v просто вставит «значения» ваших формул. Это предотвратит перенос ваших данных, но полученные ячейки будут содержать статические значения, а не формулы.
stevemidgley

1
Не работает -1.
Pacerier

1
Я никогда не режет. Когда вы вставляете с ctrl+ shift+ v, он всегда копирует значения, даже если вы делали ctrl+ xв исходных ячейках.
незаполненные

5

Обойти это так же, как в Excel:

Скопируйте и вставьте данные, а затем вернитесь и удалите их с исходного места.


3

Cut (вместо Copy), кажется, работает для меня, вероятно, по той же причине, что перетаскивание выбранных ячеек работает - т.е. Это также единственный известный мне способ вставки на другую страницу без изменения формулы.

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


2

Чтобы переместить диапазон ячеек в новое местоположение в Google Sheets:

1. Выберите диапазон ячеек, которые вы хотите переместить
2. Переместите указатель мыши к любому краю выделения, пока курсор не превратится в руку
3. Перетащите ваши ячейки на новое место

Он делает то, что должен - он перемещает их - поэтому вся информация о ячейках останется точно такой же, как и в их исходном местоположении.

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


Очень хороший улов!
marikamitsos

Тот же метод упоминается и здесь . Все еще. Этот лучше исследован и объяснен.
Марикамитос

1

Сделайте текстовую копию формулы вместо копии ячейки: используйте мышь, чтобы выделить текст формулы и нажмите CTRL + C. Затем выберите поле назначения и нажмите CTRL + V. Это сохранить формулу


1
Но вам придется повторить это для каждой ячейки .... Есть ли способ сделать текстовое копирование через несколько ячеек?
Pacerier

0

Самый простой способ - просто выбрать все ячейки, которые вы хотите переместить, и перетащить их туда, куда вы хотите. Если в других ячейках есть формулы, которые ссылались на исходное местоположение перемещенных ячеек, справочные формулы автоматически обновятся до нового местоположения перемещенных ячеек. Надеюсь это поможет! (Предполагается, что это работает в Excel, но я сделал это только в Google Sheets).


0
  1. Выделите ячейки мышью
  2. Copy co clipboard
  3. Переместите выделенные ячейки в новое место с помощью мыши, захватив край группы
  4. Вставить из буфера обмена в пустое пространство, из которого вы только что удалили все

0

Я просто нахожу и заменяю все экземпляры '=' на '' (или столько формул, которые пытаюсь скопировать, сколько могу), чтобы превратить все формулы в простой текст. Я копирую и вставляю ячейки, затем добавляю '=' обратно.

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


0

Вот еще один вариант:

  1. Переключиться в режим «Показать формулы» (в меню «Вид»)
  2. скопируйте нужную область
  3. Вставить в какой-нибудь внешний текстовый редактор
  4. Внести некоторые изменения - это так же просто, как добавить пробел
  5. Скопируйте формулы из внешнего текстового редактора.
  6. Вставить в целевой области на листе
  7. Выключить Показать формулы

Хотя это кажется длительной процедурой, на практике это всего лишь несколько нажатий клавиш. Кроме того, шаг # 4 является обязательным в моей настройке - без него Sheets будет по-прежнему обновлять расположение ячеек, как если бы это было прямое копирование и вставка. YMMV.


0

Использование INDIRECT()отлично подходит для сохранения абсолютной позиции ссылок после того, как цели были скопированы и вставлены, но проблема в том, что она также сохраняет абсолютную позицию при копировании формулы , что означает, что вы не можете легко расширить формулу, чтобы охватить большую диапазон при его использовании.

Решение состоит в том, чтобы объединить INDIRECT()с ROW(), COLUMN()и ADDRESS()программно генерировать положение целевой соты на основе ячейки в формуле.

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

INDIRECT("A"&ROW())

Чтобы ввести динамические смещения из ячейки формулы, вы можете использовать ADDRESS():

INDIRECT(ADDRESS(ROW()-1,COL()-4))

На скриншоте ниже формулы в B1:E1были расширены до 16 строк ниже, а затем числовая последовательность A7:A10была вырезана и вставлена ​​на 6 ячеек вниз. Как вы можете видеть, простейшие формулы автоматически корректировались и десинхронизировались, в то время как простое использование INDIRECT()не экстраполировало должным образом по всем строкам, но две формулы, которые используют INDIRECT()наряду с программным извлечением местоположений строк и столбцов, смогли сохранить свои ссылки:

Демонстрационная картина


-1

Вы можете нажимать F4для переключения между различными вариантами абсолютных ссылок, когда курсор находится на ячейке или диапазоне. Это работает на Mac и Windows.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.