Макрос excel формат по образцу

На чтение 3 мин. Просмотров 15.1k. Опубликовано 30.07.2016

Есть в Excel отличная функция «Формат по образцу», которая позволяет копировать все последующие ячейки по формату выделенной ячейки. Наверно, многие ей пользовались. И наверно, как и я, пользовались следующим образом: выделил ячейку, нажал формат по образцу, выделил ячейку, опять нажал формат по образцу, выделил ячейку и так далее. Мне показалось, что проблема этой функции в том, что ее нельзя применить сразу на несколько ячеек. И поэтому я написал макрос, который это делает. Вся печаль состоит в том, что этот макрос оказался не нужен, так как в Excel такой функционал есть ох ох.

Урок, который надо усвоить на будущее, заключается в том, что не надо изобретать очередной велосипед, а стоит лишь к существующему прочитать справку усмешка. Достаточно было просто навести на соответствующую кнопку мышкой и во всплывающем сообщении дочитать до конца

«Формат по образцу»

Нужно просто дважды нажать на кнопку, и можно скопировать формат на несколько ячеек подряд.

Мой макрос работает по другой идеологии. Нужно сначала выделить ячейки (можно раздельные выделения через ctrl)

Выделяем ячейки (раздельное выделение через ctrl)

Запускаем макрос, он спросит ячейку или диапазон ячеек, формат которых нужно скопировать

Выбираем ячейки, у которых надо скопировать формат

После работы видим, что выделенные ячейки приняли нужный формат

Результат работы макроса

В общем, ничего сложного. Можно сказать даже, что макрос в одну строчку через метод PasteSpecial. НО кто пишет макросы в excel, те знают, что после работы макроса отсутствует возможность откатить результат. Если при любом действии Excel вы можете нажать стрелочку назад или ctrl+Z, то после макроса все попытки будут тщетны. А при использовании копирования формата обязательно какие-то ячейки случайно зацепишь или не в тот формат переведешь, в общем, отмену действий надо обязательно сделать.

Прочитав статью Как отменить действия макроса, стало понятно, что надо все делать самому в части восстановления данных. Я пошел по первому пути (сохранении свойств ячейки), все таки делать копию листа это круто, но следить в файле копиями листов без 100% возможности потом за собой убрать как-то нехорошо.

Мудрить особо не стал, и просто сохранил свойства ячеек (рамки, шрифт, параметры текста в ячейке). После работы макроса можно откатить все назад

Отмена действий макроса

и результат не заставит себя ждать

Результат отмены действий макроса

Есть, конечно, проблемка, описанная в оригинальной статье. Если выделяется, допустим, целая строка или колонка, то сохранение свойств приводит к притормаживанию, а отмена действий посылает Excel в хороший нокдаун. Поэтому в макросе для выделенных ячеек, количество которых более 100, отключается отмена действий. То есть макрос работает, но потом результат не вернешь. Хорошая новость: лучше строки и колонки копировать через стандартную команду «Формат по образцу», так как потом доступна отмена действий и Excel все это делает за секунды.

Единственный косяк в работе стандартной функции копирования формата: при объединенный ячейках в особых случаях excel пишет такое сообщение

Ошибка копирования формата

То есть, когда вы пытаетесь скопировать формат в строку с объединенными ячейками, вам нужно обязательно выделить полностью всю ячейку, иногда сразу это невозможно или трудно сделать. Но вот мой макрос спокойно применяет формат (насильно), убирая при этом объединенные ячейки

Результат работы макроса

Файл Excel c макросом ExampleCopyFont.xlsm

Отдельно только макрос macros_copyFormat.txt

 

itsokay

Пользователь

Сообщений: 12
Регистрация: 05.01.2018

#1

05.01.2018 22:54:41

Господа, доброго времени суток.

Помогите, пожалуйста, вот в таком вопросе :
нужно сделать условно говоря хоткей на функцию формат по образцу, для этого пишу макрос и назначаю на него хоткей.
автозапись предложила копировать формат с помощью функции Selection.Copy и вставлять его функцией

Код
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

Теперь вопрос по части как сделать так, что бы после нажатия хоткея отрабатывалось копирование, а потом после выбора нужной ячейки мышью  скопированный формат применялся к выбранной ячейке ?

Спасибо за ответ.

Изменено: itsokay05.01.2018 23:09:35

 

если Вам интересно изучать программирование — Вы можете экспериментировать с кодом до того времени пока все не получится так, ка Вы того хотите
если Вам нужен результат (скопировать формат какой-то ячейки на группу других ячеек), то для этой цели в Excel есть инструмент «формат по образцу», находится эта кнопка в меню Главная, группа Буфер обмена
на мой взгляд, ни в том ни в другом случае помощь форума Вам не нужна

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

itsokay

Пользователь

Сообщений: 12
Регистрация: 05.01.2018

#3

05.01.2018 23:29:42

Цитата
Ігор Гончаренко написал:
если Вам нужен результат (скопировать формат какой-то ячейки на группу других ячеек), то для этой цели в Excel есть инструмент «формат по образцу»,

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

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#4

