Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2009, 19:34   #1
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию отформатировать часть текста в ячейке

Помогите, пожалуйста, написать макрос.
Задача такова - проверить все ячейки на листе и в непустых выделить жирным, цветом, увеличить размер шрифта текста, находящегося на третьей строке в этой ячейке.
Вложения
Тип файла: rar Пример.rar (3.4 Кб, 38 просмотров)
eto вне форума Ответить с цитированием
Старый 30.04.2009, 02:05   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub Форматирование()
    Dim ra As Range, cell As Range: Application.ScreenUpdating = False
    Set ra = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
    For Each cell In ra.Cells
        arr = Split(cell.Value, Chr(10))
        If UBound(arr) >= 3 Then
            pos = Len(arr(0)) + Len(arr(1)) + 3: lenght = Len(arr(2))
            With cell.Characters(pos, lenght)
                .Font.Color = vbBlue: .Font.Bold = True: .Font.Size = 10
            End With
        End If
    Next cell
End Sub


Sub ОчисткаФорматирования()
    Dim ra As Range: Set ra = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
    ra.Font.Color = vbBlack: ra.Font.Bold = False: ra.Font.Size = 8
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 30.04.2009, 10:20   #3
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

спасибо большое, работает почти как надо
в примере не учла, что есть ячейки, где всего три строки - в таком случае третья сейчас не выделяется, подскажите, плиз, что именно нужно поменять в коде, чтобы заработало?
eto вне форума Ответить с цитированием
Старый 30.04.2009, 10:21   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
что именно нужно поменять в коде, чтобы заработало?
В строке If UBound(arr) >= 3 Then замените 3 на 2
EducatedFool вне форума Ответить с цитированием
Старый 30.04.2009, 10:55   #5
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
Хорошо

отлично, еще раз спасибо!

помимо того, что это работает, хотелось бы разобраться - как
в частности - что вот тут происходит:
Код:
pos = Len(arr(0)) + Len(arr(1)) + 3: lenght = Len(arr(2))
и как, например, сделать чтобы ещё и первая строка выделялась?
на будущее, в качестве общего развития :)
eto вне форума Ответить с цитированием
Старый 30.04.2009, 15:04   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub Форматирование()
    Dim ra As Range, cell As Range: Application.ScreenUpdating = False
    Set ra = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
    ' диапазон ra - все заполненные ячейки активного листа

    For Each cell In ra.Cells
        ' разбиваем текст в строке за отдельные строки (разделителем является символ Chr(10))
        arr = Split(cell.Value, Chr(10))    ' получаем массив, количество элементов в котором равно числу строк в ячейке
        ' каждый элемент массива arr - текст очередной строки

        If UBound(arr) >= 2 Then    ' UBound(arr) - верхняя граница полученного массива
            ' эта граница на 1 меньше, чем количество элементов в нём (строк в ячейке)
            ' (поскольку элементы в массиве нумеруются с нуля)

            ' Обрабатывать текст ячейки будем только в том случае, если UBound(arr) >= 2
            ' т.е. если количество строк в ячейке не меньше трёх

            ' вычисляем позицию первого символа для форматирования:
            pos = Len(arr(0)) + Len(arr(1)) + 3            ' длина первой строки + длина второй строки
            ' + 2 символа перевода строки + 1

            lenght = Len(arr(2))    ' длина третьей строки

            With cell.Characters(pos, lenght)    ' в качестве параметров указываем pos - позицию
                ' первого обрабатываемого символа, и lenght - количество символов для обработки

                .Font.Color = vbBlue: .Font.Bold = True: .Font.Size = 10    ' собственно, само форматирование
            End With

            ' а теперь покрасим первую строку в ячейке:
            With cell.Characters(1, Len(arr(0)))    ' в качестве параметров указываем 1 - позицию
                ' первого обрабатываемого символа, и Len(arr(0)) - количество символов в первой строке

                .Font.Color = vbRed: .Font.Bold = True: .Font.Size = 12    ' собственно, само форматирование
            End With
        End If
    Next cell
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 30.04.2009, 15:45   #7
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

и снова спасибо, особенно за развернутое пояснение ^_^b
eto вне форума Ответить с цитированием
Старый 03.04.2016, 10:38   #8
iPAVELS
Новичок
Джуниор
 
