Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Цвет ячейки из диапазона по четырем условиям - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Цвет ячейки из диапазона по четырем условиям
Shylo Дата: Воскресенье, 23.07.2023, 16:12 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 7 ±
Замечаний: 0% ±

Excel-2007; 2016
Добрый день. Не получается закончить код по четырем, хотя по сути трем, условиям для изменения цвета ячейки из заданого диапазона. Мои эксперементы приводили только к "Тришкиному кафтану" если первое, второе условие описал, то остальные рушаться. Не могу свести все в кучу.
Суть проблемы: имеется столбец с датами которые нужно временно проконтролировать (условно столбец "В") в котором надо закрасить ячейки желтым за 10 дней до сегодняшней даты, после сегодняшней даты в течении 10 дней - ячейка с красной заливкой, а затем снова бесцветная. Помогите пожалуйста завершить код.
Файл с моими потугами прилагаю.
К сообщению приложен файл: datediff_02_na_liste.xls (50.5 Kb)
 
Ответить
СообщениеДобрый день. Не получается закончить код по четырем, хотя по сути трем, условиям для изменения цвета ячейки из заданого диапазона. Мои эксперементы приводили только к "Тришкиному кафтану" если первое, второе условие описал, то остальные рушаться. Не могу свести все в кучу.
Суть проблемы: имеется столбец с датами которые нужно временно проконтролировать (условно столбец "В") в котором надо закрасить ячейки желтым за 10 дней до сегодняшней даты, после сегодняшней даты в течении 10 дней - ячейка с красной заливкой, а затем снова бесцветная. Помогите пожалуйста завершить код.
Файл с моими потугами прилагаю.

Автор - Shylo
Дата добавления - 23.07.2023 в 16:12
i691198 Дата: Воскресенье, 23.07.2023, 16:59 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 324
Репутация: 104 ±
Замечаний: 0% ±

Shylo, А зачем здесь нужен код? Всё легко решается условным форматированием.
 
Ответить
СообщениеShylo, А зачем здесь нужен код? Всё легко решается условным форматированием.

Автор - i691198
Дата добавления - 23.07.2023 в 16:59
Hugo Дата: Воскресенье, 23.07.2023, 17:00 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3661
Репутация: 786 ±
Замечаний: 0% ±

365
Логика:
1. если пусто то бесцветно.
2. Проверяем условия в select case true
за десять дней до СЕГОДНЯ() красим в желт
после СЕГОДНЯ()+10 дней, красим в красный
после СЕГОДНЯ()+11 дней, опять бесцветно
3. остался вопрос что делать с сегодня? - по коду вижу.
И действительно - УФ ведь решает.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Воскресенье, 23.07.2023, 17:14
 
Ответить
СообщениеЛогика:
1. если пусто то бесцветно.
2. Проверяем условия в select case true
за десять дней до СЕГОДНЯ() красим в желт
после СЕГОДНЯ()+10 дней, красим в красный
после СЕГОДНЯ()+11 дней, опять бесцветно
3. остался вопрос что делать с сегодня? - по коду вижу.
И действительно - УФ ведь решает.

Автор - Hugo
Дата добавления - 23.07.2023 в 17:00
Shylo Дата: Воскресенье, 23.07.2023, 18:32 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 7 ±
Замечаний: 0% ±

Excel-2007; 2016
Полностью согласен, что УФ проще и быстрее, но у меня такие условия (потому и писал в ветку VBA). Hugo, через Select case тоже пытался но знаний маловато, хотя у Гарнаева и расписано все по полочкам. У меня все время не клеится свести в кучу простые проверки. Оду сделал, вторую. Третью влепил, какая то из двух первых убежала.
 
Ответить
СообщениеПолностью согласен, что УФ проще и быстрее, но у меня такие условия (потому и писал в ветку VBA). Hugo, через Select case тоже пытался но знаний маловато, хотя у Гарнаева и расписано все по полочкам. У меня все время не клеится свести в кучу простые проверки. Оду сделал, вторую. Третью влепил, какая то из двух первых убежала.