05.01.2018 23:40:40

не знаю что Вы на этом выиграете
используйте это

Код
  If Application.CutCopyMode Then
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
  Else
    Selection.Copy
  End If

вместо Вашего хоткей макроса

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

itsokay

Пользователь

Сообщений: 12
Регистрация: 05.01.2018

Чудно!

Единственный момент это то что приходится дважды нажимать на хоткей (макрос). Задумка была изначально что бы хоткей нажимался один раз (происходит копирование) и потом мышкой выбирается ячейка для вставки формата после чего макрос сам вставляет формат по select мышкой. Как-то так.  

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#6

06.01.2018 01:13:59

а теперь это:

Код
  Dim rgF As Range, rg As Range
  On Error Resume Next:  Set rgF = Selection
  Set rg = Application.InputBox("Отметьте диапазон", _
  "Куда положить формат из " & rgF.Address(False, False), Type:=8)
  If rg Is Nothing Then Application.CutCopyMode = False: Exit Sub
  rgF.Copy
  rg.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  Application.CutCopyMode = False

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

itsokay

Пользователь

Сообщений: 12
Регистрация: 05.01.2018

мы наверное немного не понимаем друг друга.
задумка такая: в ячейке А1 нужный формат. К ячейке В1 этот формат нужно применить. Последовательность действий :
1)  ручками выбираем ячейку А1
2) нажимаем хоткей (отрабатывает первая часть макроса по копированию формата с текущей ячейки)
3) ручками выбираем ячейку В1 (отрабатывает вторая часть макроса по вставке формата в указанную ячейку).

 

согласен взаимопонимание стремится к нулю (на этапе, когда люди разговаривают на разных языках — это нормально)
на что заточен предложенный выше макрос:
0. вставляете текст этого макроса вместо тела вашего хоткей макроса
1. отмечаете ЛЮБУЮ ячейку (не обязательно А1, ЛЮБУЮ!)
2. жмете хоткей
3. макрос спрашивает куда скопировать форматот омеченной в п.1 ячейки?
4. отмечаете мишью требуемый диапазон, жмете Ок
5. готово. форматы отмеченной в п.1 ячейки распространены на указанные в п. 4. ячейки
что не так?

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

itsokay

Пользователь

Сообщений: 12
Регистрация: 05.01.2018

#9

07.01.2018 22:32:25

Цитата
Ігор Гончаренко написал:
что не так?

задача макроса свести процесс форматирования к нажатию хоткея + 1 клик мышки. Это должно занимать меньше секунды. В идеале вот так :
0. вставляете текст этого макроса вместо тела вашего хоткей макроса
1. отмечаете ЛЮБУЮ ячейку (не обязательно А1, ЛЮБУЮ!)
2. жмете хоткей

4. отмечаете мишью требуемый диапазон
5. готово. форматы отмеченной в п.1 ячейки распространены на указанные в п. 4. ячейки  

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

 

itsokay, фактически Вы хотите хоткей на вызов команды «Формат по образцу». К сожалению, программно активировать кнопку на ленте весьма сложно — обычно используют SendKeys для имитации нажатия клавиш. Но это довольно ненадежный метод. ИМХО наилучший из простых способов описан тут:

https://www.quora.com/What-is-the-shortcut-key-for-format-painter-in-Excel-2010

, Method 2.
Можете посмотреть варианты:

https://www.google.ru/search?q=excel+format+painter+hotkey

 

itsokay

Пользователь

Сообщений: 12
Регистрация: 05.01.2018

#12

08.01.2018 01:33:10

Цитата
Казанский написал:
хоткей на вызов команды «Формат по образцу»

Вот же он по вашей ссылке

Цитата
Add Format painter from Home tab to Quick Access Toolbar and you can assign a custom short cut by clicking one after the other i.e. Alt + User defined Numeric (Example: Alt + 5)

И не нужно никаких макросов. Прелестно!

Казанский

,

Ігор Гончаренко

, благодарю за помощь!

 

r_a_s

Пользователь

Сообщений: 9
Регистрация: 30.08.2018

Добрый День. Уважаемые.
Поделитесь пожалуйста макросом, если не сложно.
Макрос должен копировать формат по образцу из определенного листа. в другой лист. Строго все ячейки должны копироваться в те же ячейки только в другой лист.

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#14

02.03.2023 15:06:04

Код
Selection.Copy WorkSheets("ИмяДругогоЛиста").Range(Selection.Cells(1).Address(0,0))

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

Содержание

  1. Формат по образцу в Excel
  2. Как пользоваться форматированием по образцу
  3. Приемы применения форматирования по образцу
  4. Создаем горячую клавишу на вставку форматирования
  5. Как пользоваться горячей клавишей
  6. VBA Excel. Редактирование документов Word
  7. Добавление текста в новый документ
  8. Вставка текста без форматирования
  9. Вставка текста с форматированием
  10. VBA Excel. Форматирование текста в ячейке (объект Font)
  11. Формат отображаемого значения
  12. Основные свойства объекта Font
  13. Примеры форматирования текста
  14. 5 комментариев для “VBA Excel. Форматирование текста в ячейке (объект Font)”
  15. VBA Excel. Функция Format (синтаксис, параметры, примеры)
  16. Определение функции Format
  17. Синтаксис и параметры
  18. Именованные выражения форматов
  19. Именные форматы даты и времени
  20. Именованные форматы чисел
  21. Специальные символы для выражений форматов
  22. Символы для форматов даты и времени
  23. Символы для числовых форматов
  24. Символы для текстовых форматов
  25. Форматы для различных значений одного выражения
  26. Различные форматы для разных числовых значений