Регистрация: 02.04.2016
Сообщений: 2
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Код:
Sub Форматирование()
    Dim ra As Range, cell As Range: Application.ScreenUpdating = False
    Set ra = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
    ' диапазон ra - все заполненные ячейки активного листа

    For Each cell In ra.Cells
        ' разбиваем текст в строке за отдельные строки (разделителем является символ Chr(10))
        arr = Split(cell.Value, Chr(10))    ' получаем массив, количество элементов в котором равно числу строк в ячейке
        ' каждый элемент массива arr - текст очередной строки

        If UBound(arr) >= 2 Then    ' UBound(arr) - верхняя граница полученного массива
            ' эта граница на 1 меньше, чем количество элементов в нём (строк в ячейке)
            ' (поскольку элементы в массиве нумеруются с нуля)

            ' Обрабатывать текст ячейки будем только в том случае, если UBound(arr) >= 2
            ' т.е. если количество строк в ячейке не меньше трёх

            ' вычисляем позицию первого символа для форматирования:
            pos = Len(arr(0)) + Len(arr(1)) + 3            ' длина первой строки + длина второй строки
            ' + 2 символа перевода строки + 1

            lenght = Len(arr(2))    ' длина третьей строки

            With cell.Characters(pos, lenght)    ' в качестве параметров указываем pos - позицию
                ' первого обрабатываемого символа, и lenght - количество символов для обработки

                .Font.Color = vbBlue: .Font.Bold = True: .Font.Size = 10    ' собственно, само форматирование
            End With

            ' а теперь покрасим первую строку в ячейке:
            With cell.Characters(1, Len(arr(0)))    ' в качестве параметров указываем 1 - позицию
                ' первого обрабатываемого символа, и Len(arr(0)) - количество символов в первой строке

                .Font.Color = vbRed: .Font.Bold = True: .Font.Size = 12    ' собственно, само форматирование
            End With
        End If
    Next cell
End Sub
Все доступно-понятно. Но что делать, если ячейка сборная:
Код:
В3=F3 & СИМВОЛ(10) &
G3 & СИМВОЛ(10) &
M3 & СИМВОЛ(10) &
K3
а нужно применить форматирование по вкусу, к примеру:
1 строка - шрифт жирный и размер 14; 2 строка - шрифт золотой и размер 16; 3 строка - шрифт синий подчеркнутый.



PS В идеале бы макросу фул-набор действий:
1. Вставить 2 новых столбца на место B и С в активном листе.
2. Выбрать столбцы для импорта и сцепки в столбик B по наименованию столбцов - универсальным переменным (Name, Rate, Web, Tel) и выполнить копирование данных 4 строками в ячейку столбика B.

3. Применить задуманное форматирование к столбику B.
сведя мои действия к перезаглавию 4 столбиков и запуску макроса.

Последний раз редактировалось iPAVELS; 03.04.2016 в 10:54.
iPAVELS вне форума Ответить с цитированием
Старый 03.04.2016, 12:47   #9
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Это уже кросс:
http://www.planetaexcel.ru/forum/ind...soderzhashchey
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 03.04.2016, 19:33   #10
iPAVELS
Новичок
Джуниор
 
Регистрация: 02.04.2016
Сообщений: 2
По умолчанию

Спасибо всем. Решение найдено (по кроссу выше). Без этой семилетней темы, я бы не поверил в близость решения, без варианта макроса EducatedFool не чем было даже тестировать свой файл.
Интернет - сила, форумы - мощь!

Последний раз редактировалось iPAVELS; 03.04.2016 в 19:36.
iPAVELS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно отформатировать... cherry_lady Microsoft Office Excel 0 25.03.2009 12:46
что делать если комп хочет отформатировать карту памяти с информацией? Александр Катаев Компьютерное железо 1 14.03.2009 14:11
Часть фона одним цветом а другая часть другим (без таблиц). Lanselot HTML и CSS 4 25.04.2008 18:41
Система предлагает отформатировать диск PsyTech Свободное общение 5 23.11.2007 16:06
аппаратная часть Abay Софт 5 09.02.2007 10:10