Excel определить цвет текста в ячейке

 

VectorXXX

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

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

#1

07.04.2016 13:57:06

Здравствуйте, помогите пожалуйста решить следующую проблему:
Записал себе макрос, а он не работает как надо.
В колонку G должна вставляться формула ЕСЛИ(ЕОШ(ПОИСК(«*витяжка*»;B8)>0);F8*0,85;F8*0,88), но если текст в RC[-1] красный, то должно встать просто =RC[-1].
Как я понимаю проблема в том что Selection.FillDown отказывается работать с фильтром.
Каким образов можно определить цвет текста в ячейке, что бы обойтись без использования фильтра?
файл для примера прикрепил — лист2 — как должно быть.
код макроса:

Код
Sub ПрайсМакро()

    Columns("G:G").Select
    Selection.ClearContents
    Range("H3").Select
    ActiveCell.FormulaR1C1 = "курс:"
    Range("I3").Select
    ActiveCell.FormulaR1C1 = "25"
    Range("G7").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(ISERR(SEARCH(""*витяжки*"",RC[-5])>0),RC[-1]*0.85,RC[-1]*0.88)"
    Range("G7").Select
    Selection.AutoFill Destination:=Range("G7:G205")
    Range("G7:G205").Select
    ActiveSheet.Range("$A$6:$F$205").AutoFilter Field:=6, Criteria1:=vbRed, Operator:=xlFilterFontColor
    Range("G7").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]"
    Range("G7").Select
    Selection.FillDown
    ActiveWindow.SmallScroll Down:=-138
    Selection.AutoFilter
    Range("I7").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[2]/R3C9-RC[-2]<15,RC[-2]+15,RC[2]/R3C9)"
    Range("I7").Select
    Selection.AutoFill Destination:=Range("I7:I227"), Type:=xlFillDefault
    Range("I7:I227").Select
    ActiveWindow.SmallScroll Down:=-210
    Range("H7").Select
End Sub

Прикрепленные файлы

  • plfile.xls (37 КБ)

Изменено: VectorXXX07.04.2016 22:54:26
(Смена названия темы)

 

vikttur

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

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

#2

07.04.2016 14:04:03

Цитата
Возможно ли определить цвет шрифта в условии формулы?

Может быть, посмотреть с другой стороны — обойтись без формулы и все вычислять в коде?

 

VectorXXX

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

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

к сожалению не тот у меня уровень знаний)
но если кто поможет написать — буду очень признателен

 

Udik

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

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

excel 2016х64 Контакты в профиле

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

Арфы — нет, возьмите бубен.

 

Фродо

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

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

#5

07.04.2016 17:03:24

Код
 If Range("B23").Font.Color = 255 Then
  'действие если красный шрифт
  Else
  'действие если шрифт не красный
  End If

Изменено: Фродо07.04.2016 22:54:59

у меня простая версия Экселя, в ней нет кнопки «Прочитать мысли и сгенерировать файл пример»

 

ts-79

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

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

Критичен ли цвет в столбце F?
Ведь есть еще и атрибут столбца D (пустой/не пустой), который передает те же условия что и цвет в столбце F

Или там могут быть и другие значения?
Если нет то:
=ЕСЛИ(D7=»»;ЕСЛИ(ЕОШ(ПОИСК(«*витяжка*»;B7)>0);F7*0,85;F7*0,88);F7)

Изменено: ts-7907.04.2016 18:01:54

 

Фродо

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

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

насколько я помню стандартные функции не могут узнать какой цвет у шрифта

на всякий случай выложу свой пример через УДФ, может пригодится .
трактовка =ЕСЛИ(КрасныйЦвет(F7);»ячейка красная»;»ячейка Не красная»)

у меня простая версия Экселя, в ней нет кнопки «Прочитать мысли и сгенерировать файл пример»

 

bedvit

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

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

Виталий

Кроме ЯЧЕЙКА(«формат»;…) со скудным функционалом, не припомню стандартных функций отслеживающих цвет шрифта.

«Бритва Оккама» или «Принцип Калашникова»?

 

VectorXXX

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

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

#9

07.04.2016 18:38:23

Цитата
ts-79 написал: Критичен ли цвет в столбце F?