Формат по образцу в Excel

Как пользоваться форматированием по образцу

Думаю большинство знает такую команду как Формат по образцу она находится на вкладке Главная. Однако не все знают обо всех возможностях данной команды.

Данная команда копирует все форматирование из исходного диапазона, в том числе форматы, границы, условное форматирование, объединение ячеек.

Как правило формат по образцу используется следующим образом:

  1. Выделяется ячейка, формат которой необходимо скопировать
  2. На вкладке Главная с помощью команды Формат по образцу копируется формат данной ячейки. При этом рядом с курсором появляется значок кисточки.
  3. Мышкой выделяется диапазон ячеек к которому необходимо применить форматирование исходной ячейки.

Приемы применения форматирования по образцу

  1. Можно копировать формат как одной так и нескольких ячеек. Форматирование применяется у диапазону такого же размера, что и исходный диапазон.
  2. Форматирование можно применять к целым строкам или столбцам. Выделите столбец/строку, нажмите формат по образцу, а после выберите столбец/строку к которому необходимо применить формат.
  3. Формат по образцу можно применять и для очистки форматов. Для этого выделите ячейки, которые не содержат форматирования, вызовите команду формат по образцу и укажите диапазон в котором хотите удалить форматирование.
  4. Если дважды кликнуть левой кнопкой мыши по команде Формат по образцу, то режим копирования зафиксируется и вы можете скопировать формат в несколько диапазонов. Чтобы завершить форматирование нажмите клавишу Esc или повторно нажмите на команду Формат по образцу.
  5. Копировать форматирование можно не только у диапазонов, но и других объектов: рисунки, фигуры, диаграммы.

Создаем горячую клавишу на вставку форматирования

Можно конечно вынести кнопку Формат по образцу на панель быстрого доступа, но это не избавит нас от необходимости пользоваться мышкой при выборе диапазона к которому необходимо применить форматирование.

Гораздо удобнее скопировать формат например сочетанием клавиш Ctrl + C, выбрать нужный диапазон и вставить в него скопированное форматирование например, сочетанием клавиш Ctrl + Shift + V.

Чтобы так сделать, нам понадобится написать небольшой макрос. Вот его код:

Скопируйте код выше и вставьте его себе файл или в персональную книгу макросов.

После этого останется добавить горячую клавишу на выполнение данной команды. Для этого:

  1. На вкладке меню Вид, раскройте меню Макросы и выберите команду Макросы (или нажмите сочетание клавиш Alt + F8)
  2. В диалоговом окне Макросы найдите только что добавленную процедуру PasteFormat и нажмите кнопку Параметры.
  3. В следующем диалоговом окне задайте сочетание клавиш для вызова данной функции. Например зажмите клавишу Shift и клавишу V. После нажмите клавишу OK.

Как пользоваться горячей клавишей

Теперь, когда мы создали горячую клавишу посмотрим как ей пользоваться.

  1. Выберите диапазон, и скопируйте формат, нажав сочетание клавиш Ctrl + C.
  2. Выберите диапазон, в который необходимо вставить только формат.
  3. Нажмите сочетание клавиш Ctrl + Shift + V.

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

Источник

VBA Excel. Редактирование документов Word

Редактирование документов Word из кода VBA Excel. Добавление и форматирование текста. Объект Word.Range, свойство Text, методы InsertAfter и InsertBefore.

Работа с Word из кода VBA Excel
Часть 3. Редактирование документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Добавление текста в новый документ

Selection и Range позволяют заполнять текстом новые документы или редактировать существующие. Закладки можно использовать для вставки изменяемых реквизитов в шаблоны различных документов: договоры, акты, справки.

Объект Range имеет преимущество перед объектом Selection, так как он может быть создан только программно и не зависит от действий пользователя. Если для вставки и форматирования текста будет использоваться объект Selection, а пользователь во время работы программы просто поставит курсор в другое место документа, результат будет непредсказуем.

Word.Range кардинально отличается от объекта Range в Excel. В приложении Word он представляет из себя набор из одного или множества символов. А также он может вообще не содержать ни одного символа, а быть указателем ввода текста (виртуальным курсором).

Объект Range возвращается свойством Range других объектов приложения Word: Document, Selection, Bookmark, Paragraph, Cell (объект Table).

Вставка текста без форматирования

