Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Microsoft Office и VBA > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 06.09.2010, 17:58   #1
Михаил2261
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 37
По умолчанию условия сравнение

Здравствуйте
Подскажите как правильно записать условия сравнения для строки
из 5 чисел
А В С D E
3 8 4 18 12
Если А < B , C < B, D > C, E < D удалить строку или отметить другим цветом
спасибо
Михаил2261 вне форума Ответить с цитированием
Старый 06.09.2010, 21:33   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Код:
if ( (Cells(1,1).Value<Cells(1,2).Value) And (...)) Then Rows("1:1").Delete
В ... пишете нужные условия аналогично первому, где Cells(i,j) - ячейка с i строкой и j столбцом
motorway вне форума Ответить с цитированием
Старый 06.09.2010, 22:13   #3
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,256
По умолчанию

Код:
Sub PaintRows()
  Dim r As Long, rg
  For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If (Cells(r, 1) < Cells(r, 2)) _
    And (Cells(r, 3) < Cells(r, 2)) _
    And (Cells(r, 4) > Cells(r, 3)) _
    And (Cells(r, 5) < Cells(r, 4)) Then
      If IsEmpty(rg) Then Set rg = Rows(r) Else Set rg = Application.Union(rg, Rows(r))
    End If
  Next
  If Not IsEmpty(rg) Then rg.Interior.Color = 55555
End Sub
41001804815208 - Яндекс-деньги благодарности за удачные советы и решения можно отправлять прямо сюда)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.09.2010, 07:52   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,164
По умолчанию

С позволения уважаемого IgorGO, хочу отметить, что при проверке нескольких (больше 2-х) условий лучше не использовать оператор And, т.к. в этом случае Excel проверяет все условия (присваивает True или False), независимо от того, совпали они или нет. Затем между ними выполняет And. Т.е. если 1-е условие не совпало, то нет смысла проверять остальные. Лучше воспользоваться вложенными If. Код чуть длиннее, но время выполнения процедуры будет меньше. Например, так:
Код:
Sub PaintRows()
    Dim r As Long, rg As Range: Application.ScreenUpdating = False
    For r = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(r, 1) < Cells(r, 2) Then
            If Cells(r, 3) < Cells(r, 2) Then
                If Cells(r, 4) > Cells(r, 3) Then
                    If Cells(r, 5) < Cells(r, 4) Then
                        If rg Is Nothing Then Set rg = Rows(r) Else Set rg = Union(rg, Rows(r))
    End If: End If: End If: End If: Next
    If Not rg Is Nothing Then rg.Interior.ColorIndex = 6
    'If Not rg Is Nothing Then rg.EntireRow.Delete
End Sub
Закомментированная строчка кода - это на случай, если нужно не выделять ячейки, а удалять строки.
Также, обратите внимание:
1. Возможно, что Вам понадобится проверка значений ячеек как на пустоту, так и на тип данных (числовое значение).
2. Предлагаемый макрос просматривает столбцы "A:E" с 1-й строки до последней заполненной в столбце "A". Достаточно ли Вам этого условия?
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 07.09.2010 в 08:26. Причина: Добавлено
SAS888 вне форума Ответить с цитированием
Старый 07.09.2010, 10:21   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте уважаемые господа.
по поводу "..лучше не использовать оператор And..", согласен и потому предлагаю использовать подобный варианты ветвления:
Код:
        If Cells(r, 1) > Cells(r, 2) Then
        ElseIf Cells(r, 3) > Cells(r, 2) Then
        ElseIf Cells(r, 4) < Cells(r, 3) Then
        ElseIf Cells(r, 5) > Cells(r, 4) Then
        ElseIf rg Is Nothing Then
            Set rg = Rows(r)
        Else
            Set rg = Union(rg, Rows(r))
        End If
но с утверждением "..проверяет все условия (присваивает True или False), независимо от того, совпали они или нет.." согласиться не могу, проблема только в осмыслении результатов выражения, а они никогда не противоречат логике.

Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 07.09.2010, 10:35   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,164
По умолчанию

Цитата:
...но с утверждением ... согласиться не могу...
Почему? Оператор And осуществляет логическое перемножение значений. Для этого, по меньшей мере, эти значения должны быть в наличии. Т.е. Excel (в нашем случае) получает для каждого сравнения логический результат (True или False), затем выполняет саму операцию And (логическое перемножение всех Boolean значений).
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 07.09.2010, 11:45   #7
Михаил2261
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 37
По умолчанию

спасибо большое
Михаил2261 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условия DartDayring Assembler - Ассемблер 1 02.04.2010 10:08
Условия и их выполнение kta87 Помощь студентам 8 28.02.2010 16:37
условия в ComboBox Dotha Компоненты Delphi 4 26.12.2009 12:20
условия( if ) на запросе mavlon_m SQL, базы данных 6 20.10.2009 15:38
условия glupayastudentka Помощь студентам 7 25.06.2009 09:43