В Excel нужно искать конкретную строку в ячейке и применять стиль к этой конкретной строке - PullRequest
2 голосов
/ 15 марта 2012

В Excel я должен искать определенное слово в ячейке и заменять только это слово.

Например: В Excel ячейка может содержать

"команда должназагрузил тестовые данные в файл "

. Я хочу выделить только одно слово в этой строке, например, test, и применить стиль к этой конкретной строке

" teamдолжен был загрузить test data в файл "

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

Ответы [ 2 ]

3 голосов
/ 15 марта 2012

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

Тест нечувствителен к регистру

Option Explicit

Const strText As String = "test"

Sub ColSearch_DelRows()
Dim rng1 As Range
Dim rng2 As Range
Dim cel1 As Range
Dim cel2 As Range
Dim strFirstAddress As String
Dim lAppCalc As Long
Dim objRegex As Object
Dim RegMC As Object
Dim RegM As Object

Set objRegex = CreateObject("vbscript.regexp")

With objRegex
    .Global = True
    .Pattern = strText
End With

'Get working range from user
On Error Resume Next
Set rng1 = Application.InputBox("Please select range to search for " & strText, "User range selection", Selection.Address(0, 0), , , , , 8)
On Error GoTo 0
If rng1 Is Nothing Then Exit Sub

With Application
    lAppCalc = .Calculation
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

Set cel1 = rng1.Find(strText, , xlValues, xlPart, xlByRows, , False)
If Not cel1 Is Nothing Then
    Set rng2 = cel1
    strFirstAddress = cel1.Address
    Do
        Set cel1 = rng1.FindNext(cel1)
        Set rng2 = Union(rng2, cel1)
    Loop While strFirstAddress <> cel1.Address
End If

If Not rng2 Is Nothing Then
    For Each cel2 In rng2
        Set RegMC = objRegex.Execute(cel2.Value)
        For Each RegM In RegMC
            cel2.Characters(RegM.firstindex, RegM.Length + 1).Font.Bold = True
        Next
    Next
End If

With Application
    .ScreenUpdating = True
    .Calculation = lAppCalc
End With

End Sub
2 голосов
/ 15 марта 2012

Вот фрагмент, показывающий, как отформатировать фрагмент текста в ячейке:

Sub EditFont()
'To format font color for 12 digits to 4 black, 5 red, 3 black:

' Here is some sample text to try it on: 123456789012

'First, format digits to be treated as characters
ActiveCell.Value = "'" & ActiveCell.Value
'Format all characters for black
With ActiveCell
    .Font.ColorIndex = 3
    'Format characters 5 thru 12 as red
    .Characters(1, ActiveCell.Characters.Count - 8).Font.ColorIndex = 1
    'Reformat characters 10 thru 12 back to black
    .Characters(10, ActiveCell.Characters.Count - 3).Font.ColorIndex = 1
End With
End Sub

Вам нужно будет только добавить цикл над необходимыми ячейками.

[ Источник ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...