Если текст вставляется без форматирования, достаточно одной строки кода (myDocument – это переменная):

  • Вставка текста с заменой имеющегося: myDocument.Range.Text = «Вставляемый текст»
  • Добавление текста после имеющегося: myDocument.Range.InsertAfter «Добавляемый текст»
  • Добавление текста перед имеющимся: myDocument.Range.InsertBefore «Добавляемый текст»

Методами InsertAfter и InsertBefore можно вставить текст и на пустую страницу, также, как с помощью свойства Text. Перейти на новый абзац и начать предложение с красной строки можно с помощью ключевых слов vbCr (vbNewLine, vbCrLf) и vbTab.

Вставка текста с форматированием

Для форматирования отдельных участков текста необходимо указать диапазон символов, входящих в этот участок. Здесь нам также поможет объект Range, которому можно задать любой набор символов, содержащихся в документе Word.

Синтаксис присвоения диапазона символов объекту Range:

Источник

VBA Excel. Форматирование текста в ячейке (объект Font)

Форматирование текста в ячейке при помощи кода VBA Excel. Объект Font и его основные свойства. Примеры изменения начертания строк в заданном диапазоне.

В этой статье рассмотрены свойства шрифта (объекта Font), определяющие внешнее оформление (начертание) видимого значения ячейки. Это касается не только текста (строк), но и визуального начертания отображаемых дат и числовых значений.

Формат отображаемого значения

Когда мы из кода VBA Excel записываем в ячейку текстовое или другое значение, оно отображается в формате, присвоенном данной ячейке. Это может быть формат:

  • рабочего листа по умолчанию;
  • установленный для диапазона пользователем;
  • примененный к диапазону из кода VBA Excel.

Если ячейка содержит текстовое значение, его начертание можно форматировать по отдельным частям (подстрокам). Такое форматирование доступно как в ручном режиме на рабочем листе, так и из кода VBA Excel.

У объекта Range есть свойство Font (шрифт), которое отвечает за форматирование (начертание) визуально отображаемого текста в ячейках рабочего листа. Его применение вызывает объект Font, который в свою очередь обладает собственным набором свойств, отвечающих за конкретный стиль начертания отображаемого значения.

Основные свойства объекта Font

Свойство Описание Значения
Name наименование шрифта «Arial», «Calibri», «Courier New», «Times New Roman» и т.д.
Size размер шрифта от 1 до 409 пунктов
Bold полужирное начертание True, False
Italic курсивное начертание True, False
FontStyle заменяет Bold и Italic «обычный», «полужирный», «курсив», «полужирный курсив»
Superscript надстрочный текст True, False
Subscript подстрочный текст True, False
Underline подчеркнутый текст True, False
Color* цвет текста от 0 до 16777215

*Color — это не единственное свойство, отвечающее за цвет отображаемого текста в ячейке. Оно также может принимать и другие значения, кроме указанных в таблице. Смотрите подробности в статьях Цвет текста (шрифта) в ячейке и Цвет ячейки (заливка, фон).

Примеры форматирования текста

Пример 1
В этом примере ячейкам диапазона «A1:A3» присвоим шрифты разных наименований:

Пример 2
В этом примере рассмотрим применение одного свойства объекта Font к одной ячейке:

Пример 3
Форматирование диапазона из нескольких ячеек:

Пример 4
Пример форматирования шрифта в разных ячейках по одному свойству:

5 комментариев для “VBA Excel. Форматирование текста в ячейке (объект Font)”

Пример 2 не к одной ячейке, а к трём. Где пример к одной.

Добрый день, Алексей Леонидович!
Во втором примере показано применение одного свойства объекта Font к одной ячейке.
К ячейке «A5»:
Range(«A5»).Font.Bold = True
К ячейке «A6»:
Range(«A6»).Font.FontStyle = «полужирный курсив»
К ячейке «A7»:
Range(«A7»).Font.Superscript = True

Применение нескольких свойств объекта Font к одной ячейке может выглядеть следующим образом:

Скажите пожалуйста, а есть ли способ подставлять вместо свойства ячейки (Bold, Underline, Italic) переменную чтобы в цикле последовательно менять свойства ячейки одной командой? Это упрощенный пример, так сказать в принципе, есть ли способ записи типа .Cells(1,1).Font.Переменная=True где Переменная это одно из Bold, Italic, Underline?
With Worksheets(«Конфигурация»)
For i = 1 To 3
Select Case i
Case 1
s = «Bold»
Case 2
s = «Italic»
Case 3
s = «Underline»
End Select
.Cells(15, 1).Font.?s? = True
Next i
End With

Здравствуйте, Сергей!
Если заменить «Underline» на «Bold Italic» или «обычный» , тогда можно так:

С «Underline» такой фокус не проходит, но возвращает к обычному стилю.

