2015-04-04 12 views
1

Привет, я пытаюсь выяснить разницу во времени между данными в столбцах K и J. Мне нужно знать, сколько времени потребовалось, чтобы данные обновлялись на количество дней, которое потребовалось, часы, или минут, и я использую эти столбцы. Я также хочу получить среднее количество времени, только если имена в столбце А соответствуют и вводят эту информацию в столбце N. Это то, что у меня есть до первой части.Разница во времени/времени VBA

ActiveSheet.Name = "Raw Data" Range("M2:M").Value = ("K2:K-J2:J" > 1) + ("d:hh:mm")

Спасибо за помощь.

ответ

0

Это должно получить нужные результаты. With ... End With block используется для сохранения необходимости писать Worksheets("Raw Data") все время. Все, что находится внутри блока, которое начинается с ., относится к Worksheets("Raw Data")

Формула была адаптирована от this answer, но была изменена, чтобы обеспечить более 31 дня. Затем мы используем FillDown method, чтобы скопировать формулу в ячейку М2 вниз к той же строке, что и последней использованной ячейки в столбце К. ссылки в формуле автоматически подстраиваться, чтобы указать на правильную строку

редактировать: обновляется для расчета среднее истекшее время для каждого имени, указанного в столбце A. Это сложнее, потому что мы не можем напрямую усреднять значения, которые мы помещаем в столбец M, потому что мы преобразовали их в текстовый формат. Я решил использовать столбец Z для хранения значений времени, которые нам нужны. Вы можете выбрать любой другой неиспользуемый столбец, и вы можете скрыть столбец, чтобы он не отображался.

Последняя используемая строка хранится в переменной, потому что нам нужно использовать ее в нескольких разных местах. Числовое различие между столбцами K и J сохраняется в столбце Z. Затем текстовое значение в столбце M вычисляется из значения в столбце Z.

Наконец, среднее значение в столбце N рассчитывается с использованием AVERAGEIF function. Это просматривает все используемые строки в столбце A, находит те с тем же именем, что и текущая строка, а затем усредняет все значения из столбца Z для любых соответствующих строк.

Следует отметить один важный момент: все формулы в столбце N должны быть переписаны, если любые строки добавлены или удалены. Это связано с тем, что последнее значение строки, сохраненное в этих формулах, станет неправильным, если строки добавлены или удалены.

With Worksheets("Raw Data") 
    Dim lngLastUsedRow As Long 
    lngLastUsedRow = .Cells(.Rows.Count, "K").End(xlUp).Row 

    .Range("Z2").Formula = "=K2-J2" 
    .Range("Z2:Z" & lngLastUsedRow).FillDown 

    .Range("M2").Formula = "=FLOOR(Z2,1)&"":""&TEXT(Z2,""hh:mm"")" 
    .Range("M2:M" & lngLastUsedRow).FillDown 

    .Range("N2").Formula = "=AVERAGEIF(A$2:A$" & lngLastUsedRow & ",A2,Z$2:Z$" & lngLastUsedRow &")" 
    .Range("N2:N" & lngLastUsedRow).FillDown 
End With 
+0

Это сработало, однако оно не адресует вторую часть о среднем количестве времени, если имена совпадают в столбце A и это время вводится в столбце N – Lilly

+0

. Требуется дополнительная информация о «если имена совпадают в столбце A». Вы имеете в виду одно и то же имя, отображаемое в разных строках столбца A, или вы имеете в виду имя в столбце A, соответствующее имени в другом столбце? – barrowc

+0

Прошу прощения. Я имею в виду то же имя, которое появляется в разных строках столбца A. – Lilly

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