Vba excel выравнивание столбца

Return to VBA Code Examples

This tutorial will demonstrate how to use VBA to Center Text in Cells both Horizontally and Vertically.

We can use the Alignment group in the Home Ribbon in Excel to center text both horizontally and vertically in a cell. If we are writing a macro to format text, we can re-create this functionality using VBA Code.

Center Text Horizontally

To Center Text horizontally in a single cell, we can use the following code:

Sub CenterText()
 ActiveCell.HorizontalAlignment = xlCenter
End Sub

Alternatively, to center text horizontally in each cell of a selected range of cells, we can use the Selection object and do the following:

Sub CenterText()
 Selection.HorizontalAlignment = xlCenter
End Sub

We can also change the alignment to right or left using the xlLeft and xlRight constants.

To right align the text in a cell, we can therefore use the following code:

Sub RightAlignText() 
 ActiveCell.HorizontalAlignment = xlRight
End Sub

Center Text Vertically

Centering the text vertically is much the same as horizontally.

Sub CenterTextVertical()
 ActiveCell.VerticalAlignment = xlCenter
End Sub

As is centering text vertically across a selection:

Sub CenterTextVertically() 
 Selection.VerticalAlignment = xlCenter 
End Sub

We can also change the text to the Top or Bottom of a cell or selection using the xlTop or xlBottom constants.

Sub TopAlignVertically() 
 ActiveCell.VerticalAlignment = xlTop
End Sub

Center Text Horizontally and Vertically at the Same Time

If we want to center the text both Horizontally and Vertically at the same time, there are a couple of ways we can do so.

Sub CenterBoth()
 ActiveCell.HorizontalAlignment = xlCenter
 ActiveCell.VerticalAlignment = xlCenter
End Sub

To cut down on repeating code, we can use a With and End With Statement.

Sub CenterBoth2()
  With Selection
   .HorizontalAlignment = xlCenter
   .VerticalAlignment = xlCenter
  End With
End Sub

The code above will apply to all the cells in Excel that are selected at the time.

CenterText With

Using With and End With is very effective when we have a lot of formatting to do within the selection, such as merging cells or changing orientation.

Sub MergeAndCenter()
  With Selection
   .HorizontalAlignment = xlCenter
   .VerticalAlignment = xlBottom
   .Orientation = -36
   .MergeCells = True
  End With
End Sub

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Выравнивание текста и других значений в ячейке по горизонтали и вертикали из кода VBA Excel. Свойства HorizontalAlignment и VerticalAlignment. Примеры.

Выравнивание по горизонтали

Для выравнивания текста в ячейках рабочего листа по горизонтали в VBA Excel используется свойство HorizontalAlignment объекта Range. Оно может принимать следующие значения:

Выравнивание Константа Значение
По левому краю xlLeft -4131
По центру xlCenter -4108
По правому краю xlRight -4152
Равномерно по ширине xlJustify -4130
По умолчанию xlGeneral 1

Константу использовать удобнее, так как ее можно выбрать из подсказок и легче запомнить. Но и присвоение свойству HorizontalAlignment непосредственно числового значения константы будет работать точно так же.

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

Sub Primer1()

‘Заполняем ячейки текстом

   Range(«A1») = «Левая сторона»

   Range(«B1») = «Центр ячейки»

   Range(«C1») = «Правая сторона»

‘Применяем горизонтальное выравнивание

   Range(«A1»).HorizontalAlignment = xlLeft

   Range(«B1»).HorizontalAlignment = xlCenter

   Range(«C1»).HorizontalAlignment = xlRight

‘Выводим значения констант

   Range(«A2») = «xlLeft  =  « & xlLeft

   Range(«B2») = «xlCenter  =  « & xlCenter

   Range(«C2») = «xlRight  =  « & xlRight

End Sub

Выравнивание по вертикали

Для выравнивания текста в ячейках рабочего листа по вертикали в VBA Excel используется свойство VerticalAlignment объекта Range. Оно может принимать следующие значения:

Выравнивание Константа Значение
По верхнему краю xlTop -4160
По центру xlCenter -4108
По нижнему краю xlBottom -4107
Равномерно по высоте xlJustify -4130

Точно так же, как и по горизонтали, при выравнивании по вертикали свойству VerticalAlignment можно присваивать как значение в виде константы, так и непосредственно ее числовое значение.

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

Sub Primer2()

‘Заполняем ячейки текстом

   Range(«A3») = «Верх»

   Range(«B3») = «Центр»

   Range(«C3») = «Низ»

‘Применяем вертикальное выравнивание

   Range(«A3»).VerticalAlignment = xlTop

   Range(«B3»).VerticalAlignment = xlCenter

   Range(«C3»).VerticalAlignment = xlBottom

‘Выводим значения констант

   Range(«A4») = «xlTop  =  « & xlTop

   Range(«B4») = «xlCenter  =  « & xlCenter

   Range(«C4») = «xlBottom  =  « & xlBottom

End Sub

Двойное выравнивание

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

Пример 3
Записываем в ячейки диапазона «A1:C4» текст «Всё по центру», применяем горизонтальное и вертикальное выравнивание по центру для всего диапазона.

Sub Primer3()

   With Range(«A1:C4»)

      .Value = «Всё по центру»

      .HorizontalAlignment = 4108

      .VerticalAlignment = xlCenter

   End With

End Sub

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


2 / 2 / 0

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

Сообщений: 44

1

11.04.2011, 18:17. Показов 5717. Ответов 2


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

Как средствами VBA выровнять столбец по содержимому ячеек?
Поиск не помог
Спасибо!)



0



YuraAAA

1605 / 1337 / 291

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

Сообщений: 3,487

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

11.04.2011, 19:38

2

Советую пользоваться записью макросов.
Выравнивание столбца (С)

Visual Basic
1
Columns("C:C").EntireColumn.AutoFit



1



2 / 2 / 0

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

Сообщений: 44

11.04.2011, 23:08

 [ТС]

