Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2010, 19:43   #1
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию Проверить тридцать одну ячейку, если меньше нуля.

Здравствуйте.
Необходимо проверить тридцать одну ячейку на меше нуля, если хоть в одной ячейки меньше нуля.
Создаю условие по нахождению нужной ячейки.
If Sheets("Отчет").Cells(i, 27).Text = UserForm4.ComboBox1.Text Then 'Условие по совпадению текстовых
Затем от найденной ячейки
Cells(i, 27)
Переходим по строке в столбец 18 и создаем переменную
d = Sheets("Отчет").Cells(i, 18)
Данная переменная обозначает от Cells(i, 18) до 31
For d = Sheets("Отчет").Cells(i, 18) To 31 'На основание условия выше переменная d будет считаться начальной ячейкой отсчета
Затем создаем условие на проверку тридцать одной ячейки
If d < 0 Then 'Проверяются все тридцать одна ячейка. Если хоть одно значение меньше 0.
Что то не проверяется…
Код:
Sub Test()
    Dim i As Integer
    For i = 1 To 450
        If Sheets("Отчет").Cells(i, 27).Text = UserForm4.ComboBox1.Text Then 'Условие по совпадению текстовых значений.
            Dim d As Integer
            For d = Sheets("Отчет").Cells(i, 18) To 31 'На основание условия выше переменная d будет считаться начальной ячейкой отсчета 
                If d < 0 Then 'Проверяются все тридцать одна ячейка. Если хоть одно значение меньше 0.
                    Sheets("Отчет").Cells(i, 30).Resize(31).Value = CSng(UserForm4.ComboBox2.Text)
                    MsgBox "...", 64, "Информационное сообщение"
                End If
            Next
        End If
    Next
End Sub
segail вне форума Ответить с цитированием
Старый 28.09.2010, 19:48   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Что-то не пойму, зачем здесь вложенный цикл. И что конкретно не получается? Проверить, большее ли 0 в ячейке число?
motorway вне форума Ответить с цитированием
Старый 28.09.2010, 19:54   #3
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
Что-то не пойму, зачем здесь вложенный цикл. И что конкретно не получается? Проверить, большее ли 0 в ячейке число?
Если от Cells(i, 18) до тридцать одной ячейки в данном диапазоне будет хоть одно значение меньше нуля..
segail вне форума Ответить с цитированием
Старый 28.09.2010, 20:15   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Если от Cells(i, 18) до тридцать одной ячейки в данном диапазоне будет хоть одно значение меньше нуля..
1. в диапазоне Cells(i, 18) - одна ячейка
2. "от Cells(i, 18) до тридцать одной ячейки" - в какую сторну отсчитывавать от Cells(i, 18)?
3. саму Cells(i, 18) проверять?
4. и наконец, "будет хоть одно значение меньше нуля.." - то что? делать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.09.2010, 20:19   #5
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
1. в диапазоне Cells(i, 18) - одна ячейка
2. "от Cells(i, 18) до тридцать одной ячейки" - в какую сторну отсчитывавать от Cells(i, 18)?
3. саму Cells(i, 18) проверять?
4. и наконец, "будет хоть одно значение меньше нуля.." - то что? делать
Можно так но.
При данном условие проверяется одна ячейка.
Sheets("Отчет").Cells(i, 18).Value < 0Необходимо проверить тридцать одну от данной ячейки. Cells(i, 18).Value включительно и 30 в низ.
Код:
Sub Test()
    Dim i As Integer
    For i = 1 To 450
        If Sheets("Отчет").Cells(i, 27).Text = UserForm4.ComboBox1.Text Then 'Условие по совпадению текстовых значений.
            If Sheets("Отчет").Cells(i, 18).Value < 0 Then 'Проверяются все тридцать одна ячейка. Если хоть одно значение меньше 0.
                Sheets("Отчет").Cells(i, 30).Resize(31).Value = CSng(UserForm4.ComboBox2.Text)
                MsgBox "...", 64, "Информационное сообщение"
            End If
        End If
    Next
End Sub
segail вне форума Ответить с цитированием
Старый 28.09.2010, 20:31   #6
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Код:
4. и наконец, "будет хоть одно значение меньше нуля.." - то что? делать
Выполнить оператор
Код:
                Sheets("Отчет").Cells(i, 30).Resize(31).Value = CSng(UserForm4.ComboBox2.Text)
                MsgBox "...", 64, "Информационное сообщение"
segail вне форума Ответить с цитированием
Старый 28.09.2010, 20:36   #7
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Код:
1. в диапазоне Cells(i, 18) - одна ячейка
На основание условия
If Sheets("Отчет").Cells(i, 27).Text = UserForm4.ComboBox1.Text Thenпереходим на условие
If Sheets("Отчет").Cells(i, 18).Value < 0 Then
Данное условие я обозначил красным так как оно не может проверить 31 одну ячейку
segail вне форума Ответить с цитированием
Старый 28.09.2010, 20:42   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub Test()
    Dim i As Long
    For i = 1 To 450
        If Sheets("Отчет").Cells(i, 27).Text = UserForm4.ComboBox1.Text Then 'Условие по совпадению текстовых значений.
            If LessThen0(i) Then 'Проверяются все тридцать одна ячейка. Если хоть одно значение меньше 0.
                Sheets("Отчет").Cells(i, 30).Resize(31).Value = CSng(UserForm4.ComboBox2.Text)
                MsgBox "...", 64, "Информационное сообщение"
            End If
        End If
    Next
End Sub


Function LessThen0(rw As Long) As Boolean
  Dim r As Long
  LessThen0 = True
  For r = rw To 30 + rw
    If Sheets("Отчет").Cells(r, 18).Value < 0 Then Exit Function
  Next
  LessThen0 = False
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.09.2010, 20:54   #9
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

А без функции нельзя.
Потому что сам код сложный, это только часть кода. В него входят и функции и модули и переменные.
Свойство Resize как вставляет так и удаляет значения диапазона. А для проверки нет ни каких свойств?
segail вне форума Ответить с цитированием
Старый 28.09.2010, 21:03   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
  With Sheets("Отчет")
    If WorksheetFunction.Min(.Range(.Cells(i, 18), .Cells(i + 30, 18))) < 0 Then
      Sheets("Отчет").Cells(i, 30).Resize(31).Value = CSng(UserForm4.ComboBox2.Text)
      MsgBox "...", 64, "Информационное сообщение"
    End If
  End With
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести надпись, если разрешение меньше 1280 по горизонтали Alex Cones JavaScript, Ajax 1 06.05.2010 19:26
Как можно запретить повторный ввод нуля в ячейку StringGrid Ветас Помощь студентам 5 12.11.2009 13:43
Всплывающая подсказка, если одно из значний меньше 0 kzld Microsoft Office Excel 6 22.07.2009 07:37
Вычислить произведение P кубов трех чисел a, b и c, если их сумма меньше нуля, произведение P модулей NoUserName Помощь студентам 3 01.03.2009 18:10
Вставка в одну ячейку ivkoa Microsoft Office Excel 9 22.08.2008 14:16