VBA, как быстро скопировать формулу и форматирование ячейки?

Вопрос:[Последний вывод] Я обнаружил, что value(11) может иногда копировать формулы, но не всегда. Формулы типа sumproduct и sumif не могут быть скопированы, но простые арифметические операции могут быть скопированы. Это так странно! Я до сих пор не могу понять, почему. Я знаю, что если я хочу только копировать значения, самый быстрый способ - Range("A1").Value =

Вопрос:

[Последний вывод] Я обнаружил, что 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»)

Оцените статью
Добавить комментарий