не всегда в примечаниях пишут спец цена, бывают всякие акции и тд.

 

VectorXXX

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

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

#10

07.04.2016 23:26:21

Фродо, Спасибо большое, взял Вашу функцию.

Изменение цвета текста (шрифта) в ячейке рабочего листа 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

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

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


Here are some small functions for you. From your sheet, press AltF11 to reach the VBA editor, insert a new module, paste the below code, go back to your worksheet and use them by their names, like in =FillColor(A1)

The first two are the promised «3-liners» giving decimal values for font and background colors — not very useful though

The second pair converts the decimal number to RGB and returns a string of format N, N, N

The third pair are array formulas — select 3 cells in a row, enter the formula and press Ctrl+Shift+Enter to obtain numeric RGB values in 3 neighboring cells

Function FillColor(Target As Range) As Variant
    FillColor = Target.Interior.Color
End Function

Function FontColor(Target As Range) As Variant
    FontColor = Target.Font.Color
End Function

Function FillColorRGB(Target As Range) As Variant
Dim N As Double

    N = Target.Interior.Color
    FillColorRGB = Str(N Mod 256) & ", " & Str(Int(N / 256) Mod 256) & ", " & Str(Int(N / 256 / 256) Mod 256)
End Function

Function FontColorRGB(Target As Range) As Variant
Dim N As Double

    N = Target.Font.Color
    FontColorRGB = Str(N Mod 256) & ", " & Str(Int(N / 256) Mod 256) & ", " & Str(Int(N / 256 / 256) Mod 256)
End Function

Function FillColorRGBArray(Target As Range) As Variant
Dim N As Double, A(3) As Integer

    N = Target.Interior.Color
    A(0) = N Mod 256
    A(1) = Int(N / 256) Mod 256
    A(2) = Int(N / 256 / 256) Mod 256
    FillColorRGBArray = A
End Function

Function FontColorRGBArray(Target As Range) As Variant
Dim N As Double, A(3) As Integer

    N = Target.Font.Color
    A(0) = N Mod 256
    A(1) = Int(N / 256) Mod 256
    A(2) = Int(N / 256 / 256) Mod 256
    FontColorRGBArray = A
End Function

A word of caution: changing the color of a cell does not start recalculation by the above functions/formulas, as recoloring a cell in general is not supposed to drive recalculation. You have to manually start a full recalculation using Ctrl+Alt+Shift+F9

На чтение 3 мин. Просмотров 827 Опубликовано 15.12.2019

Содержание

  1. Описание работы
  2. Зачем это нужно?
  3. Код на VBA
  4. Изменение цвета текста в ячейке или диапазоне
  5. Применение дополнительного цвета
  6. Форматирование цвета ярлычка листа

Описание работы

Функция =ЦВЕТШРИФТА(ЯЧЕЙКА) возвращает код цвета шрифта указанной ячейки. Функция имеет один обязательный аргумент.

  • ЯЧЕЙКА — ссылка на ячейку, цвет шрифта которой необходимо определить.

Ниже представлен пример, демонстрирующий работу функции.

Следует обратить внимание на тот факт, что функция не пересчитывается автоматически. Это связано с тем, что изменение цвета шрифта ячейки Excel не приводит к пересчету формул. Для пересчета формулы необходимо пользоваться сочетанием клавиш Ctrl+Alt+F9

Зачем это нужно?

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

Код на VBA

Вы можете самостоятельно внедрить данную функцию в Excel или установить надстройку.

Для Excel — 2007 на главной панели выбираете «Условное форматирование» — «Правила выделения ячеек» — «Другие правила» — «Использовать формулу для определения форматируемых ячеек» — «Форматировать значения, для которых следующая формула является истинной»

Далее задаёте формулу и формат (в Вашем случае — цвет выделения текста) .

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

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

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

Изменение цвета текста в ячейке или диапазоне

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

На вкладке Главная щелкните стрелку рядом с кнопкой Цвет шрифта .

Выберите цвет в группе Цвета темы или Стандартные цвета.

Совет: Чтобы применить последний выбранный цвет текста, на вкладке Главная нажмите кнопку Цвет текста.

Применение дополнительного цвета

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

