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

 

= Мир MS Excel/Среднее значение изменяющихся чисел в ячейке - Мир MS Excel

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_, DrMini  
Среднее значение изменяющихся чисел в ячейке
vlavaden Дата: Суббота, 27.05.2017, 13:04 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 76
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте, в ячейке А1 постоянно открытого файла .xlsm каждые n секунд изменяются значения. Как в ячейке В1 отобразить среднее значение чисел из А1 за промежуток N либо среднее значение последних 20-ти чисел из А1?
К сообщению приложен файл: primer.xlsm (9.0 Kb)
 
Ответить
СообщениеЗдравствуйте, в ячейке А1 постоянно открытого файла .xlsm каждые n секунд изменяются значения. Как в ячейке В1 отобразить среднее значение чисел из А1 за промежуток N либо среднее значение последних 20-ти чисел из А1?

Автор - vlavaden
Дата добавления - 27.05.2017 в 13:04
volony Дата: Суббота, 27.05.2017, 15:39 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
ИМХО, нужно создать макрос, который будет записывать каждое новое значение в виде стандартного числа на отдельный лист, потом выводить среднее значение по этим двум листам, а потом их удалять


Gimme 6 hours to chop down a tree and I'll spend first four sharpening the axe Abraham Lincoln
 
Ответить
СообщениеИМХО, нужно создать макрос, который будет записывать каждое новое значение в виде стандартного числа на отдельный лист, потом выводить среднее значение по этим двум листам, а потом их удалять

Автор - volony
Дата добавления - 27.05.2017 в 15:39
Sandor Дата: Суббота, 27.05.2017, 18:37 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: -4 ±
Замечаний: 0% ±

Excel 2010
можно попробовать воспользоваться функцией, реагирующей на изменения на листе (функция должна быть не отдельным модулем, а на самом листе)
со следующими переменными (поэкспериментируйте)

Private Sub Worksheet_Change(ByVal Target As Range)
Set tsh2 = Worksheets("имя листа")
Target.Font.ColorIndex = ...
Target.Columns.Column
Target.Value
Target.Rows.Row

End Sub



Таргет, это Ячейка где произошло изменение


Сообщение отредактировал Sandor - Суббота, 27.05.2017, 19:54
 
Ответить
Сообщениеможно попробовать воспользоваться функцией, реагирующей на изменения на листе (функция должна быть не отдельным модулем, а на самом листе)
со следующими переменными (поэкспериментируйте)

[vba]
Private Sub Worksheet_Change(ByVal Target As Range)Set tsh2 = Worksheets("имя листа")Target.Font.ColorIndex = ...Target.Columns.ColumnTarget.ValueTarget.Rows.RowEnd Sub
[/vba]

Таргет, это Ячейка где произошло изменение

Автор - Sandor
Дата добавления - 27.05.2017 в 18:37
Pelena Дата: Суббота, 27.05.2017, 18:52 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19521
Репутация: 4634 ±
Замечаний: ±

Excel 365 & Mac Excel
Sandor, оформите код тегами с помощью кнопки # в режиме правки поста
P.S.Стесняюсь спросить, а что делает Ваш код?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеSandor, оформите код тегами с помощью кнопки # в режиме правки поста
[p.s.]Стесняюсь спросить, а что делает Ваш код?[/p.s.]

Автор - Pelena
Дата добавления - 27.05.2017 в 18:52
Sandor Дата: Суббота, 27.05.2017, 19:20 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: -4 ±
Замечаний: 0% ±

Excel 2010
это вообще-то не программа
а операторы и переменные, которые можно использовать, не мучаясь с синтаксисом

поэтому ЭТО ничего не делает, но дает возможность делать
в момент любого изменения на листе запускается этот модуль
переменная Таргет дает нам возможность работать с этой меняющейся ячейкой
а уж дальше что хотим, то и делаем

и пардоньте, как ни исправлял тегами, получается только хуже
как вариант все в одну строку, т.е. куда менее читабельно


Сообщение отредактировал Sandor - Суббота, 27.05.2017, 19:21
 
Ответить
Сообщениеэто вообще-то не программа
а операторы и переменные, которые можно использовать, не мучаясь с синтаксисом

поэтому ЭТО ничего не делает, но дает возможность делать
в момент любого изменения на листе запускается этот модуль
переменная Таргет дает нам возможность работать с этой меняющейся ячейкой
а уж дальше что хотим, то и делаем

