Страницы: 1
RSS
Цикл для строк и столбцов табеля по условию.
 
Добрый день.
Помогите пожалуйста, как правильно организовать цикл в данной ситуации:
Для Cells(5, x) понятно, а вот к Range("D8:AH11") не соображу.
Код
If Cells(5, 4) = 0 Then Range("D8:D11").Value = "8"  
If Cells(5, 5) = 0 Then Range("E8:E11").Value = "8"
If Cells(5, 6) = 0 Then Range("F8:F11").Value = "8"
If Cells(5, 7) = 0 Then Range("G8:G11").Value = "8"
If Cells(5, 8) = 0 Then Range("H8:H11").Value = "8"
If Cells(5, 9) = 0 Then Range("I8:I11").Value = "8"
If Cells(5, 10) = 0 Then Range("J8:J11").Value = "8"
If Cells(5, 11) = 0 Then Range("K8:K11").Value = "8"
If Cells(5, 12) = 0 Then Range("L8:L11").Value = "8"
If Cells(5, 13) = 0 Then Range("M8:M11").Value = "8"
If Cells(5, 14) = 0 Then Range("N8:N11").Value = "8"
If Cells(5, 15) = 0 Then Range("O8:O11").Value = "8"
If Cells(5, 16) = 0 Then Range("P8:P11").Value = "8"

Необходимо, при "0" в ячейке D5 и т.д., в нижних ячейках D8-D11 и т.д. вставить "8". При "1" - оставить без изменений.

 
например
Код
If Cells(5, i) = 0 Then Range("A8:A11").Offset(,i-1).Value = "8"
Изменено: V - 26.06.2017 17:44:04 (корректировка offset)
 
П,С. это тоже вам не помешает.
Код
'в начале кода
Application.ScreenUpdating = False 'отключаем обновление экрана,
Application.EnableEvents = False 'отключаем отслеживание событий
' в конце кода
Application.ScreenUpdating = True 'включаем обновление экрана
Application.EnableEvents = True 'включаем отслеживание событий
Изменено: V - 26.06.2017 17:52:32
 
Код
    For i = 4 To 34
        Cells(8, i).Resize(4).Value = IIf(Cells(5, i), "", 8)
    Next
Я сам - дурнее всякого примера! ...
 
Оригинально! Супер! Одной строкой - и всё работает!
Только добавил проверку на 30 или 31 день в месяце. Иначе - ошибка.

Код
If k = 31 Then
j = 34
Else
j = 33
End If

Application.ScreenUpdating = False  ' Отключаем обновление экрана 
Application.EnableEvents = False    ' Отключаем отслеживание событий 
For i = 4 To j                      '34
        
Cells(8, i).Resize(4).Value = IIf(Cells(5, i), "", 
Next 
Application.ScreenUpdating = True   ' Включаем обновление экрана 
Application.EnableEvents = True     ' Включаем отслеживание событий
Спасибо огромное!
Изменено: pitby - 27.06.2017 10:45:39
 
Что ж вы так любите все усложнять..
Код
    For i = 4 To k + 3
        Cells(8, i).Resize(4).Value = IIf(Cells(5, i), "", 8)
    Next

И не надо никаких If   Then Else :)
Я сам - дурнее всякого примера! ...
 
Цитата
kuklp написал:
Что ж вы так любите все усложнять..
И то, правда! Что ни голова, то розум!
Исправлю! Получиться кода совсем мало.
Изменено: pitby - 27.06.2017 11:44:42
 
kuklp, V спасибо за помощь! Я перед этим такие комбинации закручивал, что самому страшно становилось. А оказывается - Всё гениальное просто.
 
pitby, предложенное отключение событий в самое начало кода а не перед циклом.
и в остальных кодах добавьте отключение и включение обновления экрана а то у вам при работе макросов окно моргает.
Изменено: V - 27.06.2017 13:21:44
 
Цитата
V написал:
добавьте отключение и включение обновления экрана а то у вам при работе макросов окно моргает.
Спасибо, так и сделал.
Страницы: 1
Наверх