Страницы: 1
RSS
Автоматическое заполнение предыдущего значения при учете электроэнергии
 
Здравствуйте, Уважаемые форумчане!
Помогите, пожалуйста, решить такую задачу:
Нужно организовать журнал учета потребления электроэнергии, чтоб в нем автоматически проставлялось предыдущее значение соответствующего номера счетчика.
Т.е. суть такая ... ввожу "Текущее знач." для № счетчика вручную, а "Предыдущее знач." берется из последнего предыдущего "Текущее знач." для этого № счетчика. И учесть что может быть новый счетчик, я так понимаю там нужно будет ввести вручную текущее и предыдущее значение, а дальше нужно автоматически чтоб подставлялось значение.
Во вложении таблица где все данные проставлены вручную.
Заранее благодарю!  
 
Цитата
Нужно организовать журнал учета потребления электроэнергии,
На мой взгляд у вас не хватает колонки Потребление (формула =[@[Текущее знач.]]-[@[Предыдущее знач.]])
Перед вводом текущих показаний запускаете макрос, который переносит текущие показания на место предыдущих.
После этого вводите новые текущие показания.
Код
Sub Enedgy()
Dim iLastRow As Long
  iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
  'переносим текущие значения на место предыдущих
  Range("E2:E" & iLastRow).Copy Range("F2")
End Sub
 
Спасибо, буду пробовать. Колонка потребление есть, просто вырезал часть таблицы.
Не совсем владею пользованием макросов ... буду изучать как его запустить.

Может это возможно организовать с помощью формул?
Изменено: Владимир Кривошеин - 06.12.2022 21:45:27
 
Цитата
написал:
Перед вводом текущих показаний запускаете макрос
При запуске макроса все предыдущие становятся равные текущим ... чет не работает  
 
Цитата
чет не работает  
Так и задумано. Теперь вводите новые текущие значения и получаете потребление за текущий период времени
 
Цитата
написал:
Теперь вводите новые текущие значения
так новые текущие значения я хочу вводить в новой строке продолжая этот список указав все критерии  - новая дата, Тип учета, Тип операции, Номер счетчика
 
Цитата
новые текущие значения я хочу вводить в новой строке
Попробуйте такой макрос в модуль листа
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim arr
Dim TekValue As Long
  If Target.Cells.Count > 1 Then Exit Sub          'выделено больше одной ячейки
With ActiveSheet.ListObjects(1)
 If Not Intersect(Target, .DataBodyRange(.ListRows.Count, 4)) Is Nothing Then
     arr = .ListColumns(4).DataBodyRange           'данные 4-ого столбца в массив
   For i = UBound(arr) - 1 To 1 Step -1            'ищем номер счетчика с конца массива - 1
     If arr(i, 1) = arr(UBound(arr), 1) Then Exit For
   Next
     If i <> 0 Then
         TekValue = .DataBodyRange(i, 5)
         .DataBodyRange(UBound(arr), 6) = TekValue
     Else
       MsgBox "Такого номера еще не было, поэтому введите вручную текущие и предыдущие показания"
     End If
  End If
End With
End Sub
Страницы: 1
Наверх