Вопрос:
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”).
Надеюсь, это поможет. С наилучшими пожеланиями,