3

YuraAAA, едрить точно, я и забыл



0



Excel VBA, Horizontal Alignment

Aug 11, 2015 in Excel

In this article I will explain the different horizontal alignment formattings applicable to cells and range. I have also provided the VBA code required to apply them.

For examples using horizontal alignment in VBA code please see:

  • Excel VBA, Set Horizontal Alignment, (Sample Code)
  • Excel VBA, Get Horizontal Alignment (Sample Code)

Jump To:

  • Left (Indent), xlLeft
  • Center, xlCenter
  • Right (Indent), xlRight
  • Fill, xlFill
  • Justify, xlJustify
  • Center Across Selection, xlCenterAcrossSelection
  • Distributed (Indent), xlDistributed
  • General, xlGeneral
  • Indent, IndentLevel


Left (Indent), xlLeft:

The following code will left align the text in cell “A1”:

Range("A1").HorizontalAlignment = xlLeft

Result:

Left (Indent) XlLeft


Center, xlCenter:

The following code will apply the horizontal center alignment to the text in cell “A1”:

Range("A1").HorizontalAlignment = xlCenter

Result:

Center, XLCenter


Right (Indent), xlRight:

The following code will right align the text in cell “A1”:

Range("A1").HorizontalAlignment = xlRight

Result:

Right (Indent), xlRight, Excel VBA


Fill, xlFill:

The following code will fill the cell in “A1” with the text in it:

Range("A1").HorizontalAlignment = xlFill

Result:

Fill, xlFill, Excel VBA


Justify, xlJustify:

The following code will apply the horizontal justify formatting to the text in cell “A1”. Note that the justify property will only be apparent when you have multiple lines of text in a cell and the wrap property is on:

Range("A1").HorizontalAlignment = xlJustify

Result:

Justify, xlJustify, Excel VBA


Center Across Selection, xlCenterAcrossSelection:

The following code centers the text in cell “A1” among the cells A1~I1. This is a good way of centering a text over multiple columns without merging the cells:

Range("A1:M1").Select
Selection.HorizontalAlignment = xlCenterAcrossSelection

Before:

Center Across Selection,xlCenterAcrossSelection , Before Excel VBA

After:

Center Across Selection,xlCenterAcrossSelection , After Excel VBA


Distributed, xlDistributed:

The following command applies the distributed (indent) formatting to cell “A1”. This formatting creates spaces between the words so that the entire horizontal spacing in that cell is filled:

Range("A1").HorizontalAlignment = xlDistributed

Before:

Distributed, xLDistributed, Excel VBA

After:

Distributed, xLDistributed, After Excel VBA


General, xlGeneral:

The following command applies the general horizontal formatting to cell “A1”. This formatting causes text to be left aligned and numbers to be right aligned:

Range("A1").HorizontalAlignment = xlGeneral

Result:

General, xLGeneral, Excel VBA


Indent, IndentLevel:

The 3 formattings left aligned, right aligned and distributed accept an indentation level. The code below applies an indentation to the cells A1, A2 and A3:

Range("A1").IndentLevel= 1

Before:

Indent, IndentLevel, Before, Excel VBA

After:
Indent, IndentLevel, After, Excel VBA
See also:

  • Excel VBA Formatting Cells and Ranges Using the Macro Recorder
  • VBA Excel, Alignment
  • Excel VBA, Set Horizontal Alignment, (Sample Code)
  • Excel VBA, Get Horizontal Alignment (Sample Code)

If you need assistance with your code, or you are looking for a VBA programmer to hire feel free to contact me. Also please visit my website  www.software-solutions-online.com

В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц Excel средствами VBA.

VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк

В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:

запыления планов работ.

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

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

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

Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

Код Visual Basic.

В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub

VBA-код макроса.

Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:

сбросить форматирование таблицы на исходный формат.

Таблица приобрела формат, который определен макросом. Таким образом код VBA нам позволяет сбросить любые изменения формата ячеек на предустановленный автором отчета.



Описание VBA-макроса для формата ячеек таблицы Excel

Первая инструкция в коде, проверяет выделены ли ячейки диапазоном. Если перед выполнением макроса выделил другой элемент листа, например, график, тогда макрос закрывается и дальнейшие инструкции выполняться не будут. В противные случаи будут форматироваться все выделенные ячейки по очереди в соответствии с определенными настройками форматирования:

  1. Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
  2. Включен построчный перенос текста.
  3. Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
  4. Сброс цвета шрифта на авто.
  5. Удаляется любая заливка ячеек.
  6. Ширина столбцов автоматически настраивается под текст в ячейках.
  7. Автоматически настроить высоту строк по содержимому ячеек.

Модификация исходного кода макроса для форматирования

Если необходимо сделать так чтобы текст выравнивался не по центру относительно горизонтали, а по правую сторону ячейки, тогда измените константу xlHAlignCenter на xlHAlignRight. Она находиться в свойстве .HorizontalAlignment. Сделайте это следующим образом:

.HorizontalAlignment = xlHAlignRight.

Таким же образом можно выровнять текст по левую сторону изменив значение константы на xlHAlignLeft. Или можно выровнять положение текста по ширине ячейки используя константу xlHAlignJustify.

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

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

Если нужно применить для границ ячеек толстую и пунктирную линию в синем цвете, смодифицируйте инструкцию, отвечающую за формат линий:

.Borders.LineStyle = xlDash

.Borders.Color = vbBlue

.Borders.Weight = xlMedium

Описание настройки форматирования для линий границ ячеек. Мы будем получать разные дополнительные типы линий границ если для свойства LineStyle присваивать такие константы:

  • xlDoshDot – применяется для рисования пунктирных линий в границах ячеек;
  • xlDouble – рисует двойную линию;
  • xlHairLine – рисует тонкую линию;
  • xlThick – для рисования очень толстой линии.

