5

Когда вы нажимаете CTRL+D в Excel 2007 или 2010 (и, возможно, более старых версиях), он делает точную копию ячейки над ней (конечно, изменяя ссылки на ячейки). При этом он копирует все остальное, например, форматирование шрифта, заливку и даже границы (тьфу). Если бы я мог просто скопировать значение /forumula и просто унаследовать форматирование текущей ячейки, это было бы здорово.

Обновление 2014/08/01

Я придумал этот удивительный макрос. Однако недостатком использования макроса является то, что вы теряете возможность отмены. Я знаю, что есть способ реализовать функцию отмены с помощью макроса, не создавая макрос отмены. Я делал это раньше в Excel. Есть способ сказать Excel, чтобы каким-то образом сохранить состояние книги, чтобы отмена фактически вернулась. Это еще один вопрос, который я, скорее всего, опубликую.

Sub CtrlD()

Dim r As Range

Set r = Selection

Application.Union(r, r.Offset(-1, 0)).FillDown

End Sub

Если кто-то не знает о более естественном подходе к этому, тогда этот ответчик получит оценку.

4 ответа4

2

Вы можете копировать только формулы и значения, оставляя форматирование позади, используя сочетание клавиш Ctrl - ' - это клавиша Ctrl и одинарная кавычка.

Или вы можете использовать маркер заполнения, чтобы перетащить вниз, а затем выберите раскрывающийся список параметров автозаполнения с помощью "Заполнить без форматирования".

1

Оказывается, вы можете сделать это с клавиатуры только путем последовательного нажатия следующих клавиш: Alt, H, V, O после копирования нужной формулы.

Это несколько громоздко, но вы можете в основном использовать его так же, как Ctrl+D.

Это работает, потому что вы получаете "Вставить формулы и форматирование чисел", что я думаю, в основном то, что вы хотите. Границы и стили шрифта не переносятся.

Вероятно, есть способ поместить это как кнопку на ленте и назначить ей собственный ярлык.

0

На ленте: перейдите на вкладку Вид -> показать -> personal.xlsb -> ОК -> записать новый макрос -> В диалоговом окне: имя: "pasteVvalue" -> ярлык "crtl+D" -> запись в "папке личных макросов" -> ok. Использовать любую произвольную команду с ленты -> остановить запись -> показать макрос: "pasteValue" -> стереть весь код vba между строкой Sub pasteValue() и End sub вставьте следующее -> сохранить

 Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

Отныне crtl+d будет вести себя так, как вы хотите (копировать значение или формулу при смене ссылок) во всех файлах Excel, которые вы используете на своем компьютере.

0

Этот макрос отражает функциональность ответа Тейлина (автозаполнение без форматирования) в VBA, вдохновленную вашим кодом:

Sub Extend_Content_From_Above()
    Dim above As Range

    For Each cur In Selection
        Set above = cur.Offset(-1, 0)
        above.AutoFill Destination:=Range(above, cur), Type:=xlFillValues
    Next cur
 End Sub

Обратите внимание, что он явно обрабатывает выделение из нескольких ячеек, поскольку в Excel обработка этого кода является загадочной.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .