Задать цвет строки vba excel

 

alcnwndrlnd

Пользователь

Сообщений: 44
Регистрация: 08.12.2015

#1

08.12.2015 10:03:45

Всем привет!
Помогите, пожалуйста, с макросом для Excel, уже облазила все, что только можно
Нужно сделать так, чтобы макрос «пробегал» значения в определенном столбце и раскрашивал строки в соответствии с НЕСКОЛЬКИМИ условиями. Пока получается проверять только одно и запускать макрос приходится по нескольку раз, потому что останавливается. Код под спойлером:

Скрытый текст

Уж больно здесь красиво, жди беды..

 

vdovin_sg

Пользователь

Сообщений: 58
Регистрация: 02.12.2015

А почему бы не воспользоваться условным форматированием? Можно выделить нужный столбец и задать в разделе условное форматирование нужные условия. Сколько необходимо!

 

vdovin_sg, хотелось бы макросом как-то автоматизировать процесс, нажатием одной кнопки, так сказать, а условное форматирование каждый раз добавлять.

Уж больно здесь красиво, жди беды..

 

vdovin_sg

Пользователь

Сообщений: 58
Регистрация: 02.12.2015

alcnwndrlnd, Ясно, в макросах я не силен, сам только учусь.

 

vdovin_sg, вот и я тоже, пока что :) но все еще впереди

Уж больно здесь красиво, жди беды..

 

vdovin_sg

Пользователь

Сообщений: 58
Регистрация: 02.12.2015

#6

08.12.2015 10:29:55

а если попробовать использовать цикл for a=1 to 500

Код
Sub Start()
Fill_Color Range("A1:A500")
End Sub

Sub Fill_Color(Rg As Range)
Dim cel As Range
For Each cel In Rg
a = cel.Value
[B]For a = 1 To 500[/B]
If a = 1 Then
cel.EntireRow.Interior.Color = QBColor(5)
ElseIf a = 2 Then
cel.EntireRow.Interior.Color = QBColor(3)
End If
[B]Next a[/B]
Next
End Sub
 

vdovin_sg, идея хорошая, а что делать с проверкой нескольких значений? в разных else if — ах расписать только если

Уж больно здесь красиво, жди беды..

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#8

08.12.2015 10:52:25

Код
Sub Fill_Color()
Dim i As Long
Range("A1:A500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 500
 If Cells(i, 1) = 1 Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 1) = 2 Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
Next
End Sub
 

k61

Пользователь

Сообщений: 2441
Регистрация: 21.12.2012

#9

08.12.2015 10:56:17

Код
Sub Fill_Color_2()
Dim cel As Range
Cells.Interior.ColorIndex = xlNone
For Each cel In Columns(1).SpecialCells(2, 1)
If cel = 1 Or cel = 2 Then cel.EntireRow.Interior.Color = QBColor(7 - cel.Value * 2)
Next
End Sub
 

Kuzmich, k61, тааак, спасибо, сейчас поразбираюсь.. в принципе реально вставить вместо «1» и «2» текстовые значения?

Уж больно здесь красиво, жди беды..

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

 

alcnwndrlnd

Пользователь

Сообщений: 44
Регистрация: 08.12.2015

#12

08.12.2015 11:27:25

Kuzmich, в таком случае, подскажите, пожалуйста, синтаксис. Как-то надо сослаться на текстовое значение? Ох уж этот ВБА, с++ и то легче.. голова уже кругом

Код
Sub Fill_Color()
Dim i As Long
Range("A1:A500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 500
 If Cells(i, 1) = "мама" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 1) = "мыла" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
 If Cells(i, 1) = "раму" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6

Next
End Sub

Изменено: alcnwndrlnd08.12.2015 11:27:44

Уж больно здесь красиво, жди беды..

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

А что не получается. Строку с «раму» видимо надо посветить другим цветом (6 заменить)

 

Kuzmich, да, проблема была именно в этом, макрос просто не выполнялся :) что ж, всем большое спасибо и огромный «+» в карму! vdovin_sg, k61, Kuzmich

Уж больно здесь красиво, жди беды..

 

alcnwndrlnd

Пользователь

Сообщений: 44
Регистрация: 08.12.2015

#15

08.12.2015 11:47:50

Kuzmich, и, наверное, последний вопрос.. Возможно, глупый: как проверить несколько значений и раскрасить одним цветом:

Код
Sub Fill_Color()
Dim i As Long
Range("A1:A500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 500
 If Cells(i, 1) = "мама" Or "мыла" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 1) = "абракадабра" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
 If Cells(i, 1) = "раму" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 8
Next
End Sub

Изменено: alcnwndrlnd08.12.2015 11:48:18

Уж больно здесь красиво, жди беды..

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#16

08.12.2015 11:51:05

Код
If Cells(i, 1) = "мама" Or Cells(i, 1) ="мыла" Then
 

Kuzmich, «а ларчик просто открывался»  :D спасибо еще раз, огромное

Уж больно здесь красиво, жди беды..

 

alcnwndrlnd

Пользователь

Сообщений: 44
Регистрация: 08.12.2015

#18

08.12.2015 12:08:28

Kuzmich, потревожу Вас еще раз. Не получается добавить просмотр следующего интересующего меня столбца, после прохождения первого

Код
Range("A1:A500", "B1:B500").EntireRow.Interior.ColorIndex = -4142

так?

Уж больно здесь красиво, жди беды..

 

Михаил Лебедев

Пользователь

Сообщений: 2855
Регистрация: 17.01.2013

#19

08.12.2015 12:22:39

попробуйте так:

Код
Sub Fill_Color()
Dim rng As Range
Dim rng2 As Range
Set rng = Range("A1:B500")
rng.EntireRow.Interior.ColorIndex = -4142
For Each rng2 In rng
 If rng2 = "мама" Or "мыла" Then rng2.EntireRow.Interior.ColorIndex = 4
 If rng2 = "абракадабра" Then rng2.EntireRow.Interior.ColorIndex = 6
 If rng2 = "раму" Then rng2.EntireRow.Interior.ColorIndex = 8
Next
Set rng = Nothing
End Sub

Изменено: Михаил Лебедев10.12.2015 11:57:00
(исправил диапазон (спасибо Kuzmich-у))

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Уж больно здесь красиво, жди беды..

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#21

08.12.2015 12:42:39

Код
Range("A1:B500").EntireRow.Interior.ColorIndex = -4142
 

Kuzmich, пробовала, второй столбец не красит, но и ошибку не выдает

Уж больно здесь красиво, жди беды..

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#23

08.12.2015 12:46:23

Код
Range("A1:A500,B1:B500")
 

Файл выложите. И/или поменяйте строку в моем коде, как предложил «кузмич» (я в своем предыдущем — поменял)

Изменено: Михаил Лебедев08.12.2015 13:04:02

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#25

08.12.2015 13:04:42

Цитата
второй столбец не красит

Какой столбец? Когда подсвечивается вся строка.
Или не красит по условию второго столбца?

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

Cells(i,2) — это будет второй столбец

 

Михаил Лебедев

Пользователь

Сообщений: 2855
Регистрация: 17.01.2013

#27

08.12.2015 13:20:58

Код
Sub Fill_Color()
    Dim rng As Range
    Dim rng2 As Range
    Set rng = Range("A1:B10")
    rng.EntireRow.Interior.ColorIndex = -4142
    For Each rng2 In rng
        If rng2.Value2 = "мама" Or rng2.Value2 = "мыла" Then Cells(rng2.Row, 1).EntireRow.Interior.ColorIndex = 4
        If rng2.Value2 = "абракадабра" Then Cells(rng2.Row, 1).EntireRow.Interior.ColorIndex = 6
        If rng2.Value2 = "раму" Then Cells(rng2.Row, 1).EntireRow.Interior.ColorIndex = 8
    Next
    Set rng = Nothing
End Sub