Для настройки цвета линий Excel предлагает всего 8 констант для определенных цветов. Константы для настройки цвета линий границ для свойства Color:

  • vbBlack – черный;
  • vbWhite – белый;
  • vbRed – красный;
  • vbGreen –зеленый;
  • vbBlue – синий;
  • vbYellow – желтый;
  • vbMagenta – алый;
  • vbCyan – голубой.

Но при необходимости присвоить линиям границ другие цвета можно вместо константы для свойства Color записать функцию RGB(). Достаточно лишь в аргументе этой функции указать код цвета по шкале от 0 и до 255.

Если нужно применить толстую линию только для границ выделенного диапазона, тогда перед инструкцией End With добавьте следующую строку кода:

.BorderAround xlContinuous, xlMedium, vbBlack

Описание: В первом аргументе для метода BorderAround можно записать также другой стиль линии. Во втором – толщину линии, а в третьем – цвет. Константы, которые можно присвоить в качестве значений для этих аргументов можно использовать те же, которые мы использовали для свойств: LineStyle, Weight, Color.

Если нужно экспонировать первую строку для выделенного диапазона с помощью жирного и курсивного шрифта значений ячеек. А также заполнить ячейки первой строки заливкой с голубым цветом, тогда в самом конце кода макроса перед последней инструкцией End Sub следует добавить несколько строк с VBA-кодом:

.Rows(1).Font.Bold = True

.Rows(1).Font.Italic = True

.Rows(1).Interior.Color = vbCyan

Если хотите присвоить такой же формат для не только для первой строки, но и для первого столбца выделенного диапазона, тогда скопируйте и вставьте ниже эти 3 строчки кода. После в последних трех строках измените свойство Rows на Columns.

.Columns (1).Font.Bold = True

.Columns (1).Font.Italic = True

.Columns (1).Interior.Color = vbCyan

Если нужно задать особенный формат для экспонирования последней строки выделенного диапазона, тогда измените число 1 в аргументе свойства Rows на число всех выделенных строк .Rows.Count. Например, добавьте в конец кода еще такую строку:

.Rows(.Rows.Count).Font.Bold = True

Полная версия модифицированного кода макроса выглядит так:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
.BorderAround xlContinuous, xlMedium, vbBlack
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
.Columns(1).Font.Bold = True
.Columns(1).Font.Italic = True
.Columns(1).Interior.Color = vbCyan
.Rows(.Rows.Count).Font.Bold = True
End With
End Sub

Пример работы измененного кода VBA-макроса:

Пример после изменений в коде.

В данном примере вы ознакомились с базовыми возможностями форматирования с помощью VBA-макросов. Уверен, что теперь вы сможете самостоятельно найти практическое применение этим исходным кодам.

 

flower

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

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

Здравствуйте!
Может, кто знает, как автоматически   разместить ячейку в первом столбце максимально по центру относительно заполненных ячеек в правом (втором) столбце (количество ячеек будет всегда меняться, т.е. будет динамика) и одновременно разметить в той же строке ячейку в 9-м столбце таблицы (блока)? См. пример.
В идеале: находясь в ячейке B6 выполняется задача.
Благодарю за внимание)

Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.

 

vikttur

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

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

1. Какая строка считается концом блока — перед толстой линей или перед строкой с заполненной ячейкой в столбце А?
2. По каким либо причинам после центровки изменится толщина линии  — как Вы определите границы блоков?

Если красивость нужна в отчетном документе — объединить ячейки первого столбца. Если эта таблица с данными используетс для дальнейших обработок — размножить значеия столбца А на все строки и не создавать себе проблемы в будущем.

 

flower

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

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

Забыла сказать, что объединение ячеек исключено, дублировать значения в строках 1-го столбца тоже. Да, данные будут использоваться для для дальнейших обработок. Границы блоков — жирной линией для наглядности, в данном случае толщина линий границ не имеет значения. Конец блока — первая непустая ячейка 1-го столбца.

Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.

 

JayBhagavan

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

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

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#4

02.01.2019 13:43:37

Цитата
flower написал: Конец блока — первая непустая ячейка 1-го столбца.

Допустим написали макрос для центрирования текста в ячейках столбца. Вы добавили ещё что-то и как макрос поймёт относительно чего центрировать текст?
Я бы заполнил все пустые ячейки соответствующим текстом, в рамках каждого блока кроме центровой ячейки сделал бы заливку и цвет текста белым в остальных ячейках.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

vikttur

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

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

flower, cм. вопрос №2 в сообщении №2. Как пользователь или программа определит, куда относить какую-нибудь клубнику — к фруктам или клубничке? )
Не получится ли так, что через время будете искать спасения от своей центровки?

 

Bema

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

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

Визуализация хотелки с помощью УФ.

Прикрепленные файлы

  • Crhsnm.xls (39.5 КБ)

Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл

 

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

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

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

#7

02.01.2019 14:02:57

Цитата
flower написал:
В идеале: находясь в ячейке B6 выполняется задача.

в соответсвии с идеалом. ставите курсор в В6, выполняете это:

Код
Sub ToCentre()
  Dim Lr&, R&, rg As Range
  Lr = ActiveCell.End(xlDown).Row + 1:  Set rg = ActiveCell.Offset(0, -1)
  Do While R < Lr
    If Not IsEmpty(rg.Offset(1, 0)) Then R = rg.Row + 1 Else R = rg.End(xlDown).Row: If R > Lr Then R = Lr
    If R - rg.Row > 1 Then Cells(Int((rg.Row + R) / 2), 1) = rg: rg = Empty
    Set rg = Cells(R, 1)
  Loop
End Sub

Изменено: Ігор Гончаренко02.01.2019 14:03:19

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

 

flower

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

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

#8

02.01.2019 14:35:19

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

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

есть такой макрос:
но не нравится его центрирование, не идеально по центру получается в разных случаях. Как исправить не знаю(( и нужно, чтобы при вызове максроса из ячейки B6 он сработал одновременно для столбцов №№ 1 и 9, но самое главное максимальное центрирование))