нет, увы. Спасибо конечно, что мимо не прошли, но я дал лишь упрощенную формулировку задачи. На самом деле я хочу работать с объектами WMI, коих, как известно огромное количество и у каждого куча свойств. Я не хочу писать многокилометровый код и все время добавлять строки. Я хочу вынести на лист excel список объектов и слева от каждого в колонках список свойств. И в цикле пробегать по объектам и по внутреннему циклу по свойствам, подставлять все по очереди и получать значения. И для добавления еще одного мне нужно будет только добавить на лист объект или свойство. В код при этом лазить не нужно будет.
Но я уперся в это вот, нужно как-то подставлять в объект вместо свойства переменную. Для этого я и сделал этот крошечный пример. Здесь никто конечно не будет перебирать свойства в таком дурацком цикле, тем более, что свойства разные по формату, кому-то нужны цифры, кому-то булево значение. Так что этот пример смысла не имеет, но дает понять задачу.

Источник

VBA Excel. Функция Format (синтаксис, параметры, примеры)

Преобразование чисел, дат и строк в настраиваемый текстовый формат из кода VBA Excel с помощью функции Format. Синтаксис, параметры, символы, примеры.

Определение функции Format

Синтаксис и параметры

Format(Expression, [FormatExpression], [FirstDayOfWeek], [FirstWeekOfYear])

  • Expression – любое допустимое выражение (переменная), возвращающее числовое значение или строку (обязательный параметр).
  • FormatExpression – выражение формата, именованное или содержащее инструкции из специальных символов (необязательный параметр).
  • FirstDayOfWeek – константа, задающая первый день недели (необязательный параметр).
  • FirstWeekOfYear – константа, задающая первую неделю года (необязательный параметр).

Именованные выражения форматов

Именные форматы даты и времени

Имя формата Описание
General Date Стандартное отображение даты и времени в соответствии с параметрами системы.
Long Date Длинный формат даты.
Medium Date Средний формат даты.
Short Date Краткий формат даты.
Long Time Длинный формат времени.
Medium Time Средний формат времени.
Short Time Краткий формат времени.

Проверьте отображение даты и времени с использованием именованных форматов на вашем компьютере при помощи следующего кода VBA Excel:

Скорее всего, результат будет таким:

Именованные форматы чисел

Имя формата Описание
General Number Стандартное отображение числа без знака разделителя групп разрядов.
Currency Денежный формат.
Fixed Отображение числа без знака разделителя групп разрядов с двумя цифрами после разделителя целой и дробной части.
Standard Отображение числа со знаком разделителя групп разрядов и с двумя цифрами после разделителя целой и дробной части.
Percent Процентный формат: отображение числа, умноженного на 100, со знаком процента (%), добавленного справа.
Scientific Отображение числа в экспоненциальном виде.
Yes/No Возвращается «Нет», если число равно 0, иначе отображается «Да».
True/False Возвращается «Ложь», если число равно 0, иначе отображается «Истина».
On/Off Возвращается «Выкл», если число равно 0, иначе отображается «Вкл».

Проверяем работу именованных форматов на числах 2641387.7381962 и 0 с помощью кода VBA Excel:

Получаем следующий результат:

Вместо вопросительного знака в отображении числа в формате Currency, по идее, должен быть знак валюты (₽ или руб.).

Специальные символы для выражений форматов

Символы для форматов даты и времени

Символ Описание
Точка (.) Разделитель компонентов даты (день, месяц, год). Используется при отображении месяца в виде числа.
Пробел Разделитель компонентов даты (день, месяц, год). Используется при отображении месяца прописью.
Двоеточие (:) Разделитель компонентов времени (часы, минуты, секунды).
d День в виде числа без нуля в начале (1–31).
dd День в виде числа с нулем в начале (01–31).
m Месяц в виде числа без нуля в начале (1–12). Если (m) следует после (h) или (hh), отображаются минуты (0–59).
mm Месяц в виде числа с нулем в начале (01–12). Если (mm) следует после (h) или (hh), отображаются минуты (00–59).
mmm Месяц прописью в сокращенном виде (янв–дек).
mmmm Полное название месяца (январь–декабрь).
y День года в виде числа (1–366).
yy Год в виде 2-значного числа (00–99).
yyyy Год в виде 4-значного числа (1900–9999).
h Часы в виде числа без нуля в начале (0–23).
hh Часы в виде числа с нулем в начале (00–23).
n (m) Минуты в виде числа без нуля в начале (0–59).
nn (mm) Минуты в виде числа с нулем в начале (00–59).
s Секунды в виде числа без нуля в начале (0–59).
ss Секунды в виде числа с нулем в начале (00–59).

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

Примеры отображения даты с помощью разных по количеству наборов символа d:

Символы для числовых форматов

