CTRL + D в Excel 2010 заполняет значения и форматирование, но я хочу, чтобы он заполнял только значения / формулы


5

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

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

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

Sub CtrlD ()

Dim R As Range

Set r = Выбор

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

End Sub

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

Ответы:


2

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

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

введите описание изображения здесь


1
К сожалению, CTRL + ', кажется, не изменяет ссылки на ячейки (требование в моем вопросе). Вместо того, =A1+A2чтобы изменять быть A2+A3, он копирует формулу дословно. Кроме того, перетаскивание маркера заливки с помощью мыши нарушает назначение сочетания клавиш. Я хотел бы иметь возможность нажать CTRL + [что угодно] и заставить его делать все, что делает CTRL + D, не копируя форматирование.
oscilatingcretin

Ctrl + 'работает только для одной ячейки. Также обратите внимание, что он копирует значение из первой невыделенной ячейки над выделением.
Дрю Чапин

1

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

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

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

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


Идея хороша, но другой автор уже предложил подобное решение, включающее вставку формул, которые вообще не копируют форматирование. Еще одним недостатком является то, что вы теряете все, что было ранее скопировано в буфер обмена. Также неудобно сначала выделять строку выше, а затем копировать нажатия клавиш, которые не нужно делать с помощью сочетания клавиш CTRL + D.
колеблющийся

@oscilatingcretin Действительно, это не идеально. Но форматирование копирующих чисел не является ударом: 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, которые вы используете на вашем компьютере.


Вы забыли на самом деле скопировать текст в вашем макросе. Вы также использовали xlPasteValuesвместо xlPasteFormulas. Я обновил свой вопрос решением, используя вашу идею. Если никто не посоветует более родной метод достижения этой цели, вы получите ответ.
oscilatingcretin

На самом деле, подожди, я не могу использовать это. Я только что понял, что копирование ячейки уничтожит все, что я сохранил в своем буфере обмена, так что это не сработает.
колеблющийся

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 обработка этого кода является загадочной.


Похоже, это демонстрирует странное поведение. Сделать A1= 3и B1= =A1. Теперь выберите диапазон A2: B2 и запустите свой макрос. Он пытается заполнить серию столбца A, в то время как он корректирует ссылку на ячейку столбца B. Однако, если вы запустите свой макрос только на ячейке B2, он скопирует значение.
oscilatingcretin

Ах, то же самое в Excel 2013. Я не думал проверять это на множестве ячеек, поскольку в вашем вопросе не упоминалось, что вы заинтересованы в этом. Если это утешит, то ответ Тейлина на основе мыши ведет себя так же. Но хорошая новость в том, что я исправил это; см пересмотренный ответ.
Скотт

Я не пытаюсь придираться, но что ваше решение делает Application.Union(above, above.Offset(-1, 0)).FillDownиз моего ОП?
oscilatingcretin
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.