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

Вход

Регистрация

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

 

= Мир MS Excel/Сравнение значений множество на множество - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение значений множество на множество (Макросы/Sub)
Сравнение значений множество на множество
boxingtmt Дата: Вторник, 18.10.2022, 18:47 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Добрый день!
Прошу помочь с решением в написание макро кода.
Задача в следующем, требуется сравнить значения диапазона Дельта со значением даиапазона КДО и, если значения Дельта окажется больше значения КДО (+) и меньше КДО (-), то ячейка окрашивается в красный цвет, иначе заливка не меняется.
В моем коде диапазон Дельта сравнивается с первой ячейкой КДО. Правильно понимаю, что для сравнения множеств, следует воспользоваться функции offset?
И как это работает?
К сообщению приложен файл: Book1.xlsm(21.8 Kb)
 
Ответить
СообщениеДобрый день!
Прошу помочь с решением в написание макро кода.
Задача в следующем, требуется сравнить значения диапазона Дельта со значением даиапазона КДО и, если значения Дельта окажется больше значения КДО (+) и меньше КДО (-), то ячейка окрашивается в красный цвет, иначе заливка не меняется.
В моем коде диапазон Дельта сравнивается с первой ячейкой КДО. Правильно понимаю, что для сравнения множеств, следует воспользоваться функции offset?
И как это работает?

Автор - boxingtmt
Дата добавления - 18.10.2022 в 18:47
msi2102 Дата: Вторник, 18.10.2022, 19:09 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 246
Репутация: 89 ±
Замечаний: 0% ±

Excel 2007
Я думаю так будет проще для понимания
[vba]
Код
Sub sheet1_loop_1()
    Dim mydate As Date, r As Integer
    mydate = CDate(Range("A4"))
    KDO = Range("L5")
    For r = 5 To 35
        If Abs(Range("F" & r)) > Abs(KDO) Then
            Range("G" & r).Interior.Color = 192
        Else
            Range("G" & r).Interior.Color = 10092543
        End If
    Next r
End Sub
[/vba]

Но если всё-таки хотите с Each, то попробуйте так
[vba]
Код
Sub sheet1_loop()
    Dim mydate As Date
    mydate = CDate(Range("A4"))
    KDO = Range("L5")
    For Each cell In Range("F5:F35")
        If Abs(cell.Value) > Abs(KDO) Then
           cell.Offset(0, 1).Interior.Color = 192
        Else
           cell.Offset(0, 1).Interior.Color = 10092543
        End If
    Next cell
End Sub
[/vba]
Оба макроса закрасят соседние ячейки
К сообщению приложен файл: Book1-2-.xlsm(20.7 Kb)


Сообщение отредактировал msi2102 - Вторник, 18.10.2022, 19:19
 
Ответить
СообщениеЯ думаю так будет проще для понимания
[vba]
Код
Sub sheet1_loop_1()
    Dim mydate As Date, r As Integer
    mydate = CDate(Range("A4"))
    KDO = Range("L5")
    For r = 5 To 35
        If Abs(Range("F" & r)) > Abs(KDO) Then
            Range("G" & r).Interior.Color = 192
        Else
            Range("G" & r).Interior.Color = 10092543
        End If
    Next r
End Sub
[/vba]

Но если всё-таки хотите с Each, то попробуйте так
[vba]
Код
Sub sheet1_loop()
    Dim mydate As Date
    mydate = CDate(Range("A4"))
    KDO = Range("L5")
    For Each cell In Range("F5:F35")
        If Abs(cell.Value) > Abs(KDO) Then
           cell.Offset(0, 1).Interior.Color = 192
        Else
           cell.Offset(0, 1).Interior.Color = 10092543
        End If
    Next cell
End Sub
[/vba]
Оба макроса закрасят соседние ячейки

Автор - msi2102
Дата добавления - 18.10.2022 в 19:09
boxingtmt Дата: Среда, 19.10.2022, 17:03 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Должны раскрашиваться не соседние ячейки, если брать по модулю, а значения Дельта, которые больше КДО.
При написании диапазона КДО, возникает ошибка.
А нужно, чтобы значение Дельта каждой ячейки, сравнивалось со значением каждой ячейки КДО.
 
Ответить
СообщениеДолжны раскрашиваться не соседние ячейки, если брать по модулю, а значения Дельта, которые больше КДО.
При написании диапазона КДО, возникает ошибка.
А нужно, чтобы значение Дельта каждой ячейки, сравнивалось со значением каждой ячейки КДО.

Автор - boxingtmt
Дата добавления - 19.10.2022 в 17:03
Nic70y Дата: Среда, 19.10.2022, 17:21 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 7875
Репутация: 1894 ±
Замечаний: 0% ±

Excel 2010
если КДО не может быть отрицательным:[vba]
Код
KDO = Application.Max(Range("L5:L35"))
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщениеесли КДО не может быть отрицательным:[vba]
Код
KDO = Application.Max(Range("L5:L35"))
[/vba]

Автор - Nic70y
Дата добавления - 19.10.2022 в 17:21
boxingtmt Дата: Среда, 19.10.2022, 18:01 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

KDO = Application.Max(Range("L5:L35"))
Такое пояснение говорит о том, что в диапазоне "L5:L35" будет браться только "Одно" максимальное значение и сравниваться со значением диапазона Дельта.
Это не то.
Код должен выглядить следующим образом:
Ячейка ABS("F5") больше ячейки ABS("L5")
если да то цвет красный
иначе желтый
Ячейка ABS("F6") больше ячейки ABS("L6")
если да то цвет красный
иначе желтый
Ячейка ABS("F7") больше ячейки ABS("L7")
если да то цвет красный
иначе желтый
Но как прописать вкратце, чтобы не расписывать каждую ячейку по отдельности.
 
Ответить
СообщениеKDO = Application.Max(Range("L5:L35"))
Такое пояснение говорит о том, что в диапазоне "L5:L35" будет браться только "Одно" максимальное значение и сравниваться со значением диапазона Дельта.
Это не то.
Код должен выглядить следующим образом:
Ячейка ABS("F5") больше ячейки ABS("L5")
если да то цвет красный
иначе желтый
Ячейка ABS("F6") больше ячейки ABS("L6")
если да то цвет красный
иначе желтый
Ячейка ABS("F7") больше ячейки ABS("L7")
если да то цвет красный
иначе желтый
Но как прописать вкратце, чтобы не расписывать каждую ячейку по отдельности.

Автор - boxingtmt
Дата добавления - 19.10.2022 в 18:01
Nic70y Дата: Четверг, 20.10.2022, 07:33 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 7875
Репутация: 1894 ±
Замечаний: 0% ±

Excel 2010
так бы сразу и сказали[vba]
Код
If Abs(cell.Value) > Abs(cell.Offset(0, 6)) Then
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщениетак бы сразу и сказали[vba]
Код
If Abs(cell.Value) > Abs(cell.Offset(0, 6)) Then
[/vba]

Автор - Nic70y
Дата добавления - 20.10.2022 в 07:33
boxingtmt Дата: Четверг, 20.10.2022, 17:20 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Спасибое большое, очень помогли
 
Ответить
СообщениеСпасибое большое, очень помогли

Автор - boxingtmt
Дата добавления - 20.10.2022 в 17:20
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение значений множество на множество (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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