Range1.Copy
Range2.PasteSpecial Paste:=xlPasteFormulas, SkipBlanks:=True
Если Range1
и Range2
имеют одинаковые размеры, этот код выполняется без каких-либо проблем. Ожидается, что формулы в скопированном вами диапазоне будут вставлены в целевой диапазон, но любые пустые ячейки в Range1
не будут иметь формулы, скопированные в Range2
, вместо этого любые текущие значения ячеек будут оставлены такими, какими они были.PasteSpecial SkipBlanks: = True не удается с слившихся клеток
Я обнаружил, что это не удается с объединенными ячейками. На рисунке ниже показано, эквивалентное действие с помощью встроенной в Paste Special UI, который терпит неудачу идентичным образом:
Можно ли думать о шикарном обходном , что не включает в себя цикл?
Обратите внимание, что просто использование варианта Range1.Formula = Range2.Formula
не будет достаточным, поскольку оно перезапишет нежелательные ячейки в Range2
с пустыми (пустыми) значениями.
Я удалил ограничение на отсутствие циклов, потому что в противном случае не существует идеального решения.
Можно ли это сделать для работы с произвольным источником и местом назначения? Пример, который я дал, был всего лишь примером, смещение между ними не будет фиксированным «(2, 0)». Помимо этого вы, кажется, обратились к основной точке боли. – Alain
После тестирования кажется, что это все еще не удается, если исходное значение является формулой массива или имеет форматирование средней ячейки, которое невозможно сохранить или восстановить с использованием свойства range.formula. Я не могу делать предположения о содержимом ячеек назначения. Кажется, что любое решение, включающее перезапись исходного содержимого ячейки, которое должно было быть пропущено, даже временно, может не сработать. Слитые клетки - такая проклятая боль. – Alain
@Alain Смещенная часть может быть 'abs (rngOrigin.row-rngDestination.row)' вместо '2'. Для другого комментария я абсолютно согласен: сочетание объединенных ячеек + несмежных диапазонов трудно решать без каких-либо предположений. Формат, который мы можем восстановить, если мы сохраним свойство 'text' в варианте, но не массив формулы. Также копирование 'rngSkip' во временный диапазон не работает:' rngSkip' является несмежным, поэтому мы не можем вставить временный диапазон обратно к нему. Не уверен, что еще может помочь. Может быть, сохранить все свойства в пользовательском объекте и обратно? – Ioannis