Автор - Shylo
Дата добавления - 23.07.2023 в 18:32
Hugo Дата: Воскресенье, 23.07.2023, 19:28 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3661
Репутация: 786 ±
Замечаний: 0% ±

365
Может так, если правильно условия понял:
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B2:B10")) Is Nothing Then

Select Case True
    Case Target.Value = "": Target.Interior.ColorIndex = xlNone
    Case Target.Value < (Fix(Now()) - 10): Target.ColorIndex = xlNone
    Case Target.Value <= Fix(Now()): Target.Interior.Color = vbYellow
    Case Target.Value > (Fix(Now()) + 10): Target.Interior.ColorIndex = xlNone
    Case Target.Value <= (Fix(Now()) + 10): Target.Interior.Color = vbRed
End Select
End If

End Sub

Или нужно на изменение любой ячейки на листе просматривать  эти ячейки и перекрашивать все даты по отношению к текущей дате?

[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеМожет так, если правильно условия понял:
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B2:B10")) Is Nothing Then

Select Case True
    Case Target.Value = "": Target.Interior.ColorIndex = xlNone
    Case Target.Value < (Fix(Now()) - 10): Target.ColorIndex = xlNone
    Case Target.Value <= Fix(Now()): Target.Interior.Color = vbYellow
    Case Target.Value > (Fix(Now()) + 10): Target.Interior.ColorIndex = xlNone
    Case Target.Value <= (Fix(Now()) + 10): Target.Interior.Color = vbRed
End Select
End If

End Sub

Или нужно на изменение любой ячейки на листе просматривать  эти ячейки и перекрашивать все даты по отношению к текущей дате?

[/vba]

Автор - Hugo
Дата добавления - 23.07.2023 в 19:28
Shylo Дата: Воскресенье, 23.07.2023, 20:43 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 7 ±
Замечаний: 0% ±

Excel-2007; 2016
Hugo, проверил, при внесении даты 12.07.23 выскакивает ошибка "438" - объект не поддерживает свойсво или метод - во второй части второго Case.
[vba]
Код
Case Target.Value < (Fix(Now()) - 10): Target.ColorIndex = xlNone
[/vba]
Немогли бы вы помочь с тем кодом который начал я, там для меня более понятный механизм, чем с Target-ом.


Сообщение отредактировал Shylo - Воскресенье, 23.07.2023, 20:44
 
Ответить
СообщениеHugo, проверил, при внесении даты 12.07.23 выскакивает ошибка "438" - объект не поддерживает свойсво или метод - во второй части второго Case.
[vba]
Код
Case Target.Value < (Fix(Now()) - 10): Target.ColorIndex = xlNone
[/vba]
Немогли бы вы помочь с тем кодом который начал я, там для меня более понятный механизм, чем с Target-ом.

Автор - Shylo
Дата добавления - 23.07.2023 в 20:43
Hugo Дата: Воскресенье, 23.07.2023, 21:01 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3661
Репутация: 786 ±
Замечаний: 0% ±

365
Если внести дату - всё должно быть ОК.
Если текст - смотря как Эксель этот текст распознает.
Я лично вносил 12/07 энтер
Проверил - ошибка в коде, извиняюсь:
[vba]
Код
Case Target.Value < (Fix(Now()) - 10): Target.Interior.ColorIndex = xlNone
[/vba]
такая строка должна быть.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Воскресенье, 23.07.2023, 21:03
 
Ответить
СообщениеЕсли внести дату - всё должно быть ОК.
Если текст - смотря как Эксель этот текст распознает.
Я лично вносил 12/07 энтер
Проверил - ошибка в коде, извиняюсь:
[vba]
Код
Case Target.Value < (Fix(Now()) - 10): Target.Interior.ColorIndex = xlNone
[/vba]
такая строка должна быть.

Автор - Hugo
Дата добавления - 23.07.2023 в 21:01
Shylo Дата: Воскресенье, 23.07.2023, 21:32 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 7 ±
Замечаний: 0% ±

Excel-2007; 2016
Да , работает, и я проглядел .Interior. А с моим вариантом через цикл For Each MyCell_2 In MyRange_2 поможете?
 
Ответить
СообщениеДа , работает, и я проглядел .Interior. А с моим вариантом через цикл For Each MyCell_2 In MyRange_2 поможете?

Автор - Shylo
Дата добавления - 23.07.2023 в 21:32
Hugo Дата: Воскресенье, 23.07.2023, 21:35 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3661
Репутация: 786 ±
Замечаний: 0% ±

365
Так объясните задачу нормально, что там их кода нужно понять? ))
Можно ведь просто переименовать мой код и прогнать в цикле
[vba]
Код
For Each Target In MyRange_2
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Воскресенье, 23.07.2023, 21:37
 
