Доброго времени суток! У меня есть набор предметов в 1 столбце и соответствующая им цена во 2 столбце. Примерно каждую неделю эти цены меняются и необходимо в отдельном столбце по каждому предмету прописывать разницу этих цен в виде "текущая цена (разница цен)" и выделять именно эту разницу зеленым или красным цветом в зависимости подросла цена или упала.
Искал где только можно как это сделать, видел похожую тему на этом же форуме, только там немного другая задача стояла, но принцип отчасти схож (http://www.excelworld.ru/forum/2-4781-1), только не разобрался как под свою задачу переделать те наработки...
Доброго времени суток! У меня есть набор предметов в 1 столбце и соответствующая им цена во 2 столбце. Примерно каждую неделю эти цены меняются и необходимо в отдельном столбце по каждому предмету прописывать разницу этих цен в виде "текущая цена (разница цен)" и выделять именно эту разницу зеленым или красным цветом в зависимости подросла цена или упала.
Искал где только можно как это сделать, видел похожую тему на этом же форуме, только там немного другая задача стояла, но принцип отчасти схож (http://www.excelworld.ru/forum/2-4781-1), только не разобрался как под свою задачу переделать те наработки...Zerofox
Попробую помочь. Вариант предлагаю самый простой. 1. Разделить столбец "итого" на два столбца. 2. Использовать условное форматирование, по правилам "если нашёл от -1000 до -1 крась в красный, если нашёл 1 до 1000 крась в зелёный" 3. Нужно будет создать, как минмиум, два правила. 4. Для правильного визуального восприятия столбец "итого" разделить на две части без окрашивания границы между "результатом" и "разницей".
Попробую помочь. Вариант предлагаю самый простой. 1. Разделить столбец "итого" на два столбца. 2. Использовать условное форматирование, по правилам "если нашёл от -1000 до -1 крась в красный, если нашёл 1 до 1000 крась в зелёный" 3. Нужно будет создать, как минмиум, два правила. 4. Для правильного визуального восприятия столбец "итого" разделить на две части без окрашивания границы между "результатом" и "разницей".PsevDANIm
Вынести в отдельный столбец, ему пользовательский формат [Green](+0);[Red](-0)
Да, я тоже об этом думал, но нужен именно один столбец, чтобы результат находился в одной ячейке в этом-то и вся головная боль...Выглядеть данные в столбце "итог" должны как в документе, к примеру 12 (+5) или 20 (-1) и красить надо только цифры +5 и -1 без скобочек...
Вынести в отдельный столбец, ему пользовательский формат [Green](+0);[Red](-0)
Да, я тоже об этом думал, но нужен именно один столбец, чтобы результат находился в одной ячейке в этом-то и вся головная боль...Выглядеть данные в столбце "итог" должны как в документе, к примеру 12 (+5) или 20 (-1) и красить надо только цифры +5 и -1 без скобочек...Zerofox
я не волшебник, я только учусь....учусь....учусь...
Сообщение отредактировал Zerofox - Среда, 19.03.2014, 12:30
Вобщем, в силу того, что в вба я практически полный 0, то не смог разобраться что к чему...Может быть кто-то сможет подсказать как написать макрос для моей задачки?
(прошу модераторов перенести тему в раздел макросов вба)
Вобщем, в силу того, что в вба я практически полный 0, то не смог разобраться что к чему...Может быть кто-то сможет подсказать как написать макрос для моей задачки?
(прошу модераторов перенести тему в раздел макросов вба)Zerofox
я не волшебник, я только учусь....учусь....учусь...
Сообщение отредактировал Zerofox - Среда, 19.03.2014, 15:15
Sub ertert() Dim r As Range, i&, j&: Application.ScreenUpdating = False For Each r In Range("E2:E" & Cells(Rows.Count, 3).End(xlUp).Row + 1) r.Value = r(1, -1) & IIf(r(1, 0) = 0, "", " (" & IIf(r(1, 0) > 0, "+", "") & r(1, 0) & ")") i = InStr(r.Value, "("): j = InStr(r.Value, ")") If i > 0 Then r.Characters(i + 1, j - i - 1).Font.Color = IIf(InStr(r, "+"), vbGreen, vbRed) Next r Application.ScreenUpdating = True End Sub
[/vba] полезн. приемчик с Characters все-таки пригодился
Попробуйте: [vba]
Код
Sub ertert() Dim r As Range, i&, j&: Application.ScreenUpdating = False For Each r In Range("E2:E" & Cells(Rows.Count, 3).End(xlUp).Row + 1) r.Value = r(1, -1) & IIf(r(1, 0) = 0, "", " (" & IIf(r(1, 0) > 0, "+", "") & r(1, 0) & ")") i = InStr(r.Value, "("): j = InStr(r.Value, ")") If i > 0 Then r.Characters(i + 1, j - i - 1).Font.Color = IIf(InStr(r, "+"), vbGreen, vbRed) Next r Application.ScreenUpdating = True End Sub
[/vba] полезн. приемчик с Characters все-таки пригодился nilem
nilem, огроменное спасибо - то, что нужно. Лови +.
Есть еще небольшой вопрос - зеленый цвет режет глаза немного, есть ли возможность его немного темнее сделать? Хотя это не принципиально, но было бы неплохо
nilem, огроменное спасибо - то, что нужно. Лови +.
Есть еще небольшой вопрос - зеленый цвет режет глаза немного, есть ли возможность его немного темнее сделать? Хотя это не принципиально, но было бы неплохоZerofox
я не волшебник, я только учусь....учусь....учусь...
nilem, спасибо, я еще пробовал сам разобраться и методом тыка нашел еще такой вариант - вместо vbgreen прописал rgb (0,150,0), сработало! =)) но ваш вариант сейчас тоже изучу, просто знаком крайне поверхностно с операторами vb. Спасибо еще раз за помощь, жаль, 2 раз уже + не дают поставить)
nilem, спасибо, я еще пробовал сам разобраться и методом тыка нашел еще такой вариант - вместо vbgreen прописал rgb (0,150,0), сработало! =)) но ваш вариант сейчас тоже изучу, просто знаком крайне поверхностно с операторами vb. Спасибо еще раз за помощь, жаль, 2 раз уже + не дают поставить)Zerofox
я не волшебник, я только учусь....учусь....учусь...