EXCEL-посимвольное считывание(запись) из ячейки.

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
anval
Сообщения: 98
Зарегистрирован: 09 ноя 2004, 10:06

В ячейке находится текстовая константа, состоящая из слов(блоков) разного цвета. Задача заключается в том, чтобы заменить отдельные блоки одинакового цвета другой информацией. Можно ли как-то считать и записать информацию в ячейки посимвольно(цвет символа можно потом определить с помощью свойства Characters объекта Range).
EXCEL-посимвольное считывание(запись) из ячейки.
Madcat
Сообщения: 3
Зарегистрирован: 30 ноя 2007, 13:03

С моей нубской точки зрения надо определить длину всей строки, циклом перебирать по буквам, например, с помощью Mid и иже с ними, сделать тип, содержащий цвет (тип variant) берем из Font.Color, слово сложением букв одного цвета от Mid, длину слова одного цвета Len (определяем из предыдущего значения). Соответственно, далее условия замены и записи в другие ячейки. Если где-то неправ - поправьте пожалуйста.
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Предлагаю не посимвольно, а на уровне блоков (слов). Посмотрите вложение. Комментарии в коде.
anval
Сообщения: 98
Зарегистрирован: 09 ноя 2004, 10:06

Madcat и SAS888, спасибо за предложенные варианты.
SAS888, я, наверное, не точно выразилась -
"константа, состоящая из слов(блоков) разного цвета" -
"слов" надо исключить, т.к. смена цветов может происходить и в пределах одного слова, а вся константа может представлять собой всего лишь одно слово, состоящее из блоков разного цвета.
Madcat, перебор в цикле по буквам - это первое, что пришло на ум, но хотелось чего-то более изящного, которого я , возможно. не знаю.
Madcat
Сообщения: 3
Зарегистрирован: 30 ноя 2007, 13:03

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
anval
Сообщения: 98
Зарегистрирован: 09 ноя 2004, 10:06

Madcat, спасибо.
То, что мне было нужно, нашла в Вашем примере - ".Characters(k, i - k).Text", я, к своему сожалению, не знала о существовании этого свойства.
Появился еще один, связанный с этой темой вопрос.
Можно ли в текстовой переменной хранить не только совокупность символов , но и цвет каждого символа?
Ответить