Код
Sub середина1()

' Сочетание клавиш: Ctrl+q

    Application.DisplayAlerts = False
    sb = Selection.Column
    st = Selection.Row
    If Cells(st, sb - 1) = "" Then
        MsgBox "Внимание! Левый столбец ПУСТ!", vbInformstion, "Конец фильма"
        Exit Sub
    End If
    psp = Cells(Application.Rows.Count, sb).End(xlUp).Row
        psl = Cells(psp, sb - 1).End(xlUp).Row
        ns = psl - 1
    
    For i = psp To st Step -1
        c = ""
        tk = psp - psl + 1
        c = Fix(tk / 2)
        Cells(psl + c - 1, sb - 1) = Cells(psl, sb - 1)
        Cells(psl, sb - 1) = ""

        Cells(psl + c - 1, sb - 1).VerticalAlignment = xlCenter
        Cells(psl + c - 1, sb - 1).HorizontalAlignment = xlCenter
        
        p = psl - 1
        psl = Cells(psl, sb - 1).End(xlUp).Row
        i = psl + 1
        psp = p
    If psp = 0 Then
    Application.DisplayAlerts = True
        Exit Sub
    End If
    Next i
    Application.DisplayAlerts = True
End Sub

Изменено: flower02.01.2019 14:47:23

Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.

 

Юрий М

Модератор

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

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

flower, код следует оформлять соответствующим тегом. Посмотрите, как это выглядит у Игоря. Ищите такую кнопку (см. скрин) и исправьте своё сообщение.

 

flower

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

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

vikttur

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

Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.

 

Юрий М

Модератор

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

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

#11

02.01.2019 14:45:32

Цитата
flower написал:
не идеально по центру получается в разных случаях

Идеально не всегда получится: как сделать идеально для чётного количества строк в блоке?

 

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

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

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

#12

02.01.2019 14:45:42

с колонкой I провтыкал

Код
Sub ToCentre()
  Dim Lr&, R&, R1&, rg As Range
  Lr = ActiveCell.End(xlDown).Row :  Set rg = ActiveCell.Offset(0, -1)
  Do While R < Lr
    If Not IsEmpty(rg.Offset(1, 0)) Then R = rg.Row + 1 Else R = rg.End(xlDown).Row - 1: If R > Lr Then R = Lr
    If R - rg.Row > 3 Then
      R1 = Int((rg.Row + R) / 2): Cells(R1, 1) = rg:  Cells(R1, 9) = rg.Offset(0, 8)
      rg = Empty:  rg.Offset(0, 8) = Empty
    End If
    Set rg = Cells(R, 1)
  Loop
End Sub

Изменено: Ігор Гончаренко02.01.2019 15:13:49

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

 

flower

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

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

Юрий М

допустим 10 ячеек во 2-м столбце, тогда, ячейки в 1 и 9 столбцах лучше разместить в 5-й ячейке, т.е. выше будет 4 пустых, а ниже 5 ячеек.
если 24 ячейки, то в 12-й ячейке…

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

да, так намного лучше, но вот еще бы это работало сразу для всех блоков на листе…ВСЁ работает, прошу прощения!
и для нечетного количества ячеек в блоках ячейку первого столбца размещать на 1 ячейку выше высчитанной середины, в сообщении выше прописано)

Изменено: flower02.01.2019 15:25:03

Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.

 

flower

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

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

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

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

Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.

 

поправил в #12

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

 

flower

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

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

#16

02.01.2019 15:22:50

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

всё работает, круто! Спасибо большое за помощь!!!

Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.

Содержание

  1. Формат отображаемого значения
  2. Применение стилей к ячейкам листа
  3. VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк
  4. Вывод сообщений о числовых значениях цветов
  5. Выравнивание по горизонтали
  6. Основные свойства объекта Font
  7. Синтаксис и параметры
  8. Именные форматы даты и времени
  9. Именованные форматы чисел
  10. Символы для форматов даты и времени
  11. Заливка ячейки цветом в VBA Excel
  12. Создание новых стилей
  13. Выравнивание по вертикали
  14. Зачем нужны именованные стили
  15. Описание VBA-макроса для формата ячеек таблицы Excel
  16. Использование предопределенных констант
  17. Изменение существующих стилей

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

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

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

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

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

Применение стилей к ячейкам листа

В Excel изначально установлено множество встроенных стилей. Найти их можно в меню Стили ячеек, которая расположена на вкладке Главная -> Стили.

Откроется галерея стилей (рисунок справа).

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

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

В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:

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

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

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

Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:

SubSbrosFormat()
IfTypeName(Selection) <>"Range"Then Exit Sub
WithSelection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText =True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub

Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:

Таблица приобрела формат, который определен макросом. Таким образом код VBA нам позволяет сбросить любые изменения формата ячеек на предустановленный автором отчета.

Вывод сообщений о числовых значениях цветов

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

Пример кода 2:

Sub ColorTest2()

MsgBox Range(“A1”).Interior.Color

MsgBox Range(“A4:D8”).Interior.Color

MsgBox Range(“C12:D17”).Cells(4).Interior.Color

MsgBox Cells(3, 6).Interior.Color

End Sub

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

Выравнивание по горизонтали

Для выравнивания текста в ячейках рабочего листа по горизонтали в VBA Excel используется свойство HorizontalAlignment объекта Range. Оно может принимать следующие значения:

Выравнивание Константа Значение
По левому краю xlLeft -4131
По центру xlCenter -4108
По правому краю xlRight -4152

Константу использовать удобнее, так как ее можно выбрать из подсказок и легче запомнить. Но и присвоение свойству HorizontalAlignment непосредственно числового значения константы будет работать точно так же.

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Sub Primer1()

‘Заполняем ячейки текстом

Range(“A1”) = “Левая сторона”

Range(“B1”) = “Центр ячейки”

Range(“C1”) = “Правая сторона”

‘Применяем горизонтальное выравнивание

