Страницы: 1
RSS
Окраска ячейки в другой цвет на основании цвета другой ячейки, vba, условное форматирование
 
Всем привет, столкнулся с проблемой при условном форматировании.

В общем суть следующая. Есть таблица и нужно проводить учет времени.

В колонке D1 вписываются специальные коды, они окрашиваются в цвета с помощью условного форматирования.
В колонку S записываются все те же коды, а колонка U окрашивается в такие же цвета как эти коды окрашены в колонке D1.
В колонке P записывается время, потраченное на выполнение задачи по коду из колонки D.
Колонка T сумирует все из колонки P в соответствии с цветом.

Минус всей этой системы в том, что цвета в колонке P окрашиваются вручную. Цель - сделать так, что бы ячейки в колонке P окрашивались в такой же цвет как они окрашены в колонке D. Т.е по сути нужно что бы выполнялось условие: Если D1 с каким то цветом >> P1 заливается этим же цветом.
Понимаю что формулами excel такого не сделать, нужно задействовать vba (как с суммированием ячеек по цвету) но не смог найти готового решения. Может кто встречал такое?  
 
А теперь небольшой пример в Excel прикрепите
 
vikttur, пример в прикреплении  
 
Можно закрашивать столбец "P" с помощью УФ. Я сделал пример для слов "GAS" и "SYQ".
 
Тут говориться, что нельзя на основании формулы передать цвет ячейке.
https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=39296
Используйте УФ или VBA. Через VBA это сделать - минутное дело.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Код VBA специально подогнанный для Вас:
Код
Sub Help()
i = 1
Do While ThisWorkbook.Sheets("Лист1").Cells(i, 4) <> ""
         ThisWorkbook.Sheets("Лист1").Cells(i, 15).Interior.Color = ThisWorkbook.Sheets("Ëèñò1").Cells(i, 4).Interior.Color
i = i + 1
Loop
End Sub

Только поменяйте имя листа
Засуньте в тело модуля и выполните.
Всё, радуйстесь жизни, номера столбцов согласно буквам я поставил.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
ProFessor, здравствуйте, спасибо за помощь но не работает :)

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

Код добавил, но не окрашивает 15 колонку.



Upd. Нашел проблему, колонка P является 16, так что поменял 15 на 16 и почти все ок. Окрашивается но только ячейка в первой строке, дальше не срабатывает.
Upd2. Это тоже понял. К сожалению это работает только в том случае, если ячейки красятся вручную, а не через УФ. И работает это только если каждая из ячеек перекрашена, если хотя бы она пропущена - функция не сработает.  
Изменено: MacLeo - 12.04.2018 17:01:18
 
MacLeo, в посте 4 есть решение.
 
Karataev, к сожалению это решение мне не подходит. Со столбца D должен браться именно цвет, а не вписаный код. Каждый раз там будут разные коды, потому это и не вариант.  
 
MacLeo, сейчас в столбце "P" точно такой же цвет, как в столбце "D", что решает Вашу задачу. Или представьте файл-пример, когда предложенный мной способ не подходит.
 
Цитата
MacLeo написал: потому это и не вариант
off Не проясните ли - в чем ЦЕЛЕСООБРАЗНОСТЬ или хотя бы ИДЕЯ сего калейдоскопа? В примере - семь записей/строк. А если будет 30, 300, 3000, 30000?!.. ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
MacLeo, в столбце "D" Вы планируете использовать условное форматирование? Или Вы хотите изменять цвет в столбце "D" с помощью макроса?
Я сделал решение при условии, что в столбце "D" будет делаться закраска с помощью УФ.
 
Karataev,да, в D используется УФ. Но при добавлении и выполнении макроса ячейки в колонке P не перекрашиваются автоматически.

Срабатывает это только с первой ячейкой (заголовком) которая окрашена вручную при помощи заливки серой.

Если окрасить следующую ячейку тоже вручную - соответствующая ей в колонке P уже окрасится в цвет, которым там была залита ячейка. В прикреплении пример. Можете сами глянуть. Смотрите на ячейку P1 до и после выполнения макроса.