На вкладке Главная щелкните стрелку рядом с кнопкой Цвет текста и выберите команду Другие цвета.

На вкладке Спектр в поле Цвета выберите нужный цвет.

Если вы знаете числовые значения составляющих нужного цвета, в поле Цветовая модель выберите модель RGB (Red, Green, Blue — красный, зеленый, синий) или HSL (Hue, Sat, Lum — тон, насыщенность, яркость), а затем введите числа, в точности соответствующие искомому цвету.

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

Форматирование цвета ярлычка листа

Щелкните правой кнопкой мыши ярлычок листа, цвет которого вы хотите изменить.

Щелкните Цвет ярлычка, а затем выберите нужный цвет.

Изменится цвет ярлычка, но не цвет шрифта. При выборе темного цвета ярлычка цвет шрифта меняется на белый, а при выборе светлого цвета — на черный.

I would like to know if we can find out the Color of the CELL with the help of any inline formula (without using any macros)

I’m using Home User Office package 2010.

Lance Roberts's user avatar

Lance Roberts

22.2k32 gold badges112 silver badges129 bronze badges

asked Jun 24, 2014 at 9:07

Praveen's user avatar

2

As commented, just in case the link I posted there broke, try this:

Add a Name(any valid name) in Excel’s Name Manager under Formula tab in the Ribbon.
Then assign a formula using GET.CELL function.

=GET.CELL(63,INDIRECT("rc",FALSE))

63 stands for backcolor.
Let’s say we name it Background so in any cell with color type:

=Background

Result:
enter image description here

Notice that Cells A2, A3 and A4 returns 3, 4, and 5 respectively which equates to the cells background color index. HTH.
BTW, here’s a link on Excel’s Color Index

answered Jun 24, 2014 at 9:34

L42's user avatar

L42L42

19.3k11 gold badges43 silver badges68 bronze badges

6

Color is not data.

The Get.cell technique has flaws.

  1. It does not update as soon as the cell color changes, but only when
    the cell (or the sheet) is recalculated.
  2. It does not have sufficient numbers for the millions of colors that are available in modern Excel. See the screenshot and notice how the different intensities of yellow or purple all have the same number.

enter image description here

That does not surprise, since the Get.cell uses an old XML command, i.e. a command from the macro language Excel used before VBA was introduced. At that time, Excel colors were limited to less than 60.

Again: Color is not data.

If you want to color-code your cells, use conditional formatting based on the cell values or based on rules that can be expressed with logical formulas. The logic that leads to conditional formatting can also be used in other places to report on the data, regardless of the color value of the cell.

answered Jun 24, 2014 at 10:31

teylyn's user avatar

teylynteylyn

34.1k4 gold badges52 silver badges72 bronze badges

5

No, you can only get to the interior color of a cell by using a Macro. I am afraid. It’s really easy to do (cell.interior.color) so unless you have a requirement that restricts you from using VBA, I say go for it.

Myrddin Emrys's user avatar

answered Jun 24, 2014 at 9:13

Gaijinhunter's user avatar

GaijinhunterGaijinhunter

14.5k4 gold badges50 silver badges57 bronze badges

1

Anticipating that I already had the answer, which is that there is no built-in worksheet function that returns the background color of a cell, I decided to review this article, in case I was wrong. I was amused to notice a citation to the very same MVP article that I used in the course of my ongoing research into colors in Microsoft Excel.

While I agree that, in the purest sense, color is not data, it is meta-data, and it has uses as such. To that end, I shall attempt to develop a function that returns the color of a cell. If I succeed, I plan to put it into an add-in, so that I can use it in any workbook, where it will join a growing legion of other functions that I think Microsoft left out of the product.

Regardless, IMO, the ColorIndex property is virtually useless, since there is essentially no connection between color indexes and the colors that can be selected in the standard foreground and background color pickers. See Color Combinations: Working with Colors in Microsoft Office and the associated binary workbook, Color_Combinations Workbook.

answered Sep 18, 2015 at 20:35

David A. Gray's user avatar

2

Понравилась статья? Поделить с друзьями:
  • Excel определить формат ячейки формула
  • Excel определить тип данных ячейки excel
  • Excel определить темп роста
  • Excel определить строки больше
  • Excel определить символ по счету