В ячейке находится текстовая константа, состоящая из слов(блоков) разного цвета. Задача заключается в том, чтобы заменить отдельные блоки одинакового цвета другой информацией. Можно ли как-то считать и записать информацию в ячейки посимвольно(цвет символа можно потом определить с помощью свойства Characters объекта Range).
EXCEL-посимвольное считывание(запись) из ячейки.
EXCEL-посимвольное считывание(запись) из ячейки.
Модератор: Naeel Maqsudov
С моей нубской точки зрения надо определить длину всей строки, циклом перебирать по буквам, например, с помощью Mid и иже с ними, сделать тип, содержащий цвет (тип variant) берем из Font.Color, слово сложением букв одного цвета от Mid, длину слова одного цвета Len (определяем из предыдущего значения). Соответственно, далее условия замены и записи в другие ячейки. Если где-то неправ - поправьте пожалуйста.
Предлагаю не посимвольно, а на уровне блоков (слов). Посмотрите вложение. Комментарии в коде.
Madcat и SAS888, спасибо за предложенные варианты.
SAS888, я, наверное, не точно выразилась -
"константа, состоящая из слов(блоков) разного цвета" -
"слов" надо исключить, т.к. смена цветов может происходить и в пределах одного слова, а вся константа может представлять собой всего лишь одно слово, состоящее из блоков разного цвета.
Madcat, перебор в цикле по буквам - это первое, что пришло на ум, но хотелось чего-то более изящного, которого я , возможно. не знаю.
SAS888, я, наверное, не точно выразилась -
"константа, состоящая из слов(блоков) разного цвета" -
"слов" надо исключить, т.к. смена цветов может происходить и в пределах одного слова, а вся константа может представлять собой всего лишь одно слово, состоящее из блоков разного цвета.
Madcat, перебор в цикле по буквам - это первое, что пришло на ум, но хотелось чего-то более изящного, которого я , возможно. не знаю.
anval, что-то ничего умнее мне в голову не лезет...
Но алгоритм кушает пробелы и далеко не так "красив", как хотелось бы. Тоже хочу увидеть что-нибудь эдакое )
i = 1: j = 1: k = 1
With Worksheets(1).Range("a1")
Do Until i = Len(Range("a1"))
cveta = .Characters(i, 1).Font.Color
i = i + 1
If .Characters(i, 1).Font.Color <> cveta Then
Cells(2, j) = .Characters(k, i - k).Text
Cells(2, j).Font.Color = cveta
k = i
j = j + 1
End If
Loop
End With
Но алгоритм кушает пробелы и далеко не так "красив", как хотелось бы. Тоже хочу увидеть что-нибудь эдакое )
i = 1: j = 1: k = 1
With Worksheets(1).Range("a1")
Do Until i = Len(Range("a1"))
cveta = .Characters(i, 1).Font.Color
i = i + 1
If .Characters(i, 1).Font.Color <> cveta Then
Cells(2, j) = .Characters(k, i - k).Text
Cells(2, j).Font.Color = cveta
k = i
j = j + 1
End If
Loop
End With
Madcat, спасибо.
То, что мне было нужно, нашла в Вашем примере - ".Characters(k, i - k).Text", я, к своему сожалению, не знала о существовании этого свойства.
Появился еще один, связанный с этой темой вопрос.
Можно ли в текстовой переменной хранить не только совокупность символов , но и цвет каждого символа?
То, что мне было нужно, нашла в Вашем примере - ".Characters(k, i - k).Text", я, к своему сожалению, не знала о существовании этого свойства.
Появился еще один, связанный с этой темой вопрос.
Можно ли в текстовой переменной хранить не только совокупность символов , но и цвет каждого символа?