Как извлечь только текст из ячеек, отформатированных определенным образом. (превосходить)

Привет я интересно, если я могу получить некоторую помощь. Я импортирую html-файл, который помещает текст в первый столбец электронной таблицы. Текст будет отображаться в различных формах, например, он может быть цвета или курсивом, полужирным шрифтом или комбинацией.

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

Заранее большое спасибо.

Скриншот показывает, чего я хотел бы достичь

скриншот

1 ответ

  1. вы можете начать с этого кода

    Option Explicit
    
    Sub Main()
        Dim cell As Range
        Dim word As Variant, colOff As Variant
        Dim colOffStrng As String
    
        With Worksheets("MySheet") '<~~ change "MySheet" with whatever name your sheet has
            For Each cell In .Range("A4:A" & .Cells(.Rows.count, 1).End(xlUp).Row).SpecialCells(xlCellTypeConstants, xlTextValues) '<~~consider cells in column A from row 4 to the last non empty cell containing text values only
                For Each word In Split(WorksheetFunction.Trim(cell)) '<~~ check each word in the cell. a space is assumed as words separator, multiple spaces considered as one space
                    colOffStrng = "" '<~~ initialize the offsets string
                    With cell.Characters(InStr(cell, word), Len(word)).Font '<~~ consider the Font property of the word first character
                        If .Bold Then colOffStrng = colOffStrng & "1 " '<~~ Bold is 1 column offset from column A
                        If .Italic Then colOffStrng = colOffStrng & "2 " '<~~ Italic is 2 columns offset from column A
                        Select Case .ColorIndex '<~~ consider the ColorIndex property of the word first character
                          Case 3 'red
                              colOffStrng = colOffStrng & "3 " '<~~ red is 3 columns offset from column A
                          Case 5 'blue
                              colOffStrng = colOffStrng & "4 " '<~~ blue is 4 columns offset from column A
                        End Select
                    End With
                    For Each colOff In Split(Trim(colOffStrng)) '<~~ loop through each column offset stored
                        cell.Offset(, colOff) = word '<~~ fill proper cell with the word
                    Next colOff
                Next word
            Next cell
        End With
    End Sub
    

    где я предполагал следующее:

    • все символы каждого слова имеют одинаковое форматирование

    • столбцы стиля форматирования:

      • колонка B для жирных слов

      • столбец C для Курсивных слов

      • столбец D для красных слов (ColorIndex = 3)

      • столбец E для синих слов (ColorIndex = 5)

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

        =IF(C4=D4,C4,"") в ячейке H4, куда поместить сочетание «курсив » и» красный » форматирование

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