Цитата
Z написал:
off Не проясните ли - в чем ЦЕЛЕСООБРАЗНОСТЬ или хотя бы ИДЕЯ сего калейдоскопа? В примере - семь записей/строк. А если будет 30, 300, 3000, 30000?!..
За день там будет максимум до 30 штук, больше не нужно.
Читал что УФ прилично нагружает excel и могут быть проблемы с адекватной работоспособностью всего этого. Но увы, делал так, как умею.
В УФ будет задан список кодов и цвет для них, проверка будет по колонке D. Что бы дальше нормально обсчитывать время (с помощью формулы суммирования по цвету) нужно что бы затраченное время в колонке P было закрашено в такой же цвет как и код который ему соответствует в колонке D.

Колонку D сделать через УФ не получится потому, что в колонке P каждый день будут разные коды (но из того списка что был задан ранее) и размещаться они могут каждый раз в разных ячейках, так как работа по этим кодам может приходить в разное время и, соответственно, записи в файле будут появлятся в разное время.  
 
MacLeo, решение в посте 4 работает при этих условиях:
1) окраска в столбце "D" происходит с помощью УФ
2) в одной строке, в столбце "D" и "P" одинаковый цвет

Если у Вас эти два условия и не работает пример из поста 4, то поясните, что не работает.
 
Karataev,Я же сказал, что это способ мне не подходит, и в посте выше написал почему.
Цитата
MacLeo написал:
Колонку D сделать через УФ не получится потому, что в колонке P каждый день будут разные коды (но из того списка что был задан ранее) и размещаться они могут каждый раз в разных ячейках, так как работа по этим кодам может приходить в разное время и, соответственно, записи в файле будут появлятся в разное время.  
 
У Вас нестыковка. Цитата из первого поста:
Цитата
MacLeo написал:
В колонке D1 вписываются специальные коды, они окрашиваются в цвета с помощью условного форматирования.
Цель - сделать так, что бы ячейки в колонке P окрашивались в такой же цвет как они окрашены в колонке D. Т.е по сути нужно что бы выполнялось условие: Если D1 с каким то цветом >> P1 заливается этим же цветом.
Вам наверное правильнее заново задать вопрос, потому что сейчас нестыковка в Ваших постах.
Изменено: Karataev - 13.04.2018 11:22:03
 
Karataev, В посте все написано правильно. Причем в кратком описании темы указано что мне нужно решение именно с помщью VBA. ProFessor его предоставил, но, к сожалению работает оно не совсем корректно.

Давайте перестанем наполнять тему ненужными постами.  
 
MacLeo, если задачу можно сделать с помощью УФ и этого будет достаточно, то зачем делать макросы? К тому же я написал решение, если читать Ваш первый пост.
 
Karataev, но Вы в упор отказываетесь читать все остальные посты. Я ведь четко написал что вариант с УФ не подходит и описал почему. Почему Вам так тяжело это принять?

Пожалуйста, перестаньте фудлить.  
Изменено: MacLeo - 13.04.2018 11:31:31
 
Цитата
MacLeo написал: Пожалуйста, перестаньте
OFF MacLeo, поубавить прыти, для начала, и ,с учетом правил, не откочевать ли вам с вашей хотелкой в раздел "Работа" - там заказчик всегда прав и со 100- процентной предоплатой может качать права во всю... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Только под простенький вариант УФ в столбце D. И то один цвет выдает ошибочно, т.к. есть "LOS" и "LOS0".
Тестировалось на Excel 2007. С 2010 проверка цвета от УФ стала проще.
В модуль листа:
Код
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
ReColor
Application.EnableEvents = True
End Sub
В обычный модуль:
Код
Sub ReColor()
Dim aa As Range, a&, b&
For Each aa In Sheets(1).Range("D2:D" & Sheets(1).UsedRange.Rows.Count)
  If aa.FormatConditions.Count > 0 And Len(aa) > 0 Then
    For b = aa.FormatConditions.Count To 1 Step -1
      If InStr(1, aa.FormatConditions.Item(b).Formula1, aa, 1) > 0 Then
        a = aa.FormatConditions.Item(b).Interior.Color
        aa.Offset(, 12).Interior.Color = a
      End If
    Next
  Else: aa.Offset(, 12).Interior.Color = xlNone
  End If
Next
End Sub
 
Anchoret, супер, спасибо огромнейшое.  
Страницы: 1
Наверх