Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Внести значение в ячейки столбца с шагом, если заголовок столбца соответствует условию, и очищать их когда не соответсвует, Макрос
 
Всех приветствую!

Собственно самого макроса у меня нет, Уокенбаха читать только начал  :)
Если кому не сложно, то буду благодарен за готовый макрос того, что описал в названии темы топика.
В примере работу макроса я изобразил формулами в залитых желтым ячейках. Если поменяете месяц, то будет видно, что должно происходить в жёлтых ячейках.
Логика в формуле простая - если заголовок одного из трех последних столбцов (это даты) равен значению из диапазона S3:AB3 (залит синим), то ячейки в этих столбцах со строки 12 с шагом 3 принимают значение "23:30". При этом ячейки, находясь в одном столбце, находятся в разных диапазонах (обозначил жирными границами). И соответственно, если значение заголовка столбца не в диапазоне S3:AB3, то жёлтые ячейки принимают значение пусто.
 
Код
Sub zapolneniye_blokov()
Dim r_prazdniki, r_target As Range
Dim prazdnik, den As Range
Dim blok, blok_row

'Если диапазон изначально известен, если нет, необходимо его сначала определить
Set r_prazdniki = Range("S3:AB3")
Set r_target = Range("AJ10:AL29")

For Each prazdnik In r_prazdniki.Cells
    For Each den In r_target.Rows(1).Cells
        If prazdnik = den Then
            blok_row = 2
            For blok = 1 To 2
                den.Offset(blok_row, 0).Value = "23:30"
                den.Offset(blok_row + 3, 0).Value = "23:30"
                den.Offset(blok_row + 6, 0).Value = "23:30"
                blok_row = blok_row + 11
            Next blok
        End If
    Next den
Next prazdnik
End Sub



Подразумевается, что ячейки изначально пустые, следовательно создавать код для "опустошения" ячеек не нужно.
Изменено: Maruf - 17 Сен 2018 11:32:32
No crime is so great as daring to Excel. (Winston Churchill)
 
Maruf, интересное решение. Спасибо Вам, вполне применимо к моей форме. Гораздо компактнее и интереснее выхлопа макрорекодера  :)  + Вам в карму.
И, поскольку я VBA не понимаю, вопрос исключительно из любопытства, можно ли было в данном случае использовать условие Step 3? Или это только для перебора столбцов годится?
 
У Вас всего три статьи (ячеек подлежащих заполнению) в каждом блоке, поэтому не стал добавлять ещё один цикл.
Но если статей в блоке много, то внутри последнего цикла можно добавить ещё один:
Код
For smeshenie = 0 To kolichestvo_statey Step 3
    den.Offset(blok_row + smeshenie, 0).Value = "23:30"
Next smeshenie

Изменено: Maruf - 17 Сен 2018 12:39:57
No crime is so great as daring to Excel. (Winston Churchill)
 
Цитата
Maruf написал:
внутри последнего цикла
Пардон, но я не понимаю, что это значит )) Вообще у меня 5 блоков по 50 статей каждый. Диапазоны известны, форма статична
 
Цитата
khama написал:
Пардон, но я не понимаю, что это значит )) Вообще у меня 5 блоков по 50 статей каждый. Диапазоны известны, форма статична
Всё в порядке. Ниже привожу полностью изменённый код, чтобы было понятнее:
Код
Sub zapolneniye_blokov()
Dim r_prazdniki, r_target As Range
Dim prazdnik, den As Range
Dim blok, blok_row

Dim smeshenie, yacheyki_v_stolbce, kolichestvo_statey

kolichestvo_statey = 3
yacheyki_v_stolbce = (kolichestvo_statey - 1) * 3 '3 это размер шага

Set r_prazdniki = Range("S3:AB3")
Set r_target = Range("AJ10:AL29")

For Each prazdnik In r_prazdniki.Cells
    For Each den In r_target.Rows(1).Cells
        If prazdnik = den Then
            blok_row = 2
            For blok = 1 To 2
                For smeshenie = 0 To yacheyki_v_stolbce Step 3
                    den.Offset(blok_row + smeshenie, 0).Value = "23:30"
                Next smeshenie
                blok_row = blok_row + 11
            Next blok
        End If
    Next den
Next prazdnik
End Sub

Изменено: Maruf - 17 Сен 2018 13:05:05
No crime is so great as daring to Excel. (Winston Churchill)
 
Под количеством статей я подразумеваю количество подлежащих заполнению ячеек в пределах одного столбца. Например в столбце под датой "1 мар", в 1 блоке нужно заполнить три ячейки напротив Сотрудников 1,2,3.  
No crime is so great as daring to Excel. (Winston Churchill)
 
Цитата
Maruf написал:
полностью изменённый код
Поигрался со значениями - это прям конструктор, очень удобно и понятно. Спасибо Вам большое!
Страницы: 1
Читают тему (гостей: 1)
Наверх