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

49

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

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

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

grahamparks
источник
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:

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

MaryC.fromNZ
источник
3

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

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

Питер Ценг
источник
2

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

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

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

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

Dniz
источник
Очень хороший улов!
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.

Мик Любинскас
источник