Ответить
СообщениеТак объясните задачу нормально, что там их кода нужно понять? ))
Можно ведь просто переименовать мой код и прогнать в цикле
[vba]
Код
For Each Target In MyRange_2
[/vba]

Автор - Hugo
Дата добавления - 23.07.2023 в 21:35
Shylo Дата: Воскресенье, 23.07.2023, 21:50 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 7 ±
Замечаний: 0% ±

Excel-2007; 2016
Я себе представлял реализацию на разности и сумме (DateDiff-10 дней и DateAdd+10 дней) от текущей даты и исходя из этого прописать вышеописанные условия. Извините, но опыта маловато, может и выбрал не самый лучший вариант.
 
Ответить
СообщениеЯ себе представлял реализацию на разности и сумме (DateDiff-10 дней и DateAdd+10 дней) от текущей даты и исходя из этого прописать вышеописанные условия. Извините, но опыта маловато, может и выбрал не самый лучший вариант.

Автор - Shylo
Дата добавления - 23.07.2023 в 21:50
Hugo Дата: Воскресенье, 23.07.2023, 22:04 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3661
Репутация: 786 ±
Замечаний: 0% ±

365
Я так и сделал - смотрит на вносимое значение и красит по состоянию на момент внесения.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЯ так и сделал - смотрит на вносимое значение и красит по состоянию на момент внесения.

Автор - Hugo
Дата добавления - 23.07.2023 в 22:04
Shylo Дата: Воскресенье, 23.07.2023, 22:17 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 7 ±
Замечаний: 0% ±

Excel-2007; 2016
Если не затруднит, объясните этот Target, мне не попадалось ни в одной книжке ого простое (понятное описание), хотя его часто используют. И вы использовали Now которая возвращает и дату и время, а почему не просто Date?


Сообщение отредактировал Shylo - Воскресенье, 23.07.2023, 22:19
 
Ответить
СообщениеЕсли не затруднит, объясните этот Target, мне не попадалось ни в одной книжке ого простое (понятное описание), хотя его часто используют. И вы использовали Now которая возвращает и дату и время, а почему не просто Date?

Автор - Shylo
Дата добавления - 23.07.2023 в 22:17
Hugo Дата: Воскресенье, 23.07.2023, 22:24 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3661
Репутация: 786 ±
Замечаний: 0% ±

365
Target - это переменная, можно другое название поставить, не суть как назвать.
Это будет означать тот диапазон листа, который будет обрабатываться процедурой события.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеTarget - это переменная, можно другое название поставить, не суть как назвать.
Это будет означать тот диапазон листа, который будет обрабатываться процедурой события.

Автор - Hugo
Дата добавления - 23.07.2023 в 22:24
Shylo Дата: Воскресенье, 23.07.2023, 22:30 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 7 ±
Замечаний: 0% ±

Excel-2007; 2016
Т.е она отслеживает изменение в установленном диапазоне (В2:В10) и возвращет адрес ачейки в котором произошло изменение?


Сообщение отредактировал Shylo - Воскресенье, 23.07.2023, 22:31
 
Ответить
СообщениеТ.е она отслеживает изменение в установленном диапазоне (В2:В10) и возвращет адрес ачейки в котором произошло изменение?

Автор - Shylo
Дата добавления - 23.07.2023 в 22:30
Hugo Дата: Воскресенье, 23.07.2023, 22:35 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3661
Репутация: 786 ±
Замечаний: 0% ±

365
Да.
Диапазон устанавливаем чтоб на лишнее не реагировать.
А с переменной можно хоть так обойтись:
[vba]
Код

