2016-03-09 2 views
0

Я хотел бы разделить текст в одной ячейке на 2 ячейки на основе форматирования содержимого в ячейке. На изображении ниже: я хотел бы отделить текст синим от адреса электронной почты. Может ли кто-нибудь предложить формулу excel или обходной путь для этого?Отдельный текст в ячейке excel на основе форматирования

enter image description here

ответ

1

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

Используйте MsgBox ActiveCell.Characters(Start:=1, Length:=1).Font.Color, чтобы получить код для первого символа в ActiveCell.

Как он работает, он проверяет каждый символ в строке 1 за раз. Если символ красного цвета, он добавляет цифру в переменную c. В конце я оставляю c количество символов.

Sub test1() 

Dim i As Integer 
Dim c As Integer 
Dim l As Integer 


While ActiveCell.Value <> "" 

i = 1 
c = 0 
l = Len(ActiveCell.Value) 

While i <= l 

If ActiveCell.Characters(Start:=1, Length:=i).Font.Color = 255 Then 
c = c + 1 
i = i + 1 

Else 

i = i + 1 

End If 

Wend 

ActiveCell.Offset(0, 1).Value = Left(ActiveCell.Value, c) 
ActiveCell.Offset(0, 2).Value = Right(ActiveCell.Value, l - c) 

ActiveCell.Offset(1, 0).Select 

Wend 

End Sub 

Результаты в следующем:

enter image description here

+0

Спасибо, что работал как шарм! – BountyHunter

0

Можно ли отделить синий текст от другого с образцом, как точка с запятой? Потому что тогда вы можете разделить строку, которая включает значение ячейки: StrArray = Split(CellXY.Value, ";") strArray - это строковый массив, который получает два элемента: «Arnald, Biarb» и «[email protected]». Тогда вам просто нужно сказать, какая ячейка должна получить какое значение. Как образец: CellXY.Value = strArray(0)

1
  1. Нажмите Alt + F11, чтобы открыть Microsoft Visual Basic для приложений окна

  2. Past следующий код:

    Function GetBoldString(workCell As Range) 
    strLen = Len(workCell) 
    GetBoldString = "" 
    For i = 1 To strLen 
        If workCell.Characters(i, 1).Font.Bold Then 
         GetBoldString = GetBoldString & workCell.Characters(i, 1).Text 
        End If 
    Next i 
    End Function 
    
    Function GetNoBoldString(workCell As Range) 
    strLen = Len(workCell) 
    GetNoBoldString = "" 
    For i = 1 To strLen 
        If workCell.Characters(i, 1).Font.Bold = False Then 
         GetNoBoldString = GetNoBoldString & workCell.Characters(i, 1).Text 
    End If 
    Next i 
    End Function 
    
  3. Вернуться в таблицу.
    В клетке, где вы хотите смелую часть пасты:

    = GetBoldString (A1)

  4. В клетке, где вы не хотите, не жирная часть пасты:

    = GetNoBoldString (A1)

Замените A1 ссылкой на ячейку, которую хотите разбить.

Работая над свойствами workCell.Characters (i, 1), вы можете разделить другие атрибуты формата, такие как цвет.

Вот две функции VBA, чтобы отделить строку от любого цвета, отличного от черного, от черной части.

Function GetColorString(workCell As Range) 
strLen = Len(workCell) 
GetColorString = "" 
For i = 1 To strLen 
    If workCell.Characters(i, 1).Font.Color <> vbBlack Then 
     GetColorString = GetColorString & workCell.Characters(i, 1).Text 
    End If 
Next i 
End Function 

Function GetBlackString(workCell As Range) 
strLen = Len(workCell) 
GetBlackString = "" 
For i = 1 To strLen 
    If workCell.Characters(i, 1).Font.Color = vbBlack Then 
     GetBlackString = GetBlackString & workCell.Characters(i, 1).Text 
End If 
Next i 
End Function 

Here is the result using this VBA functions:

С уважением

Смежные вопросы