Здравствуйте. Необходимо сделать цикл перебора ячеек в столбце, содержащих даты, до нахождения отличной от предыдущей(их). Параллельно с датами в соседних двух столбцах находятся цифры, суммы которых (за пройденный циклом день) нужно сложить. Похожая, на мой взгляд, задача была решена AlexM. Я не смог понять , казалось бы, элементарное неравенство, которое AlexM пишет во втором цикле. Немного изменив его, While Range("A" & iRow) - DateSerial(Year(Range("A" & iRow + 1)), Month(Range("A" & iRow + 1)), Day(Range("A" & iRow + 1))) > 0 получил ошибку о несовпадении данных. Остальное, вроде бы, не вызывает трудностей понимания, хотя отладчиком дойти до (нужного) завершения не получилось. Код его великолепен. Но моих знаний не хватает, чтобы, воспользовавшись исходником, править его под свою задачу. Файл нужен для дальнейшей распечатки. Данных много. Листов - от 15 Данные приходят с разными датами.
PS. Оптимизацией кода заниматься некогда, сегодня погода и лыжня классная.
Здравствуйте. Необходимо сделать цикл перебора ячеек в столбце, содержащих даты, до нахождения отличной от предыдущей(их). Параллельно с датами в соседних двух столбцах находятся цифры, суммы которых (за пройденный циклом день) нужно сложить. Похожая, на мой взгляд, задача была решена AlexM. Я не смог понять , казалось бы, элементарное неравенство, которое AlexM пишет во втором цикле. Немного изменив его, While Range("A" & iRow) - DateSerial(Year(Range("A" & iRow + 1)), Month(Range("A" & iRow + 1)), Day(Range("A" & iRow + 1))) > 0 получил ошибку о несовпадении данных. Остальное, вроде бы, не вызывает трудностей понимания, хотя отладчиком дойти до (нужного) завершения не получилось. Код его великолепен. Но моих знаний не хватает, чтобы, воспользовавшись исходником, править его под свою задачу. Файл нужен для дальнейшей распечатки. Данных много. Листов - от 15 Данные приходят с разными датами.
Всё понял, sboy. Хитро как. Опыта нет, конечно. И в мыслях даже не было так сделать. Спасибо. Порядковые номера сделаю сам. upd: Опыта у меня нет, конечно. И в мыслях даже не было так сделать. Спасибо. Порядковые номера сделаю сам.
Всё понял, sboy. Хитро как. Опыта нет, конечно. И в мыслях даже не было так сделать. Спасибо. Порядковые номера сделаю сам. upd: Опыта у меня нет, конечно. И в мыслях даже не было так сделать. Спасибо. Порядковые номера сделаю сам.nimr
Сообщение отредактировал nimr - Понедельник, 12.02.2018, 22:30
Sub Macros() Application.ScreenUpdating = False iRow = 3 Dim a As Integer a = 1 While Range("A" & iRow) <> "" sumD = Range("C" & iRow) sumK = Range("D" & iRow) While Range("A" & iRow) = Range("A" & iRow + 1) Range("B" & iRow) = a sumD = sumD + Range("C" & iRow + 1) sumK = sumK + Range("D" & iRow + 1) iRow = iRow + 1 a = a + 1 Wend Range("B" & iRow) = a iRow = iRow + 1 Rows(iRow).Insert xlShiftDown Range("C" & iRow) = sumD Range("D" & iRow) = sumK iRow = iRow + 1 a = 1 Wend Application.ScreenUpdating = True End Sub
[/vba] вот так можно ли оформлять счётчик в решении (моей задачи, решённой by sboy) или это слишком громоздко и есть какой-то стандартный ход для облегчения кода? Пожалуйста, выскажите своё мнение, необходимое мне для продолжения освоения VBA и написания более коротких и быстрых макросов.
И ещё. Каким-то непонятным образом в результате (Е9) нули отсутствуют, а во всех остальных -- они зачем-то есть. Мне они не нужны. Что заставляет их не появляться? upd:18:35 в дальнейшем решении (моей задачи, уже практически решённой by sboy)
[vba]
Код
Sub Macros() Application.ScreenUpdating = False iRow = 3 Dim a As Integer a = 1 While Range("A" & iRow) <> "" sumD = Range("C" & iRow) sumK = Range("D" & iRow) While Range("A" & iRow) = Range("A" & iRow + 1) Range("B" & iRow) = a sumD = sumD + Range("C" & iRow + 1) sumK = sumK + Range("D" & iRow + 1) iRow = iRow + 1 a = a + 1 Wend Range("B" & iRow) = a iRow = iRow + 1 Rows(iRow).Insert xlShiftDown Range("C" & iRow) = sumD Range("D" & iRow) = sumK iRow = iRow + 1 a = 1 Wend Application.ScreenUpdating = True End Sub
[/vba] вот так можно ли оформлять счётчик в решении (моей задачи, решённой by sboy) или это слишком громоздко и есть какой-то стандартный ход для облегчения кода? Пожалуйста, выскажите своё мнение, необходимое мне для продолжения освоения VBA и написания более коротких и быстрых макросов.
И ещё. Каким-то непонятным образом в результате (Е9) нули отсутствуют, а во всех остальных -- они зачем-то есть. Мне они не нужны. Что заставляет их не появляться? upd:18:35 в дальнейшем решении (моей задачи, уже практически решённой by sboy)nimr
Сообщение отредактировал nimr - Вторник, 13.02.2018, 18:36