Вопрос:
[Последний вывод] Я обнаружил, что value(11) может иногда копировать формулы, но не всегда. Формулы типа sumproduct и sumif не могут быть скопированы, но простые арифметические операции могут быть скопированы. Это так странно! Я до сих пор не могу понять, почему.
Я знаю, что если я хочу только копировать значения, самый быстрый способ –
Range(«A1»).Value = Range(«A2»).Value
Если я хочу скопировать форматирование и значения, самый быстрый способ –
Range(«A1»).Value(11) = Range(«A2»).Value(11)
Если я хочу скопировать формулы, самый быстрый способ –
Range(«A1»).Formula = Range(«A2»).Formula
Что делать, если я хочу скопировать формулу и форматирование? (У меня много форматирования в этой ячейке, как условное форматирование, полужирное, подчеркивание, выравнивание, формат отображения номера, стиль границы и т.д., Поэтому нецелесообразно передавать каждый из стилей по одному.)
Лучший ответ:
Я просто нашел простой ответ.
Range(«A1»).Value(11) = Range(«A2»).Value(11) Range(«A1»).Formula = Range(«A2»).Formula
Так как value(11) терпит неудачу при копировании некоторых сложных формул (я не знаю, почему, должно быть, ошибка в Excel), я добавил вторую строку, чтобы снова вставить формулу. Это должно гарантировать правильность копирования всех формул.
Ответ №1
Как о суб подобном:
Sub copyFormattingAndFormulas(source As Range, target As Range) Dim sourceCell, targetCell As Range Dim i, j, lastRow, lastColumn As Integer lastRow = source.rows.count + source.row — 1 lastColumn = source.columns.count + source.Column — 1 For i = source.row To lastRow For j = source.Column To lastColumn Set sourceCell = Cells(source.row + i — 1, source.Column + j — 1) Set targetCell = Cells(target.row + i — 1, target.Column + j — 1) targetCell.value(11) = sourceCell.value(11) targetCell = sourceCell.Formula Next Next End Sub
Все, что он делает, – это то, что вы показали в вопросе (полезно знать о .value(11)!) в цикле для заданного диапазона.
Ответ №2
Чтобы скопировать формулы с форматированием в исходном диапазоне и сохранить относительные формулы (например, как с помощью Ctr-C и Ctr-V), используйте этот метод копирования и вставки:
Range(«A1»).Copy Range(«A2»)