Sub updatespravki()
UserForm1.Show
End Sub
Sub КратностьУжеНеРаботает()
Dim sh As Worksheet 'Переменная листов
Dim ВыбираюГод As Variant
' 0 1 2 3 4 5 6 7 8 9 10
Год = Array("2014 год", "2015 год", "2016 год", "2017 год", "2018 год", "2019 год", "2020 год", "2021 год", "2022 год", "2023 год", "2024 год")
' 0 1 2 3 4 5 6 7 8 9 10 11
Месяц = Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
For Each sh In ActiveWorkbook.Worksheets 'Перебираем листы текущей книги
If sh.Visible = xlSheetVisible Then
'sh.Activate
For j = 5 To 5 'Выбери год который ты хочешь расчитать от 0 (2014 год) до 9 (2024 год)
For k = 8 To 11 'Выбери месяц который ты хочешь расчитать от 0 (Января) до 11 (Декабря)
ВыбранныйГод = Год(j)
ВыбранныйМесяц = Месяц(k)
СтрокаГода = Application.Match(ВыбранныйГод, Range("A:A"), 0) 'Определяем строку с нужным годом
СтрокаМесяца = Application.Match(ВыбранныйМесяц, Range("A" & СтрокаГода & ":A200000"), 0) + СтрокаГода - 1 'определяем нужную нам строку с месяцем
kratnost = 0 'Обнуляем переменную кратности
dz = Cells(СтрокаМесяца, 7) 'Переменная Дз равна 7 столбцу в строке месяца
For i = СтрокаМесяца To 14 Step -1 'Идем вверх начиная от строки месяца до начала (предполагается что начало будет на 14 строке)
'Костыль для строк с годами (с заливками)
For p = 0 To 10
If Cells(i, 1) = Год(p) Then i = i - 2 'Если значение в первом столбце равно году (из массива ГОД) тогда минус две строки
Next p
'==========Работа с отрицательной кратностью==================================================================================
'В случае если ДЗ отрицательная...
If dz < 0 Then
If dz / Abs(Cells(i, 4)) > -1 Then 'если дз / начисления больше -1 значит дз делим на начисление
kratnost = kratnost + dz / Cells(i, 4)
dz = 0
Else
dz = dz + Cells(i, 4) 'прибавляем начисление к нашей отрицательно ДЗ
kratnost = kratnost - 1 'Увеличиваем кратность на 1
End If
If dz = 0 Then
'Заполняем кратность в нужную ячейку
Cells(СтрокаМесяца, 9).Value = kratnost
GoTo endsub
End If
End If
'==========Работа с отрицательной кратностью==================================================================================
If dz >= 0 Then
'Если начисления больше нуля
If Cells(i, 4) > 0 Then
' Делим Дз на начисления, если они больше 1 тогда кратность увеличим
If dz / Abs(Cells(i, 4)) < 1 Then
kratnost = kratnost + dz / Cells(i, 4)
dz = 0
Else
dz = dz - Cells(i, 4)
kratnost = kratnost + 1
End If
If dz = 0 Then
'Заполняем кратность в нужную ячейку
If kratnost < 0 Then kratnost = 0
Cells(СтрокаМесяца, 9).Value = kratnost
GoTo endsub
End If
End If
End If
Next
endsub:
Next
Next
End If
Next
End Sub
Для выбора года и месяца приходится менять переменные j и К вначале. Но это жутко неудобно. Подумал что можно создать визуальную форму UserForm с мультивыбором в одном окошке массив годов с массива год, а в другой массив месяцев тоже мультивыбор (возможность выбрать нескольких). Помогите пожалуйста добавить такую функцию, к сожалению юзер форм не делал только понимаю что это возможно. Буду очень признателен. Файл в закрепе
Petrosyan здравствуйте, так можно ведь InputBox-ы использовать. Прописать выше j = InputBox("Введите необходимую цифру"), k = InputBox("Введите необходимую цифру")