EXCEL VBA: форматировать текст после точки в каждой ячейке

У меня есть тысячи ячеек со ссылкой (от 1 до 4 символов) после последней точки (.) Предложения внутри ячейки. ссылочные символы 1–4 расположены не в определенном порядке.

Например в ячейке у меня есть:

| Это текст. L |

or

| Это другой текст. IL |

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

я пытался

Sub BoldCellsLastWord()
lc = Right(ActiveCell, 1)
  With Selection.Font
        .Color = -16776961
        .TintAndShade = 0
       Selection.Font.Superscript = True
       Selection.Font.Bold = True
  End With
End Sub

но все предложение форматируется

Что я делаю не так?

заранее спасибо за вашу помощь


person Thierry S.    schedule 16.02.2021    source источник
comment
Вам нужно найти положение точки, а затем использовать свойство Characters.   -  person SJR    schedule 16.02.2021


Ответы (2)


работает для ручного запуска

Sub test2()
    Dim n As Integer, i As Integer, counter As Integer
    Dim text As String
    Dim ws As Worksheet
    
    Set ws = ActiveSheet
    n = ws.Cells(Selection.Row, Selection.Column).Characters.Count
    text = Selection.Value
    
    For i = 1 To n
        If Mid(text, i, 1) = "." Then
            ws.Cells(Selection.Row, Selection.Column).Characters(i, n - i + 1).Font.Superscript = True  ' with dot
            'ws.Cells(Selection.Row, Selection.Column).Characters(i+1, n - i + 1).Font.Superscript = True  ' without dot
        End If
    Next i
End Sub

если вы хотите запускать код автоматически, вы должны создать событие worksheet.selectionchange и вставить

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = n Then ' column index where you want do superscript
        test2 ' or place here code
    End If
End Sub

он будет работать для любого выбранного диапазона в желаемом столбце. Не следует выполнять цикл через весь лист макросом, запущенным в событии selectionchange. Вы можете сделать какую-то форму с помощью кнопки запуска

person Tomasz    schedule 16.02.2021
comment
Вы можете использовать Instr, чтобы избежать цикла. - person SJR; 16.02.2021
comment
спасибо за ваш вклад в мой вопрос @Tomasz Я пойду с EEC VBA - person Thierry S.; 16.02.2021

Предлагаемое решение:

  • Работает с диапазоном Selection (при необходимости измените)
  • Проверяет, содержит ли Cell Formula
  • Проверяет, есть ли у Cell Contents
  • Проверяет, содержит ли Cell ., используя InStrRev, чтобы убедиться, что он использует последний .
  • Форматирует содержимое по мере необходимости

Sub Format_Text_In_Cells()
Dim Rng As Range, Cll As Range
Dim bLen As Byte, bPos As Byte

    Set Rng = Selection
    For Each Cll In Rng.Cells
        With Cll
            
            If Not (.HasFormula) Then           'Validates if cells contains a formula
            
                bLen = Len(.Value)                  'Get length of cell contents
                bPos = InStrRev(.Value, ".")        'Get position of last "."
                If bPos > 0 And bPos < bLen Then
                
                    'With .Characters(Start:=1 + bPos, Length:=bLen).Font   'Use this line to exclude the `.`
                    With .Characters(Start:=bPos, Length:=bLen).Font        'Use this line to include the `.`
                    
                        Rem Format Cell Contents
                        .FontStyle = "Bold"
                        .Superscript = True
                        .Color = XlRgbColor.rgbRed
    
    End With: End If: End If: End With: Next

    End Sub

Ячейки [A5] и [A8] содержат формулы.

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

person EEM    schedule 16.02.2021
comment
спасибо @EEM, это работает как шарм. Ты звезда !! - person Thierry S.; 16.02.2021