Range(“A1”).HorizontalAlignment = xlLeft

Range(“B1”).HorizontalAlignment = xlCenter

Range(“C1”).HorizontalAlignment = xlRight

‘Выводим значения констант

Range(“A2”) = “xlLeft = “ & xlLeft

Range(“B2”) = “xlCenter = “ & xlCenter

Range(“C2”) = “xlRight = “ & xlRight

End Sub

Основные свойства объекта 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 – это не единственное свойство, отвечающее за цвет отображаемого текста в ячейке. Оно также может принимать и другие значения, кроме указанных в таблице. Смотрите подробности в статье Цвет текста (шрифта) в ячейке.

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

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:

Sub FormatDateTime()

MsgBox “General Date: “ & Format(Now, “General Date”) & vbNewLine _

& vbNewLine & “Long Date: “ & Format(Now, “Long Date”) & vbNewLine _

& vbNewLine & “Medium Date: “ & Format(Now, “Medium Date”) & vbNewLine _

& vbNewLine & “Short Date: “ & Format(Now, “Short Date”) & vbNewLine _

& vbNewLine & “Long Time: “ & Format(Now, “Long Time”) & vbNewLine _

& vbNewLine & “Medium Time: “ & Format(Now, “Medium Time”) & vbNewLine _

& vbNewLine & “Short Time: “ & Format(Now, “Short Time”)

End Sub

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

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Sub FormatNumber()

Dim n As Double

n = 2641387.7381962

‘n = 0

MsgBox “Форматируемое число = “ & n & vbNewLine _

& vbNewLine & “General Number: “ & Format(n, “General Number”) & vbNewLine _

& vbNewLine & “Currency: “ & Format(n, “Currency”) & vbNewLine _

& vbNewLine & “Fixed: “ & Format(n, “Fixed”) & vbNewLine _

& vbNewLine & “Standard: “ & Format(n, “Standard”) & vbNewLine _

& vbNewLine & “Percent: “ & Format(n, “Percent”) & vbNewLine _

& vbNewLine & “Scientific: “ & Format(n, “Scientific”) & vbNewLine _

& vbNewLine & “Yes/No: “ & Format(n, “Yes/No”) & vbNewLine _

& vbNewLine & “True/False: “ & Format(n, “True/False”) & vbNewLine _

& vbNewLine & “On/Off: “ & Format(n, “On/Off”)

End Sub

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

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

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

Символ Описание
Точка (.) Разделитель компонентов даты (день, месяц, год). Используется при отображении месяца в виде числа.
Пробел Разделитель компонентов даты (день, месяц, год). Используется при отображении месяца прописью.
Двоеточие (:) Разделитель компонентов времени (часы, минуты, секунды).
d День в виде числа без нуля в начале (1–31).
dd День в виде числа с нулем в начале (01–31).
m Месяц в виде числа без нуля в начале (1–31). Если (m) следует после (h) или (hh), отображаются минуты.
mm Месяц в виде числа с нулем в начале (01–31). Если (mm) следует после (h) или (hh), отображаются минуты.
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:

Sub DataIsD()

MsgBox “d: “ & Format(Now, “d”) & vbNewLine _

& vbNewLine & “dd: “ & Format(Now, “dd”) & vbNewLine _

& vbNewLine & “ddd: “ & Format(Now, “ddd”) & vbNewLine _

& vbNewLine & “dddd: “ & Format(Now, “dddd”) & vbNewLine _

& vbNewLine & “ddddd: “ & Format(Now, “ddddd”) & vbNewLine _

& vbNewLine & “dddddd: “ & Format(Now, “dddddd”)

End Sub

Заливка ячейки цветом в VBA Excel

Пример кода 1:

Sub ColorTest1()

Range(“A1”).Interior.Color = 31569

Range(“A4:D8”).Interior.Color = 4569325

Range(“C12:D17”).Cells(4).Interior.Color = 568569

Cells(3, 6).Interior.Color = 12659

End Sub

Поместите пример кода в свой программный модуль и нажмите кнопку на панели инструментов «Run Sub» или на клавиатуре «F5», курсор должен быть внутри выполняемой программы. На активном листе Excel ячейки и диапазон, выбранные в коде, окрасятся в соответствующие цвета.

Есть один интересный нюанс: если присвоить свойству .Interior.Color отрицательное значение от -16777215 до -1, то цвет будет соответствовать значению, равному сумме максимального значения палитры (16777215) и присвоенного отрицательного значения. Например, заливка всех трех ячеек после выполнения следующего кода будет одинакова:

Sub ColorTest11()

Cells(1, 1).Interior.Color = 12207890

Cells(2, 1).Interior.Color = 16777215 + (12207890)

Cells(3, 1).Interior.Color = 4569325

End Sub

Проверено в Excel 2016.

Создание новых стилей

Если встроенных стилей Excel не достаточно, то можно создать собственные стили. Это достаточно просто сделать:

  1. Выберите любую ячейку и отформатируйте ее обычным способом так как вам нравится. Форматирование этой ячейки в дальнейшим мы сохраним как именованный стиль. Вы можете использовать любое доступное форматирование из диалогового окна Форматирование ячеек.
  2. Перейдите на вкладку Главная -> Стили ячеек и выберите команду Создать стиль ячейки. Откроется диалоговое окно Стиль.
  3. Выберите Имя стиля, которое будет в дальнейшем будете использовать.
  4. Выберите опции, которые будут применяться к выбранному стилю (по умолчанию отмечены все опции). Если нет необходимости в какой то опции, например вы не хотите изменять шрифт ячейки – то снимите выбор.
  5. Нажмите кнопку OK.

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

Выравнивание по вертикали

Для выравнивания текста в ячейках рабочего листа по вертикали в VBA Excel используется свойство VerticalAlignment объекта Range. Оно может принимать следующие значения:

Выравнивание Константа Значение
По верхнему краю xlTop -4160
По центру xlCenter -4108
По нижнему краю xlBottom -4107

