Vba excel подчеркивание текста

Форматирование текста в ячейке при помощи кода 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


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

Добрый день всем!
Прошу помощи у знающих
Есть лист в excel, где собирается большой массив данных с помощью формул
Некоторые данные имеют в составе символ переноса строки, т.е. получены объединением двух ячеек, например A11&СИМВОЛ(10)&B11.
Нужно сделать подчеркивание текста до символа переноса строки на всём листе, во всех ячейках где встречается этот символ.

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

Спасибо большое всем кто откликнется

Миниатюры

Подчеркивание в ячейке до определенного символа
 



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,
Попробуйте:

Visual Basic
1
2
3
4
5
6
7
8
Sub MMM()
    For Each cell In Range(Cells(4, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 35))
        If InStr(cell.Value, Chr(10)) > 0 Then
           L = Len(Split(cell.Value, Chr(10))(0))
            cell.Characters(Start:=1, Length:=L).Font.Underline = xlUnderlineStyleSingle
        End If
    Next
End Sub



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



АЕ

ᴁ®

Эксперт MS Access

3069 / 1735 / 361

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

Сообщений: 5,937

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

27.11.2021, 18:43

9

Лучший ответ Сообщение было отмечено mswan как решение

Решение

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub MMM()
    For Each cell In Range(Cells(4, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 35))
        If InStr(cell.Value, Chr(10)) > 0 Then
           L = Len(Split(cell.Value, Chr(10))(0))
           cell.Value = cell.Value
            cell.Characters(Start:=1, Length:=L).Font.Underline = xlUnderlineStyleSingle
            cell.Characters(Start:=L + 1, Length:=Len(cell.Value) - L).Font.Underline = xlUnderlineStyleNone
        End If
    Next
End Sub



1



Форматирование части текста в ячейке

Leojse

Дата: Суббота, 06.06.2020, 19:20 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 148


Репутация:

1

±

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


2010/2013

Здравствуйте, уважаемые форумчане!
Снова прошу у Вас помощи.
Есть текст в ячейке, часть которого хотелось бы отформатировать.
Необходимо придать полужирный шрифт и подчеркивание, начиная со слов «Наши услуги» и до конца текста. Эта часть по числу символов всегда постоянна.
Записал макрорекордером, но не знаю, как мне вычислить «Start», так как количество символов в ячейках всегда разное.
Приложил файл с записанным кодом.
Заранее огромное спасибо за любую помощь!

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

0484925.xls
(35.0 Kb)

 

Ответить

Pelena

Дата: Суббота, 06.06.2020, 19:31 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.

как мне вычислить «Start»

[vba]

Код

Start:=InStr(ActiveCell.Value, «Наши услуги»)

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

krosav4ig

Дата: Суббота, 06.06.2020, 19:38 |
Сообщение № 3

Группа: Друзья

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

Сообщений: 2346


Репутация:

989

±

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


Excel 2007,2010,2013

Добрый вечер
макрос для выделенного диапазона
[vba]

Код

Sub x()
    Dim c As Range
    With Selection.Font
        .Bold = 0
        .Underline = xlNone
        For Each c In .Parent
            Dim pos%: pos = InStr(c.Value, «Наши услуги»)
            If pos > 0 Then
                With c.Characters(pos, Len(c.value)).Font
                    .Bold = 1
                    .Underline = xlUnderlineStyleSingle
                End With
            End If
        Next
    End With
End Sub

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4igСуббота, 06.06.2020, 19:43

 

Ответить

Leojse

Дата: Суббота, 06.06.2020, 19:44 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 148


Репутация:

1

±

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


2010/2013

Pelena, krosav4ig, Большое Вам спасибо за ответы!

 

Ответить

Я просто хочу спросить, возможно ли, чтобы конкретный текст имел подчеркивание? Как вы можете видеть в приведенных ниже кодах, я хочу, чтобы 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

Like this post? Please share to your friends:
  • Vba excel подсчет уникальных значений
  • Vba excel подсчет символов в строке
  • Vba excel подсчет количества строк
  • Vba excel подсчет количества значений
  • Vba excel подставить значение в ячейку