Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Среднее значение по условиям - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Среднее значение по условиям
Среднее значение по условиям
pechkin Дата: Суббота, 15.11.2014, 14:05 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 49 ±
Замечаний: 0% ±

2003
Здравствуйте! Опять требуется помощь...
Вымучил макрос, который находит средние значения по определенным условиям из диапазона дат. В файле более понятно. Сейчас он ищет средние значения за три календарных (один за одним) дня. Как добавить еще условие для поиска, например значений за четыре, пять, и т.д. (по числу введенному в ячейку) дней. Обязательное условие - даты должны идти по календарю (друг за другом). Спасибо!
К сообщению приложен файл: 8491868.xls (40.5 Kb)
 
Ответить
СообщениеЗдравствуйте! Опять требуется помощь...
Вымучил макрос, который находит средние значения по определенным условиям из диапазона дат. В файле более понятно. Сейчас он ищет средние значения за три календарных (один за одним) дня. Как добавить еще условие для поиска, например значений за четыре, пять, и т.д. (по числу введенному в ячейку) дней. Обязательное условие - даты должны идти по календарю (друг за другом). Спасибо!

Автор - pechkin
Дата добавления - 15.11.2014 в 14:05
alex1248 Дата: Суббота, 15.11.2014, 15:01 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
pechkin, посмотрите.
К сообщению приложен файл: 8491868-111.xls (51.5 Kb)


skype alex12481632
Qiwi +79276708519
 
Ответить
Сообщениеpechkin, посмотрите.

Автор - alex1248
Дата добавления - 15.11.2014 в 15:01
RAN Дата: Суббота, 15.11.2014, 16:27 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[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
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 15.11.2014, 17:56
 
Ответить
Сообщение[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
[/vba]

Автор - RAN
Дата добавления - 15.11.2014 в 16:27
pechkin Дата: Суббота, 15.11.2014, 17:00 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 49 ±
Замечаний: 0% ±

2003
Спасибо, alex1248! RAN тоже благодарность! Ваш работает быстрее. Вот бы еще закоментировать макросы...
 
Ответить
СообщениеСпасибо, alex1248! RAN тоже благодарность! Ваш работает быстрее. Вот бы еще закоментировать макросы...

Автор - pechkin
Дата добавления - 15.11.2014 в 17:00
RAN Дата: Суббота, 15.11.2014, 17:57 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Добавил


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеДобавил

Автор - RAN
Дата добавления - 15.11.2014 в 17:57
alex1248 Дата: Суббота, 15.11.2014, 18:28 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
Вот бы еще закоментировать макросы...

Я просто исправил тот, что уже был.


skype alex12481632
Qiwi +79276708519


Сообщение отредактировал alex1248 - Суббота, 15.11.2014, 18:30
 
Ответить
Сообщение
Вот бы еще закоментировать макросы...

Я просто исправил тот, что уже был.

Автор - alex1248
Дата добавления - 15.11.2014 в 18:28
pechkin Дата: Воскресенье, 16.11.2014, 14:05 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 49 ±
Замечаний: 0% ±

2003
Здравствуйте!Ran, прошу прощения -посмотрите еще раз Ваш Макрос. Дело в том, что по условию диапазона дата окончания должна входить. Если диапазон длинный, то все нормально, а если состоит из заданного количества дней, то Макрос ничего не выдает. Если в строку кода [vba]
Код
Do While rt(rh).Offset(, -1).Value < Range("F2").Value
[/vba]добавить<= то работает на коротком диапазоне, а на длинном выдает ошибку
Спасибо!
К сообщению приложен файл: _123.xls (55.5 Kb)
 
Ответить
СообщениеЗдравствуйте!Ran, прошу прощения -посмотрите еще раз Ваш Макрос. Дело в том, что по условию диапазона дата окончания должна входить. Если диапазон длинный, то все нормально, а если состоит из заданного количества дней, то Макрос ничего не выдает. Если в строку кода [vba]
Код
Do While rt(rh).Offset(, -1).Value < Range("F2").Value
[/vba]добавить<= то работает на коротком диапазоне, а на длинном выдает ошибку
Спасибо!

Автор - pechkin
Дата добавления - 16.11.2014 в 14:05
RAN Дата: Воскресенье, 16.11.2014, 15:20 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Перенесите условие
Do While
Loop

[vba]
Код
Do
Loop While
[/vba]
Все остальное оставить


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Воскресенье, 16.11.2014, 16:22
 
Ответить
СообщениеПеренесите условие
Do While
Loop

[vba]
Код
Do
Loop While
[/vba]
Все остальное оставить

Автор - RAN
Дата добавления - 16.11.2014 в 15:20
pechkin Дата: Воскресенье, 16.11.2014, 16:30 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 49 ±
Замечаний: 0% ±

2003
Ну почему данные за три? Даты от и до-ВКЛЮЧИТЕЛЬНО.
Что-то не получается перенести условие
К сообщению приложен файл: _1231.xls (51.5 Kb)


Сообщение отредактировал pechkin - Воскресенье, 16.11.2014, 16:36
 
Ответить
СообщениеНу почему данные за три? Даты от и до-ВКЛЮЧИТЕЛЬНО.
Что-то не получается перенести условие

Автор - pechkin
Дата добавления - 16.11.2014 в 16:30
RAN Дата: Воскресенье, 16.11.2014, 16:47 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Что-то не получается перенести условие

???
[vba]
Код
     Do
     /////////////////
     Loop While rt(rh).Offset(, -1).Value < Range("F2").Value
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Что-то не получается перенести условие

???
[vba]
Код
     Do
     /////////////////
     Loop While rt(rh).Offset(, -1).Value < Range("F2").Value
[/vba]

Автор - RAN
Дата добавления - 16.11.2014 в 16:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Среднее значение по условиям
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!