Символ Описание
Точка (.) Десятичный разделитель.
Запятая (,) Разделитель групп разрядов. В отображаемых числах заполняется пробелом.
(0) Заполнитель, который отображает цифру или ноль. Используется, когда нужны ведущие нули или нули в конце числа.
(#) Заполнитель, который отображает цифру или ничего не отображает. Используется, когда не нужны ведущие нули или нули в конце числа.
(%) Заполнитель процента. Выражение умножается на 100, а знак процента (%) вставляется на той позиции, где он указан в строке формата.
(E- E+ e- e+) Экспоненциальный формат.

Примеры использования символов в выражениях числовых форматов VBA Excel:

Символы для текстовых форматов

Символ Описание
At-символ (@) Заполнитель для символов, отображающий знак или пробел.
Амперсанд (&) Заполнитель для символов, отображающий знак или ничего (пустая строка).
Меньше ( ) Принудительный перевод всех буквенных символов в верхний регистр.

Примеры использования символов в выражениях строковых форматов VBA Excel:

Форматы для различных значений одного выражения

Различные форматы для разных числовых значений

В выражении формата для чисел предусмотрено от одного до четырех разделов, отделяемых друг от друга точкой с запятой. Отображаемая строка зависит от значения, возвращенного параметром Expression функции Format.

Количество разделов Результат форматирования
Один раздел Выражение формата применяется ко всем значениям.
Два раздела Первый раздел применяется к положительным значениям и нулям, второй – к отрицательным значениям.
Три раздела Первый раздел применяется к положительным значениям, второй – к отрицательным значениям, третий – к нулям.
Четыре раздела Первый раздел применяется к положительным значениям, второй – к отрицательным значениям, третий – к нулям, четвертый – к значениям Null.

Пример использования четырех разделов в выражении формата числовых значений:

Источник

Che_69

0 / 0 / 0

Регистрация: 26.12.2013

Сообщений: 32

1

Макрос «Формат по образцу»

15.01.2014, 18:12. Показов 9453. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
 
Sub Ìàêðîñ5()
'
' Ìàêðîñ5 Ìàêðîñ
'
 
'
    ActiveWindow.Panes(1).Activate
    Rows("11:11").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range(Selection, Selection.End(xlDown)).Select
End Sub

Но он не работает как надо… После исполнения макроса лишь выделяются все нижерасполагающиеся строки, а форматирование не применяется к ним!



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

15.01.2014, 18:12

Ответы с готовыми решениями:

При открытие файла csv макросом меняет формат столбца с «общий» на «числовой»
Здравствуйте! Подскажите, пожалуйста.
Нужно макросом открыть файл csv. При открытии вручную все…

Макрос для Excel. Формат строки по образцу при условии
Добрый день!
Помогите пожалуйста написать макрос.
Нужно. Если в ячейке столбца "C" содержится…

Задача: поменять формат всех ячеек с датой «dd.mm.yyyy hh:mm:ss» на «dd.mm.yy»
Добрый день, уважаемые форумчане!

Есть "умная" таблица с данными, в т.ч., датами, но даты не в…

Как сделать так, чтобы макрос удалял данные из строки, начиная со столбца «p» и заканчивая столбцом «y»?
Здравствуйте, как сделать так, чтобы макрос удалял данные из строки, начиная со столбца "p" и,…

7

Surrogate

Ушел с CyberForum совсем!

873 / 182 / 25

Регистрация: 04.05.2011

Сообщений: 1,020

Записей в блоге: 110

15.01.2014, 18:32

2

программное заполнение форматов (FillFormat)

Visual Basic
1
2
3
r = "11:" & ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    Range("11:11").Select
    Selection.AutoFill Destination:=Range(r), Type:=xlFillFormats



2



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

03.12.2022, 22:54

3

приветствую!

скажите пожалуйста как заполнять форматы находясь на другой странице, насколько я поняла операция рабочая лишь на активной странице



0



Часто онлайн

792 / 530 / 238

Регистрация: 09.01.2017

Сообщений: 1,820

03.12.2022, 22:58

4

Оксана33,
Нажимайте кнопку формат по образцу, переходите на нужный лист и выделяйте ячейку которую нужно.

Я так делал, это работает.



0



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

04.12.2022, 12:59

5

КостяФедореев, фишка в том чтобы без перехода, находясь на другой странице



0



344 / 206 / 78

Регистрация: 16.07.2020

Сообщений: 589

04.12.2022, 13:22

6

Оксана33, Не нужно так грубо нарушать правила форума.
Вы залезли в чужую тему со своим вопросом, который к ней не имеет никакого отношения. Свою создайте.
Если хотите быстро решить вашу проблему приложите небольшой файл с пояснениями.

Цитата
Сообщение от Оксана33
Посмотреть сообщение

насколько я поняла операция рабочая лишь на активной странице

Это неверно, с помощью VBA можно работать с любыми страницами не делая их активными.



1



Dinoxromniy

1234 / 671 / 239

Регистрация: 22.12.2015

Сообщений: 2,093

05.12.2022, 09:56

7

Цитата
Сообщение от Оксана33
Посмотреть сообщение

как заполнять форматы находясь на другой странице, насколько я поняла операция рабочая лишь на активной странице

Строго говоря, это работает не так. По нажатию кнопки происходит копирование (выделенные ячейки кстати и отображаются как положено при копировании) и специальная вставка с параметром «только формат». Вставить скопированное вы можете в любой лист документа. Например кусок кода ниже копирует оформление с любого листа в лист3 ячейку А1:

Visual Basic
1
2
3
Selection.Copy
        ThisWorkbook.Sheets.Item("Лист3").Cells(1, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False



1



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

08.12.2022, 15:25

8

AlexOld, я поняла, извините, думала это та же тема, чуть расширив ее

Добавлено через 13 минут
Dinoxromniy, спасибо за ответ! почему то не додумалась сама взять макрос из макрорекодера и переписать, подставив в Selection адреса, что уже делала неоднократно



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

08.12.2022, 15:25

Помогаю со студенческими работами здесь

Нужен макрос, который «Разрешает редактирование» и «Включить содержимое»
Добрый день, коллеги!

Необходимо найти способ, через макрос Разрешать редактирование и Включать…

Макрос, который бы в столбце в пустые строки вставлял формулы =»»&&»» предыдущего значения
Помогите пожалуйста, нужен макрос который бы в столбце в пустые строки вставлял формулы =""&&""…

Отметить полужирным шрифтом в исходном тексте слова имеющие приставки «пре», «при», «на», «не»
Отметить полужирным шрифтом в исходном тексте слова имеющие приставки "пре",
"при", "на", "не"….

Цифровой формат для TextBox TextBox1.NumberFormat = «0.0»
Kakoj nujen kod dlja togo chtoby pri vvode dannyx Format TextBox-a byl takim 10.000 ili 1.000.000…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

8

Выборочное форматирование листов по образцу

Didrou

Дата: Пятница, 19.02.2016, 09:42 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Доброе время суток!

Прошу помочь создать макрос, удовлетворяющей следующей задаче. Имеем книгу (приложена к сообщению), с листами «Содержание» «Источник» «образец» и n-ым количеством листов с датами в именах, созданных путем копирования листа «образец».

Задача:
Взять значения из двух ячеек отвечающих за диапазон D14 и D15 на листе «Содержание». Все листы в указанном диапазоне отформатировать согласно листа «образец» со всеми формулами, значениями, цветами и т.д. (один в один), кроме прямоугольного диапазона ячеек, указанного в ячейках D16 и D17.

Я себе эту операцию форматирования представляю так:
1. копирование листа «образец» с временным именем, к примеру «29.12.2015t»
2. занесение туда содержимого ячеек диапазона, указанного в ячейках D16 и D17 листа «Содержание» из форматируемого в данный момент листа «29.12.2015»
3. удаление листа «29.12.2015»
4. переименование листа «29.12.2015t» в «29.12.2015»

и так по каждому листу в диапазоне, указанном в ячейках D14 и D15 на листе «Содержание».

К сообщению приложен файл:

001_v3.xlsm
(82.8 Kb)

Сообщение отредактировал DidrouПятница, 19.02.2016, 09:45

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 10:28 |
Сообщение № 2

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Didrou, так нужно (макрос в модуле ReFormat)?
[vba]

Код

Sub Форматировать_по_образцу()
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Sheets
        If sh.Name Like «??.??.????» Then
            Sheets(«Образец»).Range(«a1:l34»).Copy sh.Range(«a1:l34»)
            sh.Range(«b9:e32»).ClearContents
        End If
    Next sh
End Sub

[/vba]
Если в b9:e32 нужно удалить все, включая заливку, то замените строку [vba]

Код

sh.Range(«b9:e32»).ClearContents

[/vba]
на [vba]

Код

sh.Range(«b9:e32»).Clear

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 10:49 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, макрос форматирует всё в диапазоне b9:e32 на всех листах после «образец». Надо наоборот вне диапазона и на листах, в диапазоне календарных дат с ячеек d14 и d15 Листа «Содержание».

И даже не вне диапазона а полностью лист, но с сохранением функций или значений в указанном диапазоне ( в данном случае b9:e32).

Сообщение отредактировал DidrouПятница, 19.02.2016, 10:54

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 10:56 |
Сообщение № 4

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Didrou, не очень поняла…стереть все с листа, кроме b9:e32?
если да, то в цикле вместо
[vba]

Код

            Sheets(«Образец»).Range(«a1:l34»).Copy sh.Range(«a1:l34»)
            sh.Range(«b9:e32»).ClearContents

[/vba]напишите
[vba]

Код

            sh.Range(«a1:l34»).ClearContents
            Sheets(«Образец»).Range(«b9:e32»).Copy sh.Range(«b9:e32»)

[/vba]
Если нет, нарисуйте в файле на каком-нибудь листе результат, который должен получиться после выполнения макроса.
UPD
ааа…кажется поняла)
сейчас выложу код


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал ManyashaПятница, 19.02.2016, 10:57

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 11:09 |
Сообщение № 5

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Проверяйте:
[vba]

Код

Sub Форматировать_по_образцу()
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Sheets
        If sh.Name Like «??.??.????» Then
            With sh
                lr = .UsedRange.Rows.Count
                lc = .UsedRange.Columns.Count
                Union(Range(.Cells(1, 1), .Cells(8, lc)) _
                    , Range(.Cells(9, 6), .Cells(32, lc)) _
                    , Range(.Cells(33, 1), .Cells(lr, lc)) _
                    , Range(.Cells(9, 1), .Cells(lr, 1))).Clear
            End With
        End If
    Next sh
End Sub

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 11:15 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, хорошая идея, лучше выложу файл такой, какой нужен в итоге:)