Точно так же, как и по горизонтали, при выравнивании по вертикали свойству VerticalAlignment можно присваивать как значение из константы, так и непосредственно ее числовое значение.

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Sub Primer2()

‘Заполняем ячейки текстом

Range(“A3”) = “Верх”

Range(“B3”) = “Центр”

Range(“C3”) = “Низ”

‘Применяем вертикальное выравнивание

Range(“A3”).VerticalAlignment = xlTop

Range(“B3”).VerticalAlignment = xlCenter

Range(“C3”).VerticalAlignment = xlBottom

‘Выводим значения констант

Range(“A4”) = “xlTop = “ & xlTop

Range(“B4”) = “xlCenter = “ & xlCenter

Range(“C4”) = “xlBottom = “ & xlBottom

End Sub

Зачем нужны именованные стили

Идея именованных стилей заключается в следующем:

  1. Можно создать собственный набор стилей для форматирования, например, заголовков, итогов, обычного текста. А после применять готовые стили на другие ячейки не тратя время на воспроизведение точно такого же формата.
  2. Если изменить формат стиля, то все ячейки, к котором применен данный стиль будут автоматически отформатированы. Таким образом, можно быстро пересматривать любой формат и не тратить время на форматирование ячеек по отдельности.

Стили Excel позволяют отформатировать следующие атрибуты:

  • числовой формат (например, число, короткий формат даты, формат телефонного номера и т.п.);
  • выравнивание (по вертикали и горизонтали);
  • шрифт (название, размер, цвет и пр.);
  • граница (тип линии, цвет границы);
  • заливка (цвет фона, узор);
  • защита (защищаемая ячейка, скрытие формул).

Описание VBA-макроса для формата ячеек таблицы Excel

Первая инструкция в коде, проверяет выделены ли ячейки диапазоном. Если перед выполнением макроса выделил другой элемент листа, например, график, тогда макрос закрывается и дальнейшие инструкции выполняться не будут. В противные случаи будут форматироваться все выделенные ячейки по очереди в соответствии с определенными настройками форматирования:

  1. Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
  2. Включен построчный перенос текста.
  3. Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
  4. Сброс цвета шрифта на авто.
  5. Удаляется любая заливка ячеек.
  6. Ширина столбцов автоматически настраивается под текст в ячейках.
  7. Автоматически настроить высоту строк по содержимому ячеек.

Использование предопределенных констант

В VBA Excel есть предопределенные константы часто используемых цветов для заливки ячеек:

Предопределенная константа Наименование цвета
vbBlack Черный
vbBlue Голубой
vbCyan Бирюзовый
vbGreen Зеленый
vbMagenta Пурпурный
vbRed Красный
vbWhite Белый
vbYellow Желтый
xlNone Нет заливки

Присваивается цвет ячейке предопределенной константой в VBA Excel точно так же, как и числовым значением:

Пример кода 3:

Range(“A1”).Interior.Color = vbGreen

Изменение существующих стилей

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

  1. Перейти на вкладку Главная -> Стили ячеек.
  2. Щелкнуть правой кнопкой мыши по стилю, который хотите изменить и выбрать команду Изменить.
  3. Откроется диалоговое окно Стиль, в котором указано применяемое к ячейке форматирование.
  4. Нажмите на кнопку Формат, и в появившемся диалоговом окне Формат ячеек задайте необходимое форматирование. Например, чтобы изменить размер шрифта перейдите на вкладку Шрифт, задайте нужный размер и нажмите кнопку ОК.
  5. Нажмите еще раз кнопку ОК, чтобы закрыть окно Стиль и применить форматирование к изменяемому стилю.

Источники

  • https://vremya-ne-zhdet.ru/vba-excel/formatirovaniye-teksta-v-yacheyke/
  • https://micro-solution.ru/excel/formatting/formatting-styles
  • https://exceltable.com/vba-macros/makrosy-dlya-formatirovaniya-yacheek
  • https://vremya-ne-zhdet.ru/vba-excel/tsvet-yacheyki-zalivka-fon/
  • https://vremya-ne-zhdet.ru/vba-excel/vyravnivaniye-teksta-v-yacheyke/
  • https://vremya-ne-zhdet.ru/vba-excel/funktsiya-format/

Содержание

  1. Свойство Выравнивание
  2. Синтаксис
  3. Settings
  4. Замечания
  5. См. также
  6. Поддержка и обратная связь
  7. Макросы для изменения формата ячеек в таблице Excel
  8. VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк
  9. Описание VBA-макроса для формата ячеек таблицы Excel
  10. Модификация исходного кода макроса для форматирования
  11. VBS: выравнивание столбцов в Excel по центру
  12. Сообщения 5
  13. 1 Тема от komr 2011-03-18 14:55:32
  14. Тема: VBS: выравнивание столбцов в Excel по центру
  15. 2 Ответ от Xameleon 2011-03-18 15:15:48
  16. Re: VBS: выравнивание столбцов в Excel по центру
  17. 3 Ответ от komr 2011-03-18 15:31:44
  18. Re: VBS: выравнивание столбцов в Excel по центру
  19. 4 Ответ от Xameleon 2011-03-18 15:42:01 (изменено: Xameleon, 2011-03-18 15:44:51)
  20. Re: VBS: выравнивание столбцов в Excel по центру
  21. Vba выравнивание текста в ячейке
  22. Отмена выравнивания
  23. Выравнивание по горизонтали
  24. Выравнивание по вертикали
  25. Двойное выравнивание
  26. Синтаксис Syntax
  27. Примечания Remarks
  28. Пример Example
  29. Поддержка и обратная связь Support and feedback

Свойство Выравнивание

Определяет положение элемента управления относительно его заголовка.

Синтаксис

object. Выравнивание [= fmAlignment ]

Синтаксис свойства Alignment состоит из следующих частей:

Part Описание
object Обязательно. Допустимый объект.
fmAlignment Необязательный параметр. Положение заголовка.

