Здравствуйте! Опять требуется помощь... Вымучил макрос, который находит средние значения по определенным условиям из диапазона дат. В файле более понятно. Сейчас он ищет средние значения за три календарных (один за одним) дня. Как добавить еще условие для поиска, например значений за четыре, пять, и т.д. (по числу введенному в ячейку) дней. Обязательное условие - даты должны идти по календарю (друг за другом). Спасибо!
Здравствуйте! Опять требуется помощь... Вымучил макрос, который находит средние значения по определенным условиям из диапазона дат. В файле более понятно. Сейчас он ищет средние значения за три календарных (один за одним) дня. Как добавить еще условие для поиска, например значений за четыре, пять, и т.д. (по числу введенному в ячейку) дней. Обязательное условие - даты должны идти по календарю (друг за другом). Спасибо!pechkin
Sub мяу() Range("D9:F100").ClearContents Dim bb#, rh#, zd#, dp# Dim rt As Range rh = Range("G2") zd = Range("D2") dp = Range("C2") ' ищем ячейку с начальной датой Set rt = Columns(1).Find(What:=Range("E2").Value, LookAt:=xlWhole) ' смещаем на ячейку вправо и растягивам на rh вниз Set rt = rt.Offset(, 1).Resize(rh) ' пока значение последей ячейки диапазона меньше F2 Do While rt(rh).Offset(, -1).Value < Range("F2").Value ' вычисляем среднее, используя функцию листа СРЗНАЧ() и округляем bb = Round(Application.WorksheetFunction.Average(rt), 1) ' +0.0000001 для компенсации погрешности вычисления If Abs(bb - zd) <= dp + 0.0000001 Then Cells(Rows.Count, 4).End(xlUp).Offset(1).Resize(, 3) = _ Array(bb, rt(1).Offset(, -1).Value, rt(rh).Offset(, -1).Value) End If ' сдвигаем диапазон на строку вниз Set rt = rt.Offset(1) Loop End Sub
[/vba]
[vba]
Код
Sub мяу() Range("D9:F100").ClearContents Dim bb#, rh#, zd#, dp# Dim rt As Range rh = Range("G2") zd = Range("D2") dp = Range("C2") ' ищем ячейку с начальной датой Set rt = Columns(1).Find(What:=Range("E2").Value, LookAt:=xlWhole) ' смещаем на ячейку вправо и растягивам на rh вниз Set rt = rt.Offset(, 1).Resize(rh) ' пока значение последей ячейки диапазона меньше F2 Do While rt(rh).Offset(, -1).Value < Range("F2").Value ' вычисляем среднее, используя функцию листа СРЗНАЧ() и округляем bb = Round(Application.WorksheetFunction.Average(rt), 1) ' +0.0000001 для компенсации погрешности вычисления If Abs(bb - zd) <= dp + 0.0000001 Then Cells(Rows.Count, 4).End(xlUp).Offset(1).Resize(, 3) = _ Array(bb, rt(1).Offset(, -1).Value, rt(rh).Offset(, -1).Value) End If ' сдвигаем диапазон на строку вниз Set rt = rt.Offset(1) Loop End Sub
Здравствуйте!Ran, прошу прощения -посмотрите еще раз Ваш Макрос. Дело в том, что по условию диапазона дата окончания должна входить. Если диапазон длинный, то все нормально, а если состоит из заданного количества дней, то Макрос ничего не выдает. Если в строку кода [vba]
Код
Do While rt(rh).Offset(, -1).Value < Range("F2").Value
[/vba]добавить<= то работает на коротком диапазоне, а на длинном выдает ошибку Спасибо!
Здравствуйте!Ran, прошу прощения -посмотрите еще раз Ваш Макрос. Дело в том, что по условию диапазона дата окончания должна входить. Если диапазон длинный, то все нормально, а если состоит из заданного количества дней, то Макрос ничего не выдает. Если в строку кода [vba]
Код
Do While rt(rh).Offset(, -1).Value < Range("F2").Value
[/vba]добавить<= то работает на коротком диапазоне, а на длинном выдает ошибку Спасибо!pechkin