2016-12-12 5 views
0

Я хочу сохранить текущие итоги определенных параметров в формате ежедневного формата отчета. Например, в ячейке E9 У меня есть часы работы машины и в ячейке F9 Я хочу, чтобы часы работы были «на сегодняшний день». студент Гари (член здесь) опубликовал следующее решение:Выполнение итогов с различными параметрами

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Range("E9"), Target) Is Nothing Then Exit Sub 
    [F9] = [F9] + [E9] 
End Sub 

Это прекрасно работает, но у меня есть несколько других параметров на тот же лист, я хочу сделать то же самое с, например, в E10 Я хочу, чтобы записать сколько газа, которое использовала машина, и в F10 Я хочу, сколько газа «на сегодняшний день». Когда я копирую вышеуказанный код и вставляю его с измененными значениями ячейки, работает только первая инструкция.

+0

Я немного озадачен, почему вам нужно VBA удвоить значение ячейки, а не только формулы Excel. Можете ли вы ссылаться на ответ Гэри? – Slai

+0

Я не хочу, чтобы значение удваивалось, может быть, я не очень хорошо его объяснил. Начиная с 0, сегодня я запускаю машину на 10 часов. Я вводил это в E9 и F9 автоматически регистрирует 10. Завтра я запускаю его в течение 5 часов. когда лист заполняется в «сегодняшних часах» (E9), будет 5, но «на сегодняшний день» (F9 будет 15. F9 - накопленные часы. Формула Гэри отлично работает, мне просто нужно знать, как ее повторить другие значения на одном листе. – Stemurdo

+0

ссылка здесь http://stackoverflow.com/questions/29780974/how-to-make-a-cumulative-sum-in-one-cell – Stemurdo

ответ

0

Target является клетка (ы), что изменилось, и Target(, 2) является правая ячейка этого:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Range("E9:E12"), Target) Is Nothing Then Exit Sub ' change E9:E12 to the range of cells that are changed 
    Target(, 2).Value2 = Target(, 2).Value2 + Target.Value2   ' the .Value2 parts are optional 
End Sub 

Если случайно более одной клетки меняются сразу, выше приведет к ошибке (например copy-paste или Ctrl + Enter). Это может быть исправлено с помощью цикла корыта всех ячеек в Target Диапазоне:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Range("E9:E12"), Target) Is Nothing Then Exit Sub 
    Dim cell As Range 
    For Each cell In Target.Cells 
     cell(, 2).Value2 = cell(, 2).Value2 + cell.Value2 
    Next 
End Sub 
+0

Прекрасно работает , Спасибо. – Stemurdo

Смежные вопросы