Изменено: Михаил Лебедев08.12.2015 13:21:20

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Юрий М

Модератор

Сообщений: 60579
Регистрация: 14.09.2012

Контакты см. в профиле

alcnwndrlnd и vdovin_sg, код следует оформлять тегом — ищите такую кнопку (см. скрин).
alcnwndrlnd,  поменяйте, пожалуйста, в своём профиле отображаемое имя — сейчас оно с нарушением Правил. Спасибо!

 

alcnwndrlnd

Пользователь

Сообщений: 44
Регистрация: 08.12.2015

#29

08.12.2015 13:46:53

Цитата
Kuzmich написал:
Какой столбец? Когда подсвечивается вся строка.
Или не красит по условию второго столбца?

Да, по условию. Сейчас попробую с исправлениями

Уж больно здесь красиво, жди беды..

 

alcnwndrlnd

Пользователь

Сообщений: 44
Регистрация: 08.12.2015

#30

08.12.2015 14:39:05

Михаил Лебедев, спасибо! Kuzmich, и снова, еще раз спасибо! во всем разобралась, все работает, как надо

Код
Sub Fill_Color()
Dim i As Long
Range("A1:A500, B1:B500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 5000
 If Cells(i, 1) = "а" Or Cells(i, 1) = б" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 2) = "в" Or Cells(i, 2) = "г" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 5
 If Cells(i, 1) = "д" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
 If Cells(i, 1) = "е" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 8
 
Next
End Sub

Изменено: alcnwndrlnd08.12.2015 14:39:41

Уж больно здесь красиво, жди беды..

Изменение цвета текста (шрифта) в ячейке рабочего листа Excel с помощью кода VBA. Свойства ячейки (диапазона) .Font.Color, .Font.ColorIndex и .Font.TintAndShade.

Использование цветовой палитры для присвоения цвета тексту в ячейке листа Excel аналогично присвоению цвета фону ячейки, только свойство диапазона .Interior меняем на свойство .Font.

Цвет текста и предопределенные константы

Цвет шрифту в ячейке можно присвоить с помощью предопределенных констант:

Range(«A1:C3»).Font.Color = vbGreen

Range(Cells(4, 1), Cells(6, 3)).Font.Color = vbBlue

Cells(7, 1).Font.Color = vbRed

Напомню, что вместо индексов строк и столбцов можно использовать переменные. Список предопределенных констант смотрите здесь.

Цвет шрифта и модель RGB

Для изменения цвета текста в ячейке можно использовать цветовую модель RGB:

Range(«A1»).Font.Color = RGB(200, 150, 250)

Cells(2, 1).Font.Color = RGB(200, 150, 100)

Аргументы функции RGB могут принимать значения от 0 до 255. Если все аргументы равны 0, цвет — черный, если все аргументы равны 255, цвет — белый. Функция RGB преобразует числовые значения основных цветов (красного, зеленого и синего) в индекс основной палитры.

Список стандартных цветов с RGB-кодами смотрите в статье: HTML. Коды и названия цветов.

Свойство .Font.ColorIndex

Свойство .Font.ColorIndex может принимать значения от 1 до 56. Это стандартная ограниченная палитра, которая существовала до Excel 2007 и используется до сих пор. Посмотрите примеры:

Range(«A1:D6»).Font.ColorIndex = 5

Cells(1, 6).Font.ColorIndex = 12

Таблица соответствия значений ограниченной палитры цвету:

Стандартная палитра Excel из 56 цветов

Стандартная палитра Excel из 56 цветов

Подробнее о стандартной палитре Excel смотрите в статье: Стандартная палитра из 56 цветов.

Свойство .Font.ThemeColor

Свойство .Font.ThemeColor может принимать числовые или текстовые значения констант из коллекции MsoThemeColorIndex:

Range(«A1»).Font.ThemeColor = msoThemeColorHyperlink

Cells(2, 1).Font.ThemeColor = msoThemeColorAccent4

Основная палитра

Основная палитра, начиная c Excel 2007, состоит из 16777216 цветов. Свойство .Font.Color может принимать значения от 0 до 16777215, причем 0 соответствует черному цвету, а 16777215 — белому.

Cells(1, 1).Font.Color = 0

Cells(2, 1).Font.Color = 6777215

Cells(3, 1).Font.Color = 4569325

Отрицательные значения свойства .Font.Color

При записи в Excel макрорекордером макроса с присвоением шрифту цвета используются отрицательные значения свойства .Font.Color, которые могут быть в пределах от -16777215 до -1. Отрицательные значения соответствуют по цвету положительному значению, равному сумме наибольшего индекса основной палитры и данного отрицательного значения. Например, отрицательное значение -8257985 соответствует положительному значению 8519230, являющегося результатом выражения 16777215 + (-8257985). Цвета текста двух ячеек из следующего кода будут одинаковы:

Cells(1, 1).Font.Color = 8257985

Cells(2, 1).Font.Color = 8519230

Свойство .Font.TintAndShade

Еще при записи макроса с присвоением шрифту цвета макрорекордером добавляется свойство .Font.TintAndShade, которое осветляет или затемняет цвет и принимает следующие значения:

  • -1 — затемненный;
  • 0 — нейтральный;
  • 1 — осветленный.

При тестировании этого свойства в Excel 2016, сравнивая затемненные и осветленные цвета, разницы не заметил. Сравните сами:

Sub Test()

With Range(Cells(1, 1), Cells(3, 1))

   .Value = «Сравниваем оттенки»

   .Font.Color = 37985

End With

Cells(1, 1).Font.TintAndShade = 1

Cells(2, 1).Font.TintAndShade = 0

Cells(3, 1).Font.TintAndShade = 1

End Sub

В первые три ячейки первого столбца записывается одинаковый текст для удобства сравнения оттенков.

Разноцветный текст в ячейке

Отдельным частям текста в ячейке можно присвоить разные цвета. Для этого используется свойство Range.Characters:

Sub Test()

    With Range(«A1»)

        .Font.Color = vbBlack

        .Value = «Океан — Солнце — Оазис»

        .Font.Size = 30

        .Characters(1, 5).Font.Color = vbBlue

        .Characters(9, 6).Font.Color = RGB(255, 230, 0)

        .Characters(18, 5).Font.Color = RGB(119, 221, 119)

    End With

End Sub

Результат работы кода:

Разноцветный текст в ячейке


В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц Excel средствами VBA.

VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк

В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:

запыления планов работ.

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

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

Макросы Excel прекрасно справляются с форматированием ячеек на рабочих листах. Кроме того, делают это быстро и в полностью автоматическом режиме. Воспользуемся этими преимуществами и для решения данной задачи напишем свой код VBA-макроса. Он поможет нам быстро и безопасно сбрасывать форматы на исходный предварительно заданный в шаблоне главной таблицы.

Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

Код Visual Basic.

В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub

VBA-код макроса.

Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:

сбросить форматирование таблицы на исходный формат.

Таблица приобрела формат, который определен макросом. Таким образом код VBA нам позволяет сбросить любые изменения формата ячеек на предустановленный автором отчета.



Описание VBA-макроса для формата ячеек таблицы Excel

Первая инструкция в коде, проверяет выделены ли ячейки диапазоном. Если перед выполнением макроса выделил другой элемент листа, например, график, тогда макрос закрывается и дальнейшие инструкции выполняться не будут. В противные случаи будут форматироваться все выделенные ячейки по очереди в соответствии с определенными настройками форматирования:

  1. Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
  2. Включен построчный перенос текста.
  3. Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
  4. Сброс цвета шрифта на авто.
  5. Удаляется любая заливка ячеек.
  6. Ширина столбцов автоматически настраивается под текст в ячейках.
  7. Автоматически настроить высоту строк по содержимому ячеек.

Модификация исходного кода макроса для форматирования

Если необходимо сделать так чтобы текст выравнивался не по центру относительно горизонтали, а по правую сторону ячейки, тогда измените константу xlHAlignCenter на xlHAlignRight. Она находиться в свойстве .HorizontalAlignment. Сделайте это следующим образом:

.HorizontalAlignment = xlHAlignRight.

Таким же образом можно выровнять текст по левую сторону изменив значение константы на xlHAlignLeft. Или можно выровнять положение текста по ширине ячейки используя константу xlHAlignJustify.

Чтобы макрос выравнивал текст в ячейках по вертикали к низу, измените строку кода, отвечающую за данную настройку форматирования. Измените константу, которая присваивается к свойству VerticalAlignment в следующий способ:

Если хотите выровнять текс к верху ячейки, тогда воспользуйтесь константой xlHAlignTop.

Если нужно применить для границ ячеек толстую и пунктирную линию в синем цвете, смодифицируйте инструкцию, отвечающую за формат линий:

.Borders.LineStyle = xlDash

.Borders.Color = vbBlue

.Borders.Weight = xlMedium

Описание настройки форматирования для линий границ ячеек. Мы будем получать разные дополнительные типы линий границ если для свойства LineStyle присваивать такие константы:

  • xlDoshDot – применяется для рисования пунктирных линий в границах ячеек;
  • xlDouble – рисует двойную линию;
  • xlHairLine – рисует тонкую линию;
  • xlThick – для рисования очень толстой линии.

Для настройки цвета линий Excel предлагает всего 8 констант для определенных цветов. Константы для настройки цвета линий границ для свойства Color:

  • vbBlack – черный;
  • vbWhite – белый;
  • vbRed – красный;
  • vbGreen –зеленый;
  • vbBlue – синий;
  • vbYellow – желтый;
  • vbMagenta – алый;
  • vbCyan – голубой.

Но при необходимости присвоить линиям границ другие цвета можно вместо константы для свойства Color записать функцию RGB(). Достаточно лишь в аргументе этой функции указать код цвета по шкале от 0 и до 255.

Если нужно применить толстую линию только для границ выделенного диапазона, тогда перед инструкцией End With добавьте следующую строку кода:

.BorderAround xlContinuous, xlMedium, vbBlack

Описание: В первом аргументе для метода BorderAround можно записать также другой стиль линии. Во втором – толщину линии, а в третьем – цвет. Константы, которые можно присвоить в качестве значений для этих аргументов можно использовать те же, которые мы использовали для свойств: LineStyle, Weight, Color.

Если нужно экспонировать первую строку для выделенного диапазона с помощью жирного и курсивного шрифта значений ячеек. А также заполнить ячейки первой строки заливкой с голубым цветом, тогда в самом конце кода макроса перед последней инструкцией End Sub следует добавить несколько строк с VBA-кодом:

.Rows(1).Font.Bold = True

.Rows(1).Font.Italic = True

.Rows(1).Interior.Color = vbCyan

Если хотите присвоить такой же формат для не только для первой строки, но и для первого столбца выделенного диапазона, тогда скопируйте и вставьте ниже эти 3 строчки кода. После в последних трех строках измените свойство Rows на Columns.

.Columns (1).Font.Bold = True

.Columns (1).Font.Italic = True

.Columns (1).Interior.Color = vbCyan

Если нужно задать особенный формат для экспонирования последней строки выделенного диапазона, тогда измените число 1 в аргументе свойства Rows на число всех выделенных строк .Rows.Count. Например, добавьте в конец кода еще такую строку:

.Rows(.Rows.Count).Font.Bold = True

Полная версия модифицированного кода макроса выглядит так:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
.BorderAround xlContinuous, xlMedium, vbBlack
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
.Columns(1).Font.Bold = True
.Columns(1).Font.Italic = True
.Columns(1).Interior.Color = vbCyan
.Rows(.Rows.Count).Font.Bold = True
End With
End Sub

Пример работы измененного кода VBA-макроса:

Пример после изменений в коде.

В данном примере вы ознакомились с базовыми возможностями форматирования с помощью VBA-макросов. Уверен, что теперь вы сможете самостоятельно найти практическое применение этим исходным кодам.

alcnwndrlnd

0 / 0 / 0

Регистрация: 08.12.2015

Сообщений: 12

1

Изменить цвет строки в соответствии с значением в ячейке

08.12.2015, 09:37. Показов 3973. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Всем привет!
Помогите, пожалуйста, с макросом для Excel, уже облазила все, что только можно
Нужно сделать так, чтобы макрос «пробегал» значения в определенном столбце и раскрашивал строки в соответствии с НЕСКОЛЬКИМИ условиями. Пока получается проверять только одно и запускать макрос приходится по нескольку раз, потому что останавливается

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Start()
 
    Fill_Color Range("A1:A500")
 
End Sub
 
Sub Fill_Color(Rg As Range)
Dim cel As Range
      For Each cel In Rg
           a = cel.Value
           If a = 1 Then                   '
              cel.EntireRow.Interior.Color = QBColor(5)
           ElseIf a = 2 Then
              cel.EntireRow.Interior.Color = QBColor(3)
          End If           
      
Next
End Sub



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

08.12.2015, 11:33

2

alcnwndrlnd, почему не условное форматирование?
Вообще-то код рабочий.



1



alcnwndrlnd

0 / 0 / 0

Регистрация: 08.12.2015

Сообщений: 12

08.12.2015, 11:42

 [ТС]

3

Казанский, для большого количества значений код слишком громоздкий, и останавливается на полпути. Условное форматирование не подходит из-за того, что каждый раз задавать его придется. Спасибо ребятам с форума planetexcel, в частности Kuzmich, k61, vdovin_sg. Код Kuzmich:

Visual Basic
1
2
3
4
5
6
7
8
Sub Fill_Color()
Dim i As Long
Range("A1:A500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 500
 If Cells(i, 1) = 1 Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 1) = 2 Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
Next
End Sub

Тему можно считать закрытой.



0



У Вас лишняя буква r прицепилась :)

