Цикл в цикле While
Добавлено: 14 апр 2009, 10:31
Столкнулся с проблемой, что нужно сверять значение одного столбца на одной странице, со значениями другова столбца на другой странице. По сути условия счетчика. На каждой странице есть практически одинаковые поля, только разной длины. Если значения совпадают, то он должен начинать работать со строками , на которых нашёл совпадающие значения нужных столбцов. Тоесть полей, с уникальными идентификаторами. В результате столкнулся к огромным количеством операторов 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
данный код раньше без второго цикла работал довольно быстро, и безупречно все считал, потому что решение было тупо в лоб, что облегчило алгоритм решения, но нагромоздило код. Хотелось бы сократить количество условий, переменных. И что бы второй цикл всё таки считал, а не обнулял значения. Раньше макрос обсчитывал всё с одной страницы, и не было проблем. Появилась идея сврять данные с другой страцей, и все данные стали обнуляться. В связи с чем это произошло?
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
можно закрывать тему, решение было найдено самостоятельно.