Страницы: 1
RSS
UserForm Выбор нескольких значений
 
Добрый день!
Имеется макрос с следующим кодом:
Код
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 - 26.06.2020 12:58:41
 
Petrosyan здравствуйте,  так можно ведь InputBox-ы использовать. Прописать выше j = InputBox("Введите необходимую цифру"), k = InputBox("Введите необходимую цифру")
Изменено: DANIKOLA - 26.06.2020 13:38:18
 
Доброе время суток.
Цитата
Petrosyan написал:
визуальную форму UserForm с мультивыбором в одном окошке массив годов с массива год, а в другой  массив месяцев тоже мультивыбор
Вариант решения.
 
Ещё вариант.
 
Спасибо! Выручили, всем спасибо)
 
Petrosyan, а зачем Вы всем никому ненужную цитату отправили?
 
Цитата
Юрий М написал:
а зачем Вы всем никому ненужную цитату отправили?
Это, видимо, затравка для пятничного трёпа :)
 
Ещё не вечер - тема найдётся подходящая )
 
Удалил... Автор давно уже ушел.
Страницы: 1
Наверх