и пардоньте, как ни исправлял тегами, получается только хуже
как вариант все в одну строку, т.е. куда менее читабельно

Автор - Sandor
Дата добавления - 27.05.2017 в 19:20
vlavaden Дата: Суббота, 27.05.2017, 20:35 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 76
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Sandor, 27.05.2017 в 18:37, в сообщении № 3 ( писал(а)):
можно попробовать воспользоваться функцией, реагирующей на изменения на листе (функция должна быть не отдельным модулем, а на самом листе)
со следующими переменными (поэкспериментируйте)

Спасибо, но ничего не выходит, даже не представляю как это может работать...
 
Ответить
Сообщение
Цитата Sandor, 27.05.2017 в 18:37, в сообщении № 3 ( писал(а)):
можно попробовать воспользоваться функцией, реагирующей на изменения на листе (функция должна быть не отдельным модулем, а на самом листе)
со следующими переменными (поэкспериментируйте)

Спасибо, но ничего не выходит, даже не представляю как это может работать...

Автор - vlavaden
Дата добавления - 27.05.2017 в 20:35
Sandor Дата: Суббота, 27.05.2017, 21:20 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: -4 ±
Замечаний: 0% ±

Excel 2010
вот так к примеру

Private Sub Worksheet_Change(ByVal Target As Range)
Set tsh = Worksheets(1)
n = n + 1
If n > 20 Then n = n - 20
ss = ss - s(n)
s(n) = Target.Value
ss = ss + s(n)
sr = ss / 20
Application.EnableEvents = False
tsh.Cells(1, 2).Value = sr
Application.EnableEvents = True
End Sub



и нужно добавить в головной модуль проекта

Public s(1 To 20) As Double, ss As Double, n As Integer



но этот пример не защищен от Ваших попыток менять еще какие то ячейки хоть руками
будут сбои
можно прописать, чтобы если таргет не 1-я ячейка идти сразу на выход
тогда не будет сбоить
 
Ответить
Сообщениевот так к примеру

[vba]
Private Sub Worksheet_Change(ByVal Target As Range)Set tsh = Worksheets(1)n = n + 1If n > 20 Then n = n - 20ss = ss - s(n)s(n) = Target.Valuess = ss + s(n)sr = ss / 20Application.EnableEvents = Falsetsh.Cells(1; 2).Value = srApplication.EnableEvents = ТrueEnd Sub
[/vba]

и нужно добавить в головной модуль проекта
[vba]
Public s(1 To 20) As Double, ss As Double, n As Integer
[/vba]

но этот пример не защищен от Ваших попыток менять еще какие то ячейки хоть руками
будут сбои
можно прописать, чтобы если таргет не 1-я ячейка идти сразу на выход
тогда не будет сбоить

Автор - Sandor
Дата добавления - 27.05.2017 в 21:20
Sandor Дата: Суббота, 27.05.2017, 21:26 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: -4 ±
Замечаний: 0% ±

Excel 2010
пробую приложить Ваш файл с исправлениями
см
К сообщению приложен файл: _primer.xlsm (15.6 Kb)
 
Ответить
Сообщениепробую приложить Ваш файл с исправлениями
см

Автор - Sandor
Дата добавления - 27.05.2017 в 21:26
vlavaden Дата: Суббота, 27.05.2017, 22:08 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 76
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Sandor, 27.05.2017 в 21:26, в сообщении № 8 ( писал(а)):
пробую приложить Ваш файл с исправлениями

Спасибо, вроде работает, осталось протестировать в "боевых" условиях, но это только в понедельник.
 
Ответить
Сообщение
Цитата Sandor, 27.05.2017 в 21:26, в сообщении № 8 ( писал(а)):
пробую приложить Ваш файл с исправлениями

Спасибо, вроде работает, осталось протестировать в "боевых" условиях, но это только в понедельник.

Автор - vlavaden
Дата добавления - 27.05.2017 в 22:08
Sandor Дата: Суббота, 27.05.2017, 22:16 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: -4 ±
Замечаний: 0% ±

Excel 2010
помните про скрытые проблемы
"потрогаете" любую ячейку, щелкнет счетчик )))
спасибо!
 
Ответить
Сообщениепомните про скрытые проблемы
"потрогаете" любую ячейку, щелкнет счетчик )))
спасибо!