Settings

Значениями fmAlignment являются:

Константа Значение Описание
fmAlignmentLeft 0 Размещает заголовок слева от элемента управления.
fmAlignmentRight 1 Размещает заголовок справа от элемента управления (по умолчанию).

Замечания

Текст для элемента управления выравнивается по левому краю.

Хотя свойство Выравнивание существует в ToggleButton, свойство отключено. Задать или возвратить значение этого свойства для ToggleButton нельзя.

См. также

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Макросы для изменения формата ячеек в таблице Excel

В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц Excel средствами VBA.

VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк

В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:

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

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

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

Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:

Sub SbrosFormat()
If TypeName(Selection) <> «Range» Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub

Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:

Таблица приобрела формат, который определен макросом. Таким образом код VBA нам позволяет сбросить любые изменения формата ячеек на предустановленный автором отчета.

Описание VBA-макроса для формата ячеек таблицы Excel

Первая инструкция в коде, проверяет выделены ли ячейки диапазоном. Если перед выполнением макроса выделил другой элемент листа, например, график, тогда макрос закрывается и дальнейшие инструкции выполняться не будут. В противные случаи будут форматироваться все выделенные ячейки по очереди в соответствии с определенными настройками форматирования:

  1. Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
  2. Включен построчный перенос текста.
  3. Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
  4. Сброс цвета шрифта на авто.
  5. Удаляется любая заливка ячеек.
  6. Ширина столбцов автоматически настраивается под текст в ячейках.
  7. Автоматически настроить высоту строк по содержимому ячеек.

Модификация исходного кода макроса для форматирования

Если необходимо сделать так чтобы текст выравнивался не по центру относительно горизонтали, а по правую сторону ячейки, тогда измените константу xlHAlignCenter на xlHAlignRight. Она находиться в свойстве .HorizontalAlignment. Сделайте это следующим образом:

Таким же образом можно выровнять текст по левую сторону изменив значение константы на xlHAlignLeft. Или можно выровнять положение текста по ширине ячейки используя константу xlHAlignJustify.

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

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

Если нужно применить для границ ячеек толстую и пунктирную линию в синем цвете, смодифицируйте инструкцию, отвечающую за формат линий:

Описание настройки форматирования для линий границ ячеек. Мы будем получать разные дополнительные типы линий границ если для свойства LineStyle присваивать такие константы:

  • xlDoshDot – применяется для рисования пунктирных линий в границах ячеек;
  • xlDouble – рисует двойную линию;
  • xlHairLine – рисует тонкую линию;
  • xlThick – для рисования очень толстой линии.

Для настройки цвета линий Excel предлагает всего 8 констант для определенных цветов. Константы для настройки цвета линий границ для свойства Color:

  • vbBlack – черный;
  • vbWhite – белый;
  • vbRed – красный;
  • vbGreen –зеленый;
  • vbBlue – синий;
  • vbYellow – желтый;
  • vbMagenta – алый;
  • vbCyan – голубой.

Но при необходимости присвоить линиям границ другие цвета можно вместо константы для свойства Color записать функцию RGB(). Достаточно лишь в аргументе этой функции указать код цвета по шкале от 0 и до 255.

Если нужно применить толстую линию только для границ выделенного диапазона, тогда перед инструкцией End With добавьте следующую строку кода:

.BorderAround xlContinuous, xlMedium, vbBlack

Описание: В первом аргументе для метода BorderAround можно записать также другой стиль линии. Во втором – толщину линии, а в третьем – цвет. Константы, которые можно присвоить в качестве значений для этих аргументов можно использовать те же, которые мы использовали для свойств: LineStyle, Weight, Color.

Если нужно экспонировать первую строку для выделенного диапазона с помощью жирного и курсивного шрифта значений ячеек. А также заполнить ячейки первой строки заливкой с голубым цветом, тогда в самом конце кода макроса перед последней инструкцией End Sub следует добавить несколько строк с VBA-кодом:

Если хотите присвоить такой же формат для не только для первой строки, но и для первого столбца выделенного диапазона, тогда скопируйте и вставьте ниже эти 3 строчки кода. После в последних трех строках измените свойство Rows на Columns.

.Columns (1).Font.Bold = True

.Columns (1).Font.Italic = True

.Columns (1).Interior.Color = vbCyan

Если нужно задать особенный формат для экспонирования последней строки выделенного диапазона, тогда измените число 1 в аргументе свойства Rows на число всех выделенных строк .Rows.Count. Например, добавьте в конец кода еще такую строку:

Полная версия модифицированного кода макроса выглядит так:

Sub SbrosFormat()
If TypeName(Selection) <> «Range» Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
.BorderAround xlContinuous, xlMedium, vbBlack
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
.Columns(1).Font.Bold = True
.Columns(1).Font.Italic = True
.Columns(1).Interior.Color = vbCyan
.Rows(.Rows.Count).Font.Bold = True
End With
End Sub

Пример работы измененного кода VBA-макроса:

В данном примере вы ознакомились с базовыми возможностями форматирования с помощью VBA-макросов. Уверен, что теперь вы сможете самостоятельно найти практическое применение этим исходным кодам.

Источник

VBS: выравнивание столбцов в Excel по центру

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 5

1 Тема от komr 2011-03-18 14:55:32

  • komr
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Тема: VBS: выравнивание столбцов в Excel по центру

как, собственно, сделать? Никакой документации найти не могу.

