Форматирование извлечения данных с добавленным разделителем с помощью Excel VBA

В настоящее время у меня есть макрос excel, который при запуске перемещается по ячейке за ячейкой в ​​столбце, извлекая только выделенные жирным шрифтом слова из строки длиной в абзац. Он помещает все выделенные жирным шрифтом слова, найденные в строке, в соседнюю ячейку. Например... ячейка A1 представляет собой абзац текста с некоторыми словами, выделенными жирным шрифтом, при запуске макроса все выделенные жирным шрифтом слова, найденные в ячейке A1, затем помещаются в ячейку B1. Это прекрасно работает, за исключением того, что все слова, выделенные жирным шрифтом, помещаются в одну длинную строку без пробелов между каждым словом, выделенным жирным шрифтом. Мне нужна помощь в создании разделителя, который будет помещен между всеми выделенными жирным шрифтом словами, найденными в строке. Спасибо!

Sub GetBoldedInfo()
    Dim txt As String
    boldedRow = Cells(Rows.Count, "A").End(xlUp).Row

    For Each c In Range(ActiveCell, ActiveCell.End(xlDown))
        myboldtext = ""
    For i = 1 To Len(c.Value)
        If c.Characters(Start:=i, Length:=1).Font.FontStyle = "Bold" Then
            txt = Mid(c.Value, i, 1)
    'text in bold
            myboldtext = myboldtext & txt
        End If
    Next
    c.Offset(0, 1) = myboldtext
    Next
End Sub

Вывод B1:

 China – ABC:NIKEAccount # 1234567890RetailFreight - Ocean1 potential annual shipmentsannual revenue of US $1

Идеальный результат B1:

  China – ABC:;NIKE;Account # 1234567890;Retail;Freight - Ocean;1 potential annual shipment;annual revenue of US $1

Действительно идеальный вывод: разделен ячейкой в ​​соседних столбцах.

  B1 = China – ABC: C1 = NIKE D1 = Account  # 1234567890 etc.

person Davey    schedule 31.05.2016    source источник


Ответы (1)


Попробуйте что-нибудь вроде этого.

Заменять

    If c.Characters(Start:=i, Length:=1).Font.FontStyle = "Bold" Then
        txt = Mid(c.Value, i, 1)
'text in bold
        myboldtext = myboldtext & txt
    End If

С

If c.Characters(Start:=i, Length:=1).Font.FontStyle = "Bold" Then
        If c.Characters(Start:=i + 1, Length:=1).Font.FontStyle <> "Bold" Then
'text in bold with delimiter
            txt = Mid(c.Value, i, 1) 
            myboldtext = myboldtext & txt & ";"
        else 
'text in bold
            txt = Mid(c.Value, i, 1)
            myboldtext = myboldtext & txt
        End If
    End If

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

  • код не тестировался. предоставляется для демонстрации идеи.
person B540Glenn    schedule 31.05.2016