.Interior.Color = vbRed 
.Interior.Color = RGB(255, 0, 0)
.Interior.Color = 255

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

     Sub PaintCells()
            Dim r1 As Range, r2 As Range
            Dim c As Range
                Set r1 = Range("A1:C10") ' диапазон в переменную
                r1.Interior.Pattern = xlNone ' убираем заливку
'               r1.Interior.ColorIndex = 0 ' или так 

                For Each c In r1 ' цикл по ячейкам диапазона
                    If c.Value = 25 Then ' если условие выполняется
                        If r2 Is Nothing Then '  диапазон еще пустой
                            Set r2 = c ' формируем диапазон
                        Else
                            Set r2 = Union(r2, c) ' пополняем диапазон
                        End If
                    End If
                Next c

                If Not r2 Is Nothing Then r2.Interior.Color = 255 ' заливаем
                Set r1 = Nothing: Set r2 = Nothing ' освобождаем память
            End Sub

Залить строки по условию в ячейке:

For i = 1 To r1.Rows.Count ' цикл по строкам диапазона
    If r1(i, 1).Value = 25 Then ' если левая ячейка диапазона...
        If r2 Is Nothing Then '  диапазон еще пустой
            Set r2 = Range(Cells(i, 1), Cells(i, 3)) ' формируем диапазон
        Else
            Set r2 = Union(r2, Range(Cells(i, 1), Cells(i, 3))) ' пополняем диапазон
        End If
    End If
