Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Автозаполнение таблицы расхода топлива
 
Добрый вечер.
Есть Лист1, где вводится информация про работу техники. И есть лист Бланк, где данные про расход топлива должны отображаться автоматически при выборе номера месяца в ячейке G1 на листе Бланк.

Куда( лист Бланк) - От куда ( Лист1)
1. Наличие при выезде - это остаток топлива на конец предыдущего дня (из столбца Е).
2. Получено - из Получено (столбец С)
3. Остаток на конец дня - Остаток топлива на конец дня (Столбец Е)
4. Дата (единоразово) - Дата (Столбец А)
На листе Бланк введены данные, которые должны получиться при выборе месяца 7.
 
Попробуйте макрос в модуле листа Бланк, срабатывает на изменении значения ячейки G1
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G1")) Is Nothing Then
        Application.EnableEvents = False
 Dim iMonth As Integer
 Dim i As Long
 Dim iLastRow As Long
 Dim n As Integer
 Dim OstatokEndDay As Double
 Dim Rasxod As Double
 Dim iStroka As Long
 Dim iDate As Date
 Dim Polucheno As Double
        iMonth = Target.Value
  iLastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
  Range("A4:E" & iLastRow).ClearContents     'очищаем данные на листе Бланк
  iStroka = 4
With Worksheets("Лист1")
  iLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
  For i = 2 To iLastRow
    If Month(.Cells(i, "A")) = iMonth Then      'месяц даты совпадает с выбранным
      If i <> 2 Then OstatokEndDay = .Cells(i - 1, "E") 'остаток на конец дня
      If .Cells(i, "E") = "" Then               'остаток пусто
          n = 0                                 'число дней в диапазоне
        Do
          Rasxod = Rasxod + .Cells(i + 1 + n, "D")
          Polucheno = Polucheno + .Cells(i + 1 + n, "C")
            n = n + 1
        Loop While .Cells(i + 1 + n, "A") = .Cells(i + 1, "A")
          Cells(iStroka, "A") = .Cells(i + n, "A")
          Cells(iStroka, "B") = OstatokEndDay
          Cells(iStroka, "D") = Polucheno
          Cells(iStroka, "E") = OstatokEndDay + Polucheno - Rasxod
          OstatokEndDay = .Cells(i + n, "E")    'остаток на конец дня
            iStroka = iStroka + 1
            i = i + n
            Rasxod = 0
            Polucheno = 0
      Else
        If i = 2 Then OstatokEndDay = .Cells(i, "E")  'остаток на конец дня
      End If
    End If
  Next
End With
End If
    Application.EnableEvents = True
End Sub
 
Три темы в обсуждении, а про эту вы забыли?
 
Kuzmich, не забыла) Только дошла до нее.
Спасибо большое, в примере работает. Осталось перенести макрос в рабочий файл... Надеюсь справлюсь
 
Kuzmich, не смогла перенести в рабочий файл, слишком сложно для меня(
 
Вариант формулами.Для столбца - "Наличие при выезде"
=ЕСЛИОШИБКА(ИНДЕКС(Лист1!$E$2:$E$29;ПОИСКПОЗ(A4;Лист1!$A$2:$A$29;0)-1);"")
.Для столбца - "Получено"
=СУММПРОИЗВ((Лист1!$A$2:$A$29=A4)*(Лист1!$B$2:$B$29="Работа установки")*Лист1!$C$2:$C$29)
Для столбца - "Остаток на конец дня"
=ЕСЛИОШИБКА(ИНДЕКС(Лист1!$E$2:$E$29;ПОИСКПОЗ(A4;Лист1!$A$2:$A$29));"")
 
AleksSid, спасибо, но даты должны выводиться автоматически, соответственно выбранному месяцу в ячейке G1.
 
Kuzmich, здравствуйте!
Вы могли бы адаптировать Ваш макрос под этот файл? Пожалуйста)
Куда( лист Рапорт) - Откуда ( Журнал подій)
1. J63-J78  - остаток топлива на конец предыдущего дня (из столбца S, Журнал подій).
2. AB63-AB78 - из столбца Q, Журнал подій.
3. AK63-AK78 - Остаток топлива на конец дня (Столбец S, Журнал подій)
4. Дата (единоразово) - Дата (Столбец А, Журнал подій)
На листе Рапорт введены данные, которые должны получиться при выборе месяца 7 (в ячейке G1, лист Рапорт).
 
Цитата
samanna написал:
спасибо, но даты должны выводиться автоматически
Пожалуйста, проверяйте.
 
Цитата
На листе Рапорт введены данные, которые должны получиться при выборе месяца 7
А месяц 8 вы будете выбирать в этом файле рапорт.xlsm (113.74 КБ)
Приведите данные, которые должны получиться при выборе месяца 8
 
Kuzmich, данные для 8-го месяца на листе1.
 
Макрос в модуль листа Рапорт
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("GA1")) Is Nothing Then
        Application.EnableEvents = False
 Dim iMonth As Integer
 Dim i As Long
 Dim iLastRow As Long
 Dim n As Integer
 Dim OstatokEndDay As Double
 Dim Rasxod As Double
 Dim iStroka As Long
 Dim Polucheno As Double
   iMonth = Target.Value
  Range("A63:I78,J63:R78,AB63:AJ78,AK63:AQ78").ClearContents     'очищаем данные на листе Рапорт
  iStroka = 63
With Worksheets("Журнал подій")
    iLastRow = .Range("A3").End(xlDown).Row     'конец таблицы на листе журнал
  For i = 4 To iLastRow
    If Month(.Cells(i, "A")) = iMonth Then      'месяц даты совпадает с выбранным
       If i <> 4 Then OstatokEndDay = .Cells(i - 1, "S") 'остаток на конец дня
      If .Cells(i, "S") = "" Then               'остаток пусто
          n = 0                                 'число дней в диапазоне
        Do        'в диапазоне одинаковых дат вычисляем расход и получено
          Rasxod = Rasxod + .Cells(i + n, "R")
          Polucheno = Polucheno + .Cells(i + n, "Q")
            n = n + 1
        Loop While .Cells(i + 1 + n, "A") = .Cells(i + 1, "A")
          Cells(iStroka, "A") = .Cells(i + n, "A")
          Cells(iStroka, "J") = OstatokEndDay
          Cells(iStroka, "AB") = Polucheno
          Cells(iStroka, "AK") = OstatokEndDay + Polucheno - Rasxod
            iStroka = iStroka + 1
            i = i + n
            Rasxod = 0
            Polucheno = 0
        Else
          If i = 4 Then OstatokEndDay = .Cells(i, "S")  'остаток на конец дня
        End If
      End If
  Next
End With
End If
    Application.EnableEvents = True
End Sub
 
Kuzmich, Вы волшебник! Спасибо огромное! Работает!
 
AleksSid, и Вам спасибо за еще одно решение!
Страницы: 1
Читают тему (гостей: 1)
Наверх