Автор - Sandor
Дата добавления - 27.05.2017 в 22:16
vlavaden Дата: Суббота, 27.05.2017, 22:32 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 76
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Sandor, 27.05.2017 в 22:16, в сообщении № 10 ( писал(а)):
помните про скрытые проблемы

Да, Вы правы, выдаёт среднее по всем ячейкам...Печально...
 
Ответить
Сообщение
Цитата Sandor, 27.05.2017 в 22:16, в сообщении № 10 ( писал(а)):
помните про скрытые проблемы

Да, Вы правы, выдаёт среднее по всем ячейкам...Печально...

Автор - vlavaden
Дата добавления - 27.05.2017 в 22:32
Sandor Дата: Суббота, 27.05.2017, 22:33 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: -4 ±
Замечаний: 0% ±

Excel 2010
сами не можете поправить?
давайте сейчас дам прогу с исправлениями
сама контролируемая ячейка всегда именно А1 ?


Сообщение отредактировал Sandor - Суббота, 27.05.2017, 22:34
 
Ответить
Сообщениесами не можете поправить?
давайте сейчас дам прогу с исправлениями
сама контролируемая ячейка всегда именно А1 ?

Автор - Sandor
Дата добавления - 27.05.2017 в 22:33
Sandor Дата: Суббота, 27.05.2017, 22:39 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: -4 ±
Замечаний: 0% ±

Excel 2010

Private Sub Worksheet_Change(ByVal Target As Range)
Set tsh = Worksheets(1)
a = Target.Columns.Column
If a <> 1 Then GoTo line1:
a = Target.Rows.Row
If a <> 1 Then GoTo line1:
n = n + 1
If n > 20 Then n = n - 20
ss = ss - s(n)
s(n) = Target.Value
ss = ss + s(n)
sr = ss / 20
Application.EnableEvents = False
tsh.Cells(1, 2).Value = sr
Application.EnableEvents = True
line1:
End Sub



от так только на ячейку а1 будет реагировать
 
Ответить
Сообщение[vba]
Private Sub Worksheet_Change(ByVal Target As Range)Set tsh = Worksheets(1)a = Target.Columns.ColumnIf a <> 1 Then GoTo line1:a = Target.Rows.RowIf a <> 1 Then GoTo line1:n = n + 1If n > 20 Then n = n - 20ss = ss - s(n)s(n) = Target.Valuess = ss + s(n)sr = ss / 20Application.EnableEvents = Falsetsh.Cells(1; 2).Value = srApplication.EnableEvents = Тrueline1:End Sub
[/vba]

от так только на ячейку а1 будет реагировать

Автор - Sandor
Дата добавления - 27.05.2017 в 22:39
Pelena Дата: Суббота, 27.05.2017, 22:45 | Сообщение № 14
Группа: Админы
Ранг: Местный житель
Сообщений: 19521
Репутация: 4634 ±
Замечаний: ±

Excel 365 & Mac Excel
Не уверена, но где-то мелькало, что если данные подгружаются автоматом (через DDE), то событие Worksheet_Change не работает

Цитата vlavaden, 27.05.2017 в 22:08, в сообщении № 9 ( писал(а)):
осталось протестировать в "боевых" условиях
Надеюсь, отпишетесь о результатах?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеНе уверена, но где-то мелькало, что если данные подгружаются автоматом (через DDE), то событие Worksheet_Change не работает

Цитата vlavaden, 27.05.2017 в 22:08, в сообщении № 9 ( писал(а)):
осталось протестировать в "боевых" условиях
Надеюсь, отпишетесь о результатах?

Автор - Pelena
Дата добавления - 27.05.2017 в 22:45
vlavaden Дата: Суббота, 27.05.2017, 22:47 | Сообщение № 15
Группа: Пользователи
Ранг: Участник
Сообщений: 76
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Sandor, 27.05.2017 в 22:39, в сообщении № 13 ( писал(а)):
от так только на ячейку а1 будет реагировать

Спасибо, ещё раз, теперь всё как надо!
 
Ответить
Сообщение
Цитата Sandor, 27.05.2017 в 22:39, в сообщении № 13 ( писал(а)):
от так только на ячейку а1 будет реагировать

Спасибо, ещё раз, теперь всё как надо!

Автор - vlavaden
Дата добавления - 27.05.2017 в 22:47
Sandor Дата: Суббота, 27.05.2017, 22:55 | Сообщение № 16
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: -4 ±
Замечаний: 0% ±