Вот…

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 11:18 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

И даже так, чтобы было нагляднее.

Видите, на листах 30дек 31 дек и 01 янв поменялось форматирование, но остались данные в указанном диапазоне.

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 11:32 |
Сообщение № 8

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Didrou, все равно не понятно %)
Т.е. нужно скопировать только формат, да?
на весь лист?
Тогда причем тут диапазон «b9:e32»? Он у Вас ничем (в плане формата) не отличается от образца.
И значения вне диапазона «b9:e32» тоже остаются без изменений…
Скопировать формат можно так…
[vba]

Код

        If sh.Name Like «??.??.????» Then
            Sheets(«Образец»).Range(«a1:l34»).Copy
            sh.Range(«a1:l34»).PasteSpecial xlPasteFormats
        End If

[/vba]
Если опять не угадала с диапазонами, используйте задание правильных диапазонов из предыдущих 2 моих кодов.


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 11:48 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, попробую с другой стороны описать.

В последнем выложенном мной файле листы с «30.12.2015» по «01.01.2016» отформатированы по образцу.
Эти листы скопированы с листа «образец» в чистую, но данные в диапазоне b9:e32 остались прежними/не тронутыми.

Нужно представить как пользователь в ручную копирует лист «образец». Копирует в него содержимое без форматирования с ячеек b9:e32 листа «30.12.2015». Затем удаляет лист «30.12.2015» и переименовывает вновь созданный на «30.12.2015». Вот такой «отформатированный» лист нужен в итоге, но макросом, а не ручками:)