Next i

День добрый.

У меня есть скрипт для окрашивания ячеек с дубликатами в разные цвета:

Sub ВыделитьДубликатыРазнымиЦветами()
    On Error Resume Next
    ' массив цветов, используемых для заливки ячеек-дубликатов
   Colors = Array(12900829, 15849925, 14408946, 14610923, 15986394, 14281213, 14277081, _
                   9944516, 14994616, 12040422, 12379352, 15921906, 14336204, 15261367, 14281213)

    Dim coll As New Collection, dupes As New Collection, _
        cols As New Collection, ra As Range, cell As Range, n&
    Err.Clear: Set ra = Intersect(Selection, ActiveSheet.UsedRange)
    If Err Then Exit Sub

    ra.Interior.ColorIndex = xlColorIndexNone: Application.ScreenUpdating = False
    For Each cell In ra.Cells ' запонимаем значение дубликатов в коллекции dupes
       Err.Clear: If Len(Trim(cell)) Then coll.Add CStr(cell.Value), CStr(cell.Value)
        If Err Then dupes.Add CStr(cell.Value), CStr(cell.Value)
    Next cell
    For i& = 1 To dupes.Count ' заполняем коллекцию cols цветами для разных дубликатов
       n = n Mod (UBound(Colors) + 1): cols.Add Colors(n), dupes(i): n = n + 1
    Next
    For Each cell In ra.Cells ' окрашиваем ячейки, если для её значения назначен цвет
       cell.Interior.color = cols(CStr(cell.Value))
    Next cell
    Application.ScreenUpdating = True
