Друзья, доброго дня. Необходимо проверить соответствие значения числа в ячейке разным диапазонам и на основе этого окрасить ячейку в соответствующий цвет. Например, имеется несколько ячеек (допустим А1:А14), каждая содержит в себе число. Каждую из этих ячеек нужно сравнить с несколькими диапазонами, что бы понять, в каком из диапазонов находится значение из данной ячейки. В соответствии с диапазоном, ячейка должна быть окрашена в определенный цвет. Я пытаюсь выстрадать подобие heat mapping, только под свои цели). Умом понимаю, что это должно быть на основе цикла if-else, но с атрибутами VBA у меня пока проблемы. Более подробно задача описана в приложенном файле, надеюсь там все понятно. Спасибо заранее)
Друзья, доброго дня. Необходимо проверить соответствие значения числа в ячейке разным диапазонам и на основе этого окрасить ячейку в соответствующий цвет. Например, имеется несколько ячеек (допустим А1:А14), каждая содержит в себе число. Каждую из этих ячеек нужно сравнить с несколькими диапазонами, что бы понять, в каком из диапазонов находится значение из данной ячейки. В соответствии с диапазоном, ячейка должна быть окрашена в определенный цвет. Я пытаюсь выстрадать подобие heat mapping, только под свои цели). Умом понимаю, что это должно быть на основе цикла if-else, но с атрибутами VBA у меня пока проблемы. Более подробно задача описана в приложенном файле, надеюсь там все понятно. Спасибо заранее)fedoss18
andreimurysev, есть еще аналогичная задача, только с дельтами (разница между входным контролем и результатом после исследования) и проблема в том, что значения дельт должны быть максимально приближены к нулю. Как впихнуть это в условное форматирование я не знаю, поэтому и полез в макросы, как в более гибкий инструмент. Ну и плюс спортивный интерес)
andreimurysev, есть еще аналогичная задача, только с дельтами (разница между входным контролем и результатом после исследования) и проблема в том, что значения дельт должны быть максимально приближены к нулю. Как впихнуть это в условное форматирование я не знаю, поэтому и полез в макросы, как в более гибкий инструмент. Ну и плюс спортивный интерес)fedoss18
Сообщение отредактировал fedoss18 - Среда, 16.11.2022, 23:17
fedoss18, постарался сделать максимально понятно, как с
Код
=ЕСЛИ(И())
[vba]
Код
Sub u_700() Application.ScreenUpdating = False a = Cells(Rows.Count, "a").End(xlUp).Row x_1 = Application.Min(Range("a1:a" & a)) x_2 = x_1 + 0.1 x_3 = x_1 + 0.2 x_4 = x_1 + 0.3 x_5 = x_1 + 0.4 x_6 = x_1 + 0.8 x_7 = x_1 + 1.5 x_8 = x_1 + 2.5 d = "e6" For Each c In Range("a1:a" & a) If c >= x_1 And c <= x_2 Then e = Range(d).Offset(0, 0).Interior.Color If c > x_2 And c <= x_3 Then e = Range(d).Offset(1, 0).Interior.Color If c > x_3 And c <= x_4 Then e = Range(d).Offset(2, 0).Interior.Color If c > x_4 And c <= x_5 Then e = Range(d).Offset(3, 0).Interior.Color If c > x_5 And c <= x_6 Then e = Range(d).Offset(4, 0).Interior.Color If c > x_6 And c <= x_7 Then e = Range(d).Offset(5, 0).Interior.Color If c > x_7 And c <= x_8 Then e = Range(d).Offset(6, 0).Interior.Color If c > x_8 Then e = Range(d).Offset(7, 0).Interior.Color c.Interior.Color = e Next Application.ScreenUpdating = True End Sub
[/vba]
fedoss18, постарался сделать максимально понятно, как с
Код
=ЕСЛИ(И())
[vba]
Код
Sub u_700() Application.ScreenUpdating = False a = Cells(Rows.Count, "a").End(xlUp).Row x_1 = Application.Min(Range("a1:a" & a)) x_2 = x_1 + 0.1 x_3 = x_1 + 0.2 x_4 = x_1 + 0.3 x_5 = x_1 + 0.4 x_6 = x_1 + 0.8 x_7 = x_1 + 1.5 x_8 = x_1 + 2.5 d = "e6" For Each c In Range("a1:a" & a) If c >= x_1 And c <= x_2 Then e = Range(d).Offset(0, 0).Interior.Color If c > x_2 And c <= x_3 Then e = Range(d).Offset(1, 0).Interior.Color If c > x_3 And c <= x_4 Then e = Range(d).Offset(2, 0).Interior.Color If c > x_4 And c <= x_5 Then e = Range(d).Offset(3, 0).Interior.Color If c > x_5 And c <= x_6 Then e = Range(d).Offset(4, 0).Interior.Color If c > x_6 And c <= x_7 Then e = Range(d).Offset(5, 0).Interior.Color If c > x_7 And c <= x_8 Then e = Range(d).Offset(6, 0).Interior.Color If c > x_8 Then e = Range(d).Offset(7, 0).Interior.Color c.Interior.Color = e Next Application.ScreenUpdating = True End Sub
Nic70y, отлично, спасибо, это именно то, что нужно и как я себе это представлял. Единственное, не вижу в теле программы, где формируется кнопка, но подозреваю, что Application.ScreenUpdating каким то образом за это отвечает (единственный кусок кода, который я не понял). Так же я попробую модифицировать прогу под дельты, если не получится - напишу дополнительно. Еще раз спасибо)
Nic70y, отлично, спасибо, это именно то, что нужно и как я себе это представлял. Единственное, не вижу в теле программы, где формируется кнопка, но подозреваю, что Application.ScreenUpdating каким то образом за это отвечает (единственный кусок кода, который я не понял). Так же я попробую модифицировать прогу под дельты, если не получится - напишу дополнительно. Еще раз спасибо)fedoss18
это обновление экрана - при отключении (false) вы не будете видеть мерцание экрана, когда макрос выполняет свои действия и соот. работает быстрее.Nic70y
Попробовал допилить прогу под свои цели и столкнулся с проблемой - неправильная обработка отрицательных значений. Мне нужно, что бы операции производились не с абсолютным значением числа в ячейке, а с его модулем. Я пытался в функцию ABS() - не вышло, костыль с возведением в квадрат и взятием квадратного корня тоже не помогает. Ума не приложу, в чем может быть дело.
Попробовал допилить прогу под свои цели и столкнулся с проблемой - неправильная обработка отрицательных значений. Мне нужно, что бы операции производились не с абсолютным значением числа в ячейке, а с его модулем. Я пытался в функцию ABS() - не вышло, костыль с возведением в квадрат и взятием квадратного корня тоже не помогает. Ума не приложу, в чем может быть дело.fedoss18
Еще вопрос) В выделенном диапазоне необходимо найти медиану, потом из каждого значения вычесть это медиану, найти модуль полученного значения и прогнать его через цикл if. Примерно понимаю, в какой строке проблема, но гугл не подсказывает, как сделать правильно.
Еще вопрос) В выделенном диапазоне необходимо найти медиану, потом из каждого значения вычесть это медиану, найти модуль полученного значения и прогнать его через цикл if. Примерно понимаю, в какой строке проблема, но гугл не подсказывает, как сделать правильно.fedoss18