Как найти разницу между предыдущими и текущими значениями в ячейке Excel?

Вопрос: A1 = время начала использования cntrl + shift +, которое показывает 4:00 AM B1 = конец времени с использованием cntrl + shift +, который показывает 8:00 AM C1 = время между использованием = MOD (B1-A1,1), которое показывает 4:00:00 D1 = время из ячейки C1, преобразованное в минуты, используя = C1 * 1440, который показывает

Вопрос:

A1 = время начала использования cntrl + shift +, которое показывает 4:00 AM

B1 = конец времени с использованием cntrl + shift +, который показывает 8:00 AM

C1 = время между использованием = MOD (B1-A1,1), которое показывает 4:00:00

D1 = время из ячейки C1, преобразованное в минуты, используя = C1 * 1440, который показывает 240 минут

E1 = D1 новое значение – старое значение D1 (пример: если старое значение было 240, а новое – 360, то 360-240 = 120).

Смелый – это то, что я хочу, и я могу только надеяться, что вы, ребята, поймете, чего я пытаюсь выполнить. Я постараюсь быть более ясным, если нужно, как пожелаете. Заранее спасибо!

Лучший ответ:

Чтобы найти разницу между введенными новыми и старыми значениями, например, в “D1” (на событии изменения ячейки) и отобразить ее ячейку “E1”, общее решение показано в следующем фрагменте кода (см. Листинг 1):

Листинг 1

Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 4 And Target.Row = 1 Then ‘new val newVal = Range(«D1»).Value Application.EnableEvents = False Application.Undo ‘old val oldVal = Range(«D1»).Value Range(«D1»).Value = newVal ‘diff between new and old val Range(«E1»).Value = newVal — oldVal Application.EnableEvents = True End If End Sub

В зависимости от вашего конкретного случая (при условии, что время вводится путем нажатия комбинации CTRL+SHIFT+: (или просто набирается) в ячейке “A1” или “B1”, модифицированный фрагмент кода показан в листинге 2.

Листинг 2

Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Row = 1 And (Target.Column = 1 Or Target.Column = 2) Then ‘new val a1 = Range(«A1»).Value b1 = Range(«B1»).Value newVal = Range(«D1»).Value ‘disable events and undo Application.EnableEvents = False Application.Undo ‘old val oldVal = Range(«D1»).Value ‘diff between new and old val diff = newVal — oldVal Range(«A1»).Value = a1 Range(«B1»).Value = b1 Range(«E1»).Value = diff ‘re-enable events Application.EnableEvents = True End If End Sub

В отдельном примечании вы можете упростить вычисление вашего рабочего листа, если вы используете формулу для разницы в минуту, например: =MOD(B1-A1,1)*1440 введенной в одну ячейку (например, “D1”) вместо использования пары (“C1” и “D1”). Кроме того, весь расчет может выполняться исключительно в модуле VBA, обновляя значение “E1” на основе записей в “A1” и “B1” (в этом сценарии нет необходимости “C1” и “D1”).

Надеюсь, это поможет. С наилучшими пожеланиями,

Оцените статью
Добавить комментарий