End Sub

Как сделать так, чтобы этот код красил не только ячейку, но и весь ряд? Спасибо.

Закрашивание строки цветом исходя из активной ячейки

DrRoy

Дата: Пятница, 31.05.2013, 16:05 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

Замечаний:
0% ±


В таблице может быть активной любая ячейка. Нужен макрос, который красит строку с активной ячейкой в желтый цвет.
Это мои извращения:
[vba]

Код

Range(«A» & ActiveCell.Row:»U» & ActiveCell.Row).Select
Selection.Interior.ColorIndex = 6

[/vba]
А как правильно?

К сообщению приложен файл:

4040909.xls
(15.5 Kb)

 

Ответить

AlexM

Дата: Пятница, 31.05.2013, 19:40 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Если таблицу сделать не такой пестрой, то можно так.
Код вставить в модуль листа.
[vba]

Код

Public r As Long, ci As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If r <> Empty And ci <> Empty Then
Range(Cells(r, 1), Cells(r, 21)).Interior.ColorIndex = ci
End If
r = Target.Row
ci = Target.Interior.ColorIndex
Range(Cells(r, 1), Cells(r, 21)).Interior.ColorIndex = 6
End Sub

[/vba]



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

DrRoy

Дата: Пятница, 31.05.2013, 20:15 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

