Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 11:15   #1
Highlander
Новичок
Джуниор
 
Регистрация: 23.01.2010
Сообщений: 1
По умолчанию Как улучшить макрос?

Уважаемые форумчане!

Мы исследуем реакцию растений в зависимости от определенных климатических параметров. В прошлом месяце мы получили данные из Гидрометеоцентра с сети метеостанций (температура воздуха, осадки, и т.п.). Для обработки этих данных мы используем специальную программу для расчета средних, максимумов, минимумов, корреляций, трендов и т.п.

Проблема в том, что программа работает только со средними дневными значениями (например, 01.01.1991 -12С), но часть данных (с новых метеостанций) представлена в т.н. "часовом формате", т.е. для каждого дня у меня есть 24 измерения с интервалом в 1 час. Перед обработкой мне нужно все данные привести в один среднедневной формат, т.е. рассчитать среднедневные значения на основе часовых.

Решением данной проблемы, по-моему мнению, может быть макрос. Честно говоря, до вчерашнего дня я даже и не подозревал о их существовании, но через некоторое время у меня получился такой макрос:

Sub Average()
'
' Average Макрос
' Макрос записан 23.01.2010
'
' Сочетание клавиш: Ctrl+q
'
Range("D23").Select
ActiveCell.FormulaR1C1 = "Average"
Range("D24").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(R[-23]C[-1]:RC[-1])"
Range("D23 : D24").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=24
Range("D47").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=30
Range("D71").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=18
Range("D95").Select
ActiveSheet.Paste
End Sub

Вопрос в том, как "зациклить" макрос, т.е. сдвигать расчет среднеарифметической постоянно на 24 шага вниз до конца массива данных и не делать это вручную?
К сожалению, четкого объяснения для "чайников" я не нашел, а существующие примеры мне не подходят...Надеюсь на Ваш совет!

С уважением,
Сергей
Вложения
Тип файла: rar Climate_example.rar (10.4 Кб, 11 просмотров)
Highlander вне форума Ответить с цитированием
Старый 23.01.2010, 12:15   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Последнее значение будет верно при окончании таблицы на 23 часа

Код:

Sub Average()

    Dim f
Dim summm As Double
f = ActiveSheet.UsedRange.Columns(3).Value
For n = 0 To UBound(f) Step 24
summm = 0
For m = 1 To 24
summm = summm + f(m + n, 1)
Next
On Error Resume Next
ActiveSheet.Cells(n + 23, 4) = "Average"
ActiveSheet.Cells(n + 24, 4) = summm / 24
Next
    
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как улучшить форум. Гриха О форуме и сайтах клуба 2798 30.11.2011 03:03
Как реально улучшить форум: тема о спаме Viteef О форуме и сайтах клуба 6 26.06.2009 16:29
Как улучшить fps ? minatavr84 Компьютерное железо 2 26.03.2009 23:59
Как улучшить качество скриншота Arkuz Мультимедиа в Delphi 6 10.03.2009 18:52
Как можно улучшить эффективность и качество ПП? Evgenii Помощь студентам 5 29.01.2009 16:22