Private Sub Worksheet_Change(ByVal ццц As Range)
With ццц
If .Cells.Count > 1 Then Exit Sub
If Not Intersect(ццц, Range("B2:B10")) Is Nothing Then

Select Case True
    Case .Value = "": .Interior.ColorIndex = xlNone
    Case .Value < (Fix(Now()) - 10): .Interior.ColorIndex = xlNone
    Case .Value <= Fix(Now()): .Interior.Color = vbYellow
    Case .Value > (Fix(Now()) + 10): .Interior.ColorIndex = xlNone
    Case .Value <= (Fix(Now()) + 10): .Interior.Color = vbRed
End Select
End If
End With
End Sub
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеДа.
Диапазон устанавливаем чтоб на лишнее не реагировать.
А с переменной можно хоть так обойтись:
[vba]
Код

Private Sub Worksheet_Change(ByVal ццц As Range)
With ццц
If .Cells.Count > 1 Then Exit Sub
If Not Intersect(ццц, Range("B2:B10")) Is Nothing Then

Select Case True
    Case .Value = "": .Interior.ColorIndex = xlNone
    Case .Value < (Fix(Now()) - 10): .Interior.ColorIndex = xlNone
    Case .Value <= Fix(Now()): .Interior.Color = vbYellow
    Case .Value > (Fix(Now()) + 10): .Interior.ColorIndex = xlNone
    Case .Value <= (Fix(Now()) + 10): .Interior.Color = vbRed
End Select
End If
End With
End Sub
[/vba]

Автор - Hugo
Дата добавления - 23.07.2023 в 22:35
Shylo Дата: Воскресенье, 23.07.2023, 22:48 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 7 ±
Замечаний: 0% ±

Excel-2007; 2016
С этим понял, потренируюсь. А это - (Fix(Now())
 
Ответить
СообщениеС этим понял, потренируюсь. А это - (Fix(Now())

Автор - Shylo
Дата добавления - 23.07.2023 в 22:48
Hugo Дата: Воскресенье, 23.07.2023, 22:53 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3661
Репутация: 786 ±
Замечаний: 0% ±

365
Потому что Now() - это дата + время. А нужна только дата, ведь например есть разница > (Fix(Now()) + 10) или > (Now() + 10) что уже не сегодня +10, а сегодня +10 + 22:53
Да даже + 1 секунда это уже выпадет из вилки в 10 дней.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Воскресенье, 23.07.2023, 22:55
 
Ответить
СообщениеПотому что Now() - это дата + время. А нужна только дата, ведь например есть разница > (Fix(Now()) + 10) или > (Now() + 10) что уже не сегодня +10, а сегодня +10 + 22:53
Да даже + 1 секунда это уже выпадет из вилки в 10 дней.

Автор - Hugo
Дата добавления - 23.07.2023 в 22:53
Shylo Дата: Понедельник, 24.07.2023, 08:12 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 7 ±
Замечаний: 0% ±

Excel-2007; 2016
Hugo, большое спасибо за помощь и науку.
 
Ответить
СообщениеHugo, большое спасибо за помощь и науку.

Автор - Shylo
Дата добавления - 24.07.2023 в 08:12
Апострофф Дата: Понедельник, 24.07.2023, 12:42 | Сообщение № 19
Группа: Проверенные
Ранг: Обитатель
Сообщений: 457
Репутация: 126 ±
Замечаний: 0% ±

Excel 1997
Fix(Now())

А зачем скобки после Now?
И зачем вообще здесь FIX(NOW())?
Ведь есть готовая функция Date.
 
Ответить
Сообщение
Fix(Now())

А зачем скобки после Now?
И зачем вообще здесь FIX(NOW())?
Ведь есть готовая функция Date.

Автор - Апострофф
Дата добавления - 24.07.2023 в 12:42
Hugo Дата: Понедельник, 24.07.2023, 13:05 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3661
Репутация: 786 ±
Замечаний: 0% ±

365
Согласен, тормознул, сбило что-то наверное... Можно упростить.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеСогласен, тормознул, сбило что-то наверное... Можно упростить.

Автор - Hugo
Дата добавления - 24.07.2023 в 13:05
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!