Страницы: 1
RSS
VBA. Вставить сумму в строку выбранного месяца
 
Добрый вечер.

Я бухгалтер.
Каждый месяц, начисляя премиальные приходится вручную в огромную базу данных вносить коррективы.
Пытаюсь сама писать код.
Подробности в файле.
Спасибо за помощь.
 
Здравствуйте, Елена! Подробности в файле не понятны. Вы хотите научиться менять макросом только те строки, которые соответствуют расчетному месяцу? Может быть, приведете пример фрагмента реального расчета - что было до расчета и что должно быть в итоге (после расчета)?
Владимир
 
Подробнее так.
Таблица (Т) в несколько тысяч строк.
Диспетчер вводит в Т перечень выполненных работ каждый день.
Работы в Т автоматически расцениваются по зарплате.
В конце месяца диспетчер сдает Т в бухгалтерию.
Премиальные начисляются за текущий месяц бухгалтером в этой же Т.
Пытаюсь автоматизировать начисление премиальных за текущий месяц, но что бы начисления в прошлые месяцы при пересчете не были затерты.

п.с.    до расчета ячейки в колонке премия за текущий период пусты, за прошлые месяцы заполнены.
Изменено: Елена Абрамович - 31.07.2020 19:05:48
 
Лучше покажите в файле Excel (без макросов) на примере нескольких (условных) человек: до расчета (момент передачи в бухгалтерию) и после расчета (с объяснением методики начисления премий). Несущественные детали можно убрать.
Изменено: sokol92 - 31.07.2020 19:26:55
Владимир
 
пример
 
В примере можно обойтись и без макроса.
  • Выделяем в автофильтре необходимый месяц (1)
  • Выделяем видимые ячейки в столбце J (в Вашем случае J2:J219)
  • В строке формул водим формулу для J2 (=(F2+H2)*0,6) и нажимаем Ctrl+Enter

Владимир
 
Привет
Быстрее молнии, быстрее ветра, быстрее калькулятора
 
Borrusale
Идеально и очень просто.

Спасибо огромное.
 
Borrusale, об идеальности...
1. Неточность: Range для активного листа, .Cells - для указанного (не везде). Здесь это роли не играет, но если кнопка будет на другом листе или  такое записать в другой задаче?
2. Зачем a = a?
3. Почему 12 и зачем формула, которую нужно преобразовать в значение?
4. Пожелание: пишите чище... Код легче читать, когда он написан с  отступами, пробелами.

Вариант:
Код
Sub per2()
    Dim nm As Integer, i As Long, lRw As Long

    nm = Val(InputBox("Укажите порядковый номер месяца"))
    If nm < 1 Or nm > 13 Then MsgBox "Это не номер месяца!", 64, "ОШИБКА": Exit Sub
    
    Application.ScreenUpdating = False
    
    With Worksheets("Лист1")
        lRw = .Cells(.RowsCount, 1).End(xlUp).Row ' описания задачи в рабочей книге не будет
        
        For i = 2 To lRw
            If .Cells(i, 1) = nm Then .Cells(i, 3).Value = 2 + 3 + 7
        Next i
    End With
    
    Application.ScreenUpdating = True
End Sub

Если диапазон большой, лучше данные записывать в массив и с ним работать.

P.S. п.3 снимается  - увидел, это такая придумка автора )
 
Цитата
vikttur написал: 1. Неточность...
Разместил кнопку на другом листе все работает

Цитата
vikttur написал: 2. ...4.
Ок!
Быстрее молнии, быстрее ветра, быстрее калькулятора
 
Не надо с этим экспериментировать в рабочих кодах. Если что-то относится к родителю под With, то точку ставить нужно, иначе можете получить нежданчиков :)
Привыкнете писать неправильно и... Range("A1") = 8 на каком листе циферку запишет?

Проверьте со строкой, которая была в предыдущем коде:
Код
If Cells(i, 1) = nm Then
 
Цитата
vikttur написал: Проверьте со строкой, которая была в предыдущем коде
Согласен. Обнаружил ) Я эту ошибку исправил когда второй раз файл с ответом выложил.
Быстрее молнии, быстрее ветра, быстрее калькулятора
Страницы: 1
Наверх