2 Ответ от Xameleon 2011-03-18 15:15:48

  • Xameleon
  • Разработчик
  • Неактивен
  • Рейтинг : [ 41 | 0 ]

    Re: VBS: выравнивание столбцов в Excel по центру

    Самый удобный способ на мой взгляд — записать макрос и посмотреть код. Вот что генерит сам Excel. Это при горизонтальном и при вертикальном выравнивании, если я конечно правильно понял о чём речь.

    3 Ответ от komr 2011-03-18 15:31:44

    • komr
    • Участник
    • Неактивен
    • Рейтинг : [ 0 | 0 ]

    Re: VBS: выравнивание столбцов в Excel по центру

    речь не про VBA

    вот текс тестового скрипта
    задача: столбец А отцентровать по центру

    Set objExcel = CreateObject(«Excel.Application»)
    objExcel.Visible = True
    objExcel.Workbooks.Add
    objExcel.Cells(1, 1).Value = «Name»
    objExcel.Cells(1, 1).Font.Bold = TRUE
    objExcel.Cells(1, 1).Interior.ColorIndex = 30
    objExcel.Cells(1, 1).Font.ColorIndex = 2
    objExcel.Cells(2, 1).Value = «Test value 1»
    objExcel.Cells(3, 1).Value = «Test value 2»
    objExcel.Cells(4, 1).Value = «Tets value 3»
    objExcel.Cells(5, 1).Value = «Test value 4»

    4 Ответ от Xameleon 2011-03-18 15:42:01 (изменено: Xameleon, 2011-03-18 15:44:51)

    • Xameleon
    • Разработчик
    • Неактивен
    • Рейтинг : [ 41 | 0 ]

      Re: VBS: выравнивание столбцов в Excel по центру

      Да я понял, что не про VBA. ) В заголовке указано. Но я же не телепат, чтобы знать как у Вас в скрипте называется объект олицетворяющий WorkBook и активный лист ActiveSheet. Поэтому оставил их без изменения, чтобы Вы в коде могли подцепить выравнивание. Если базироваться на вашем коде, то как то так.

      Источник

      Vba выравнивание текста в ячейке

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

      Выделите ячейки с текстом, который вы хотите выровнять.

      На вкладке Главная выберите один из указанных ниже вариантов выравнивания.

      Чтобы выровнять текст по вертикали, выберите Выровнять по верхнему краю , Выровнять по середине или Выровнять по нижнему краю .

      Чтобы выровнять текст по горизонтали, выберите Выровнять по левому краю , Выровнять по центру или Выровнять по правому краю .

      Если строка с текстом слишком длинная, его часть может быть не видна. Чтобы исправить это, не меняя ширину столбца, нажмите Перенести текст.

      Чтобы выровнять по центру текст, занимающий несколько строк или столбцов, нажмите кнопку Объединить и выровнять по центру.

      Отмена выравнивания

      Чтобы отменить выравнивание сразу после его применения, нажмите кнопку Отменить.

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

      Примечание: В Excel в Интернете вы не можете повернуть угол текста в ячейке.

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

      Примечание: Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также приводим ссылку на оригинал (на английском языке).

      Выравнивание текста и других значений в ячейке по горизонтали и вертикали из кода VBA Excel. Свойства HorizontalAlignment и VerticalAlignment. Примеры.

      Выравнивание по горизонтали

      Для выравнивания текста в ячейках рабочего листа по горизонтали в VBA Excel используется свойство HorizontalAlignment объекта Range. Оно может принимать следующие значения:

      Выравнивание Константа Значение
      По левому краю xlLeft -4131
      По центру xlCenter -4108
      По правому краю xlRight -4152

      Константу использовать удобнее, так как ее можно выбрать из подсказок и легче запомнить. Но и присвоение свойству HorizontalAlignment непосредственно числового значения константы будет работать точно так же.

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

      Выравнивание по вертикали

      Для выравнивания текста в ячейках рабочего листа по вертикали в VBA Excel используется свойство VerticalAlignment объекта Range. Оно может принимать следующие значения:

      Выравнивание Константа Значение
      По верхнему краю xlTop -4160
      По центру xlCenter -4108
      По нижнему краю xlBottom -4107

      Точно так же, как и по горизонтали, при выравнивании по вертикали свойству VerticalAlignment можно присваивать как значение из константы, так и непосредственно ее числовое значение.

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

      Двойное выравнивание

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

      Пример 3
      Записываем в ячейки диапазона «A1:C4» текст «Всё по центру», применяем горизонтальное и вертикальное выравнивание по центру для всего диапазона.

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

      Свойство TextAlign Указывает выравнивание текста в новых элементах управления. The TextAlign property specifies the text alignment in new controls. Байтдля чтения и записи. Read/write Byte.

      Синтаксис Syntax

      Expression. TextAlign expression.TextAlign

      Expression (выражение ) Переменная, представляющая объект метки . expression A variable that represents a Label object.

      Свойство TextAlign использует указанные ниже параметры. The TextAlign property uses the following settings.

      Setting Setting Visual Basic Visual Basic Описание Description
      Общие General нуль 0 Умолчани Текст выравнивается по левому краю; числа и даты выравниваются по правому краю. (Default) The text aligns to the left; numbers and dates align to the right.
      Left Left 1,1 1 Текст, числа и даты выравниваются по левому краю. The text, numbers, and dates align to the left.
      Center Center 2 2 Текст, числа и даты выравниваются по центру. The text, numbers, and dates are centered.
      Right Right 4 3 Текст, числа и даты выравниваются по правому краю. The text, numbers, and dates align to the right.
      Distribute Distribute SP4 4 Текст, числа и даты равномерно распределены. The text, numbers, and dates are evenly distributed.

      Вы можете задать значение по умолчанию для свойства TextAlign с помощью стиля элемента управления по умолчанию или свойства DefaultControl в Visual Basic. You can set the default for the TextAlign property by using a control’s default control style or the DefaultControl property in Visual Basic.

      Пример Example

      В следующем примере текст в текстовом поле адрес в форме поставщики выравнивается по правому краю. The following example aligns the text in the Address text box on the Suppliers form to the right.

      Поддержка и обратная связь Support and feedback

      Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

      Источник

Понравилась статья? Поделить с друзьями:
  • Vba excel выравнивание по центру
  • Vba excel выполнение в фоне
  • Vba excel выпадающий список значения
  • Vba excel выпадающий список в ячейке с поиском
  • Vba excel выпадающий календарь