Excel 2010
Цитата Pelena, 27.05.2017 в 22:45, в сообщении № 14 ( писал(а)):
если данные подгружаются автоматом (через DDE), то событие Worksheet_Change не работает

вполне может быть
но помню когда-то давно мы автоматом анализироваали котировки
а шли они через DDE
как-то таки решили эту проблему
точно уж не помню
надо в реале побаловаться
 
Ответить
Сообщение
Цитата Pelena, 27.05.2017 в 22:45, в сообщении № 14 ( писал(а)):
если данные подгружаются автоматом (через DDE), то событие Worksheet_Change не работает

вполне может быть
но помню когда-то давно мы автоматом анализироваали котировки
а шли они через DDE
как-то таки решили эту проблему
точно уж не помню
надо в реале побаловаться

Автор - Sandor
Дата добавления - 27.05.2017 в 22:55
vlavaden Дата: Суббота, 27.05.2017, 23:15 | Сообщение № 17
Группа: Пользователи
Ранг: Участник
Сообщений: 76
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Pelena, 27.05.2017 в 22:45, в сообщении № 14 ( писал(а)):
Надеюсь, отпишетесь о результатах?

Это только в понедельник.
 
Ответить
Сообщение
Цитата Pelena, 27.05.2017 в 22:45, в сообщении № 14 ( писал(а)):
Надеюсь, отпишетесь о результатах?

Это только в понедельник.

Автор - vlavaden
Дата добавления - 27.05.2017 в 23:15
vlavaden Дата: Понедельник, 29.05.2017, 19:56 | Сообщение № 18
Группа: Пользователи
Ранг: Участник
Сообщений: 76
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Pelena, 27.05.2017 в 22:45, в сообщении № 14 ( писал(а)):
Надеюсь, отпишетесь о результатах?

Подсказали такой вот код, работает хорошо, но округляет до сотых, можно ли подправить, чтобы точность была 4-5 знаков после запятой?
'в ОБЩИЙ модуль

Public iCount As Integer
Public iVal As Double


'в модуль ЛИСТА


Private Sub Worksheet_Calculate()
iCount = iCount + 1
iVal = iVal + Range("A1").Value
If iCount = 20 Then
    Range("B1").Value = Round(iVal / iCount, 2)
    iCount = Empty
    iVal = Empty
End If
End Sub

 
Ответить
Сообщение
Цитата Pelena, 27.05.2017 в 22:45, в сообщении № 14 ( писал(а)):
Надеюсь, отпишетесь о результатах?

Подсказали такой вот код, работает хорошо, но округляет до сотых, можно ли подправить, чтобы точность была 4-5 знаков после запятой?
'в ОБЩИЙ модуль
[vba]
Public iCount As IntegerPublic iVal As Double
[/vba]
'в модуль ЛИСТА
[vba]
Private Sub Worksheet_Calculate()iCount = iCount + 1iVal = iVal + Range("A1").ValueIf iCount = 20 Then    Range("B1").Value = Round(iVal / iCount, 2)    iCount = Empty    iVal = EmptyEnd IfEnd Sub
[/vba]

Автор - vlavaden
Дата добавления - 29.05.2017 в 19:56
Pelena Дата: Понедельник, 29.05.2017, 20:24 | Сообщение № 19
Группа: Админы
Ранг: Местный житель
Сообщений: 19521
Репутация: 4634 ±
Замечаний: ±

Excel 365 & Mac Excel
За округление отвечает функция Round, измените второй аргумент с 2 на 4 или 5


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗа округление отвечает функция Round, измените второй аргумент с 2 на 4 или 5

Автор - Pelena
Дата добавления - 29.05.2017 в 20:24
vlavaden Дата: Понедельник, 29.05.2017, 20:36 | Сообщение № 20
Группа: Пользователи
Ранг: Участник
Сообщений: 76
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Pelena, 29.05.2017 в 20:24, в сообщении № 19 ( писал(а)):
За округление отвечает функция Round, измените второй аргумент с 2 на 4 или 5

Спасибо, очевидного не увидел.
 
Ответить
Сообщение
Цитата Pelena, 29.05.2017 в 20:24, в сообщении № 19 ( писал(а)):
За округление отвечает функция Round, измените второй аргумент с 2 на 4 или 5

Спасибо, очевидного не увидел.

Автор - vlavaden
Дата добавления - 29.05.2017 в 20:36
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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