Форматирование текста в ячейке при помощи кода VBA Excel. Объект Font и его основные свойства. Примеры изменения начертания строк в заданном диапазоне.
В этой статье рассмотрены свойства шрифта (объекта Font), определяющие внешнее оформление (начертание) видимого значения ячейки. Это касается не только текста (строк), но и визуального начертания отображаемых дат и числовых значений.
Формат отображаемого значения
Когда мы из кода VBA Excel записываем в ячейку текстовое или другое значение, оно отображается в формате, присвоенном данной ячейке. Это может быть формат:
- рабочего листа по умолчанию;
- установленный для диапазона пользователем;
- примененный к диапазону из кода VBA Excel.
Если ячейка содержит текстовое значение, его начертание можно форматировать по отдельным частям (подстрокам). Такое форматирование доступно как в ручном режиме на рабочем листе, так и из кода VBA Excel.
У объекта Range есть свойство 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» присвоим шрифты разных наименований:
Sub Primer1() Range(«A1»).Font.Name = «Courier» Range(«A1») = «Шрифт «Courier»» Range(«A2»).Font.Name = «Verdana» Range(«A2») = «Шрифт «Verdana»» Range(«A3»).Font.Name = «Times New Roman» Range(«A3») = «Шрифт «Times New Roman»» End Sub |
Пример 2
В этом примере рассмотрим применение одного свойства объекта Font к одной ячейке:
Sub Primer2() Range(«A5»).Font.Bold = True Range(«A5») = «Полужирное начертание» Range(«A6»).Font.FontStyle = «полужирный курсив» Range(«A6») = «Полужирный курсив» Range(«A7»).Font.Superscript = True Range(«A7») = «Надстрочное начертание» End Sub |
Пример 3
Форматирование диапазона из нескольких ячеек:
Sub Primer3() With Range(«A9:C11») .Value = «Форматируем диапазон» .Font.Underline = True .Font.Color = 75962 End With End Sub |
Пример 4
Пример форматирования шрифта в разных ячейках по одному свойству:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub Primer4() Cells(1, 1) = «Свойство шрифта Bold = True» Cells(1, 1).Font.Bold = True Cells(2, 1) = «Свойство шрифта Color = xlGreen» Cells(2, 1).Font.Color = xlGreen Cells(3, 1) = «Свойство шрифта ColorIndex = 32» Cells(3, 1).Font.ColorIndex = 32 Cells(4, 1) = «Свойство шрифта FontStyle = ««Bold Italic»«» Cells(4, 1).Font.FontStyle = «Bold Italic» Cells(5, 1) = «Свойство шрифта Italic = True» Cells(5, 1).Font.Italic = True Cells(6, 1) = «Свойство шрифта Name = ««Courier New»«» Cells(6, 1).Font.Name = «Courier New» Cells(7, 1) = «Свойство шрифта Size = 14» Cells(7, 1).Font.Size = 14 Cells(8, 1) = «Свойство шрифта Subscript = True» Cells(8, 1).Font.Subscript = True Cells(9, 1) = «Свойство шрифта Superscript = True» Cells(9, 1).Font.Superscript = True Cells(10, 1) = «Свойство шрифта Underline = True» Cells(10, 1).Font.Underline = True End Sub |
0 / 0 / 0 Регистрация: 27.11.2021 Сообщений: 5 |
|
1 |
|
Excel Подчеркивание в ячейке до определенного символа27.11.2021, 12:45. Показов 2161. Ответов 8
Добрый день всем! Пример того что я получаю на листе во вложенном рисунке. Красным показано, что должно быть подчеркнуто. Спасибо большое всем кто откликнется Миниатюры
0 |
344 / 206 / 78 Регистрация: 16.07.2020 Сообщений: 589 |
|
27.11.2021, 13:08 |
2 |
Для начала почитайте правила форума и вместо картинки приложите эксель файл.
0 |
0 / 0 / 0 Регистрация: 27.11.2021 Сообщений: 5 |
|
27.11.2021, 13:17 [ТС] |
3 |
прикладываю excel. вкладка установочные
0 |
0 / 0 / 0 Регистрация: 27.11.2021 Сообщений: 5 |
|
27.11.2021, 13:23 [ТС] |
4 |
прикладываю excel. вкладка установочные
0 |
Narimanych 2630 / 1636 / 744 Регистрация: 23.03.2015 Сообщений: 5,141 |
||||
27.11.2021, 16:32 |
5 |
|||
mswan,
1 |
0 / 0 / 0 Регистрация: 27.11.2021 Сообщений: 5 |
|
27.11.2021, 17:31 [ТС] |
6 |
Narimanych, спасибо. Можно сделать, чтобы подчеркивалась только верхняя строчка в ячейке? Это типа как дробь, требование по оформлению таблиц. т.е. например для ячейки I4: Ф6-Ам Ф5-Ам и в примере я сделал 5 строк, на самом деле их может быть и 1000.
0 |
2630 / 1636 / 744 Регистрация: 23.03.2015 Сообщений: 5,141 |
|
27.11.2021, 17:52 |
7 |
mswan,
1 |
0 / 0 / 0 Регистрация: 27.11.2021 Сообщений: 5 |
|
27.11.2021, 17:57 [ТС] |
8 |
Narimanych, да Миниатюры
0 |
АЕ ᴁ® 3069 / 1735 / 361 Регистрация: 13.12.2016 Сообщений: 5,937 Записей в блоге: 4 |
||||
27.11.2021, 18:43 |
9 |
|||
Сообщение было отмечено mswan как решение РешениеNarimanych, да действительно и у меня тоже подчеркивает решительно все, хотя код говорит об обратном.
1 |
Форматирование части текста в ячейке |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Я просто хочу спросить, возможно ли, чтобы конкретный текст имел подчеркивание? Как вы можете видеть в приведенных ниже кодах, я хочу, чтобы fname
, stud
и grd
были подчеркнуты, когда они отображаются на листе Sheet2
. Коды расположены в Worksheet_Activate
из Sheet2
.
Set ws = ActiveWorkbook.Worksheets("Sheet1")
Lastrow = ws.Cells(Rows.Count, "C").End(xlUp).Row
For r = 9 To Lastrow
If ws.Cells(r, 3) = CStr(ThisWorkbook.Sheets("Sheet3").Range("K11").value) And ws.Cells(r, 12).value = 1 Then
fname = ws.Cells(r, 4).value
stud = ws.Cells(r, 3).value
grd = ws.Cells(r, 5).value + 1
Text1 = "My name is "
Text2 = " , my student ID is "
Text3 = " and I'm grade "
End If
Next r
With ThisWorkbook.Sheets("Sheet2")
.Range("C72").value = Text1 & fname & Text2 & LRN & Text3 & grd & Text4
End With
Я пробовал использовать .Characters(17, 13).Font.Underline = True
, но не думаю, что могу использовать 17,13
или любое другое число, поскольку значения fname
, stud
и grd
имеет другой размер длины.
2 ответа
Лучший ответ
@Stax указал вам правильное направление, и похоже, что вы вот-вот нашли решение. Я бы также добавил сохранение длины строк fname
, stud
и grd
в коротких именах переменных, чтобы минимизировать ваш код.
Соответствующий фрагмент будет (я позволю вам разобраться, как сделать свой цикл и т. Д.)
a = Len(fname)
b = Len(stud)
c = Len(grd)
With Sheet2.Range("C72")
.Value = Text1 & fname & Text2 & stud & Text3 & grd
.Characters(Start:=12, Length:=a).Font.Underline = True
.Characters(Start:=36 + a, Length:=b).Font.Underline = True
.Characters(Start:=51 + a + b, Length:=c).Font.Underline = True
End With
1
kevin9999
5 Фев 2021 в 05:30
Я добавил способ подчеркивания необходимых частей вашего текста. Сначала он объединяет ваш текст, а затем применяет его только к нужным словам. Вам придется исправить свой алгоритм (что делать, строка за строкой, «C72» и т. Д.) …
Sub WordToUnderlined(ByRef pRange As Range, ByVal pWord As String, _
ByRef pPos As Integer)
Dim pos As Integer
pos = InStr(pPos, pRange.Value, pWord, vbTextCompare)
If pos > 0 Then
With pRange.Characters(pos, Len(pWord))
.Font.Underline = True
End With
WordToUnderlined pRange, pWord, pos + 1
End If
End Sub
Sub TestMe()
Set ws = ActiveWorkbook.Worksheets("Sheet1")
LastRow = ws.Cells(Rows.Count, "C").End(xlUp).Row
For R = 9 To LastRow
If ws.Cells(R, 3) = CStr(ThisWorkbook.Sheets("Sheet3").Range("K11").Value) And ws.Cells(R, 12).Value = 1 Then
fname = ws.Cells(R, 4).Value
stud = ws.Cells(R, 3).Value
grd = ws.Cells(R, 5).Value + 1
Text1 = "My name is "
Text2 = " , my student ID is "
Text3 = " and I'm grade "
End If
With ThisWorkbook.Sheets("Sheet2")
.Range("C72").Value = Text1 & fname & Text2 & stud & Text3 & grd & Text4
WordToUnderlined .Range("C72"), fname, 1
WordToUnderlined .Range("C72"), stud, 1
WordToUnderlined .Range("C72"), grd, 1
End With
Next R
End Sub
0
DerinNehir
5 Фев 2021 в 04:30