Цикл в цикле While

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

Столкнулся с проблемой, что нужно сверять значение одного столбца на одной странице, со значениями другова столбца на другой странице. По сути условия счетчика. На каждой странице есть практически одинаковые поля, только разной длины. Если значения совпадают, то он должен начинать работать со строками , на которых нашёл совпадающие значения нужных столбцов. Тоесть полей, с уникальными идентификаторами. В результате столкнулся к огромным количеством операторов IF и огромным количеством переменных. Помогите в этом вопросе, как можно сократить количество условий. И сократить количество переменных. Выложу часть кода, который покажет что я сделал, и возможно укажет на мою ошибку:

Код: Выделить всё

Sub macros()
Dim i As Long
    b = "xxx"
    d = "bbb"
    e = "ccc"
    f = "ddd"
    g = "eee"
x41=0
d4=0
i = 2
r=1
While Not IsEmpty(Sheets("name_page1").Cells(r, 1))
While Not IsEmpty(Sheets("name_page2").Cells(i, 2)) 
If (Left(Sheets("name_page1").Cells(r, 15).Value, Len(b)) <> b) Or (Sheets("name_page1").Cells(r, 15).Value <> d) Or _
(Sheets("name_page1").Cells(r, 12).Value = e) Or _
(Sheets("name_page1").Cells(r, 12).Value = f) Or _ 
(Sheets("name_page1").Cells(r, 12).Value = g) And (Sheets("name_page1").Cells(r, 14) = _ 
 Sheets("name_page2").Cells(i, 2)) Then
 
If Sheets("name_page1").Cells(r, 8).Value = x9 And Sheets("name_page1").Cells(r, 9).Value = 38 And _
(Sheets("name_page1").Cells(r, 10).Value = 31) And (Sheets("name_page1").Cells(r, 12).Value = e) And _
(Sheets("name_page1").Cells(r, 23).Value <> h) Then
x41 = x41 + 1
End If
 
If Sheets("name_page1").Cells(r, 8).Value = x1 And Sheets("name_page1").Cells(r, 9).Value = 35 And _
(Sheets("name_page1").Cells(r, 23).Value <> c) And (Sheets("name_page1").Cells(r, 12).Value = f) Then
d4 = d4 + 1
End If
 
........
много много условий и счетчиков 
........
 
End If
i = i + 1
Wend
r = r + 1
 

данный код раньше без второго цикла работал довольно быстро, и безупречно все считал, потому что решение было тупо в лоб, что облегчило алгоритм решения, но нагромоздило код. Хотелось бы сократить количество условий, переменных. И что бы второй цикл всё таки считал, а не обнулял значения. Раньше макрос обсчитывал всё с одной страницы, и не было проблем. Появилась идея сврять данные с другой страцей, и все данные стали обнуляться. В связи с чем это произошло?
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
можно закрывать тему, решение было найдено самостоятельно.
Ответить