Сообщение отредактировал DidrouПятница, 19.02.2016, 11:50

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 12:03 |
Сообщение № 10

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Ну не хочу я копировать, переименовывать, удалять… :p
[vba]

Код

Sub Форматировать_по_образцу()
    Application.ScreenUpdating = False
    Dim sh As Worksheet, sh1 As Worksheet
    Set sh1 = Sheets(«Образец»)
    lr = sh1.UsedRange.Rows.Count
    lc = sh1.UsedRange.Columns.Count
    For Each sh In ThisWorkbook.Sheets
        If sh.Name Like «??.??.????» Then
            With sh
                Range(sh1.Cells(1, 1), sh1.Cells(8, lc)).Copy Range(.Cells(1, 1), .Cells(8, lc))
                Range(sh1.Cells(9, 6), sh1.Cells(32, lc)).Copy Range(.Cells(9, 6), .Cells(32, lc))
                Range(sh1.Cells(33, 1), sh1.Cells(lr, lc)).Copy Range(.Cells(33, 1), .Cells(lr, lc))
                Range(sh1.Cells(9, 1), sh1.Cells(lr, 1)).Copy Range(.Cells(9, 1), .Cells(lr, 1))
                sh1.Range(«b9:e32»).Copy
                .Range(«b9:e32»).PasteSpecial xlPasteFormats
            End With
        End If
    Next sh
    Application.ScreenUpdating = True
End Sub

[/vba]
так?


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 13:44 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, в части форматирования вроде все в порядке.
Осталось применять не по условию:

[vba]

Код

If sh.Name Like «??.??.????» Then

[/vba]

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

[vba]

Код

sh1.Range(«b9:e32»).Copy
.Range(«b9:e32»).PasteSpecial xlPasteFormats

[/vba]

а брался из ячеек D16 и D17 листа «Содержание».

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 15:15 |
Сообщение № 12

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

последняя попытка:
[vba]

Код

Sub Форматировать_по_образцу()
    Application.ScreenUpdating = False
    Dim sh As Worksheet, sh1 As Worksheet
    Set sh1 = Sheets(«Образец»)
    lr = sh1.UsedRange.Rows.Count
    lc = sh1.UsedRange.Columns.Count
    With Sheets(«Содержание»)
        r = Range(.Cells(Range(.[d16]).Row, Range(.[d16]).Column), .Cells(Range(.[d17]).Row, Range(.[d17]).Column)).Address
    End With
    For Each sh In ThisWorkbook.Sheets
    If sh.Name Like «??.??.????» Then
        If CDate(sh.Name) >= Sheets(«Содержание»).Range(«d9») And CDate(sh.Name) <= Sheets(«Содержание»).Range(«d10») Then
            ‘Если нужны только значения, уберите Formula
            Rng = sh.Range(r).Formula
            Sheets(«Образец»).Range(«a1:l34»).Copy sh.Range(«a1:l34»)
            sh.Range(r).Formula = Rng
        End If
    End If
    Next sh
    Application.ScreenUpdating = True
End Sub

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 16:32 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, всё работает, только не тот диапазон брался
[vba]

Код

If CDate(sh.Name) >= Sheets(«Содержание»).Range(«d9») And CDate(sh.Name) <= Sheets(«Содержание»).Range(«d10»)

[/vba]
не d9 и d10, а d14 и d15, но это сущие пустяки, спасибо тебе! :)

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Макрос excel ускорить работу макроса
  • Макрос excel удаление скрытых строк
  • Макрос excel удаление пустой строки
  • Макрос excel удаление папок
  • Макрос excel типы данных