Замечаний:
0% ±


Возможно, я не так сформулировал задачу.
Итак. В таблице щелкаем на любую ячейку. Она становится просто активной.
Если в этот момент запустить макрос, то строка с активной ячейкой должна окраситься желтым. Потом можно выбрать другую ячейку, но покрашенная строка должна остаться желтой.

Зачем все это нужно. Диспетчер принимает заказы от магазинов на определенные виды продукции, отмечает их количество в соответствующей строке. После этого запускается макрос вывода на печать, а строка с этим магазином помечается желтым, т.е. заказ принят и на эти цифры на желтом фоне можно не отвлекаться.

 

Ответить

AlexM

Дата: Пятница, 31.05.2013, 20:47 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

А так подойдет?



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

AndreTM

Дата: Пятница, 31.05.2013, 20:51 |
Сообщение № 5

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

DrRoy,
[vba]

Код

Intersect(Columns(«A:U»), ActiveCell.EntireRow).Interior.Color = vbYellow

[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

AlexM

Дата: Пятница, 31.05.2013, 20:54 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Макрос запускается кнопкой



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

DrRoy

Дата: Пятница, 31.05.2013, 21:21 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

Замечаний:
0% ±


AndreTM, спасибо огромное! Это именно то, что было нужно!
AlexM, вам тоже спасибо за труды, кое-что из Ваших формул я для себя тоже взял.

 

Ответить

Like this post? Please share to your friends:
  • Задача об оптимальном выпуске продукции в excel
  • Задачи excel среднее значение
  • Задать цвет строке excel
  • Задача об ассортименте продукции в excel
  • Задачи excel с or или and