powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна функция в Excel Сумма ряда.
30 сообщений из 30, показаны все 2 страниц
Нужна функция в Excel Сумма ряда.
    #34014333
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выручайте, братцы. Поиск чет не помог, может я притупил.
Проблема в следующем: хотелось бы иметь в Экселе пользовательскую функцию, рассчитывающую сумму ряда неизвестной априорно длины примерно такого вида:
МояСумм(k,m, Fn(x,y)), где k, m – длина ряда и Fn(x,y) – рассчитываются на предварительном этапе.
Встроенная РЯД.СУММ ссылается на вектор коеффициентов фиксированной длины, поэтому непригодна. Подозреваю, что нужно лепить в ВБ. Поскольку опыта работы в ВБ не имею совсем, прошу подробную инструкцию по вкрячиванию такой вот функции в таблицу, вернее в несколько таблиц. Можно в мыло.
Если кто-ть сделает быстро, был бы счастлив. Нужно срочно.
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34014403
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Нажимаете F11 (ну это я говорю если вы вообще не разбираетесь в VBA :)
2. Затем вставляете модуль (Insert>Module)
3. И создате функцию что-то вроде этого:
Код: plaintext
1.
2.
3.
Function MySum(a%, b%) As Integer
    MySum = a + b
End Function
Тело и параметры функции меняете на свое усмотрение
4. В Excel'е в любой ячейке (для вышеприведенного случая) =MySum(1;2)
т.е. функция как обычно
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34014930
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пасиб большой.
Я так понял, что описывать тип аргументов специально не нужно? (в VBA действительно лох полный, прежде все паскалился)
А функцию нужно описывать как действительную? или тока аргументы?
Ну, в общем это и почитать в книжке можно, наверное.
А вот суммирование, вероятно нужно делать циклом. Если синтаксис цикличных операций похож на паскалевский - разберусь, нет - обращусь за помощью
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34016987
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AfrikanychЯ так понял, что описывать тип аргументов специально не нужно? (в VBA действительно лох полный, прежде все паскалился)
Можно не описывать, но лучше описывать. Аргументы без описания принимают тип Variant со всеми вытекающими. Впрочем, в приведеном примере, процентик после имени аргумента задает его тип как целый :) Это страшное наследие оригинального BASIC и его использовать можно, но не желательно.

AfrikanychА функцию нужно описывать как действительную? или тока аргументы???? Какого типа аргументы хочешь, такого и пишешь. Какого типа функцию надо, такой тип и пишешь. Например принять вещественное и целое числа как аргументы и вернуть строку:
function aaa(x As Real, y As Integer) As String.

AfrikanychА вот суммирование, вероятно нужно делать циклом. Если синтаксис цикличных операций похож на паскалевский - разберусь, нет - обращусь за помощью
Код: plaintext
1.
2.
for i= 1  to  10 
   d = d * i
next
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34017419
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Двойной пасиб!!!
Кста, для вызова редактора ВБ нажимать нужно не просто F11, a Alt+F11
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34017464
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно конкретный пример ситуации, с которой РЯД.СУММ не справляется (если можно, исходные данные и ожидаемый результат)? А то сумнения-с меня грызуть :-)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34023393
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)А можно конкретный пример ситуации, с которой РЯД.СУММ не справляется (если можно, исходные данные и ожидаемый результат)? А то сумнения-с меня грызуть :-)Да запросто! Напиши параметры для РЯД.СУММ с ошибкой и оно сразу перестанет справляться с данными :)
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34029599
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
См. справку:
"Коэффициенты — набор коэффициентов при соответствующих степенях x. Количество значений в аргументе коэффициенты определяет количество членов степенного ряда. Например, если в аргументе коэффициенты три значения, то степенной ряд содержит три слагаемых."

Т.е. можно сослаться в функции РЯД.СУММ на некий диапазон, содержащий к-ты, но! Мне-то нужна универсальная формула с априорно неизвестным количеством членов ряда. Следовательно, создать ограниченный массив к-тов или заготовить для него диапазон я априорно не могу.
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34030222
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опа!
Оказывается, в пользовательской функции нельзя использовать стандартные русскоязычные функции.
В такой вот конструкции:

Function Sum1(FirstNum As Integer, LastNum As Integer) As Single
Dim k As Integer
Dim S As Single
S = 0
For k = FirstNum To LastNum
S = S + (Лямбда / Мю) ^ k / фактр(k)
Next
Sum1 = S
End Function

ругается на русский ФАКТР ( Sub or function not defined)
Че делать-то? Где я в русскоязычном Экселе стандартные функции на английском возьму? И что делать с запятыми-точкойс запятыми? Я так понял, что в английской версии аргументы функций разделяются запятыми в отличие от русской.
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34030243
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AfrikanychОказывается, в пользовательской функции нельзя использовать стандартные русскоязычные функции. :-)

Afrikanychругается на русский ФАКТР ( Sub or function not defined)
Че делать-то? FACT

AfrikanychГде я в русскоязычном Экселе стандартные функции на английском возьму? Например введи свою формулу в А1 и запусти след. строку:

MsgBox [A1].Formula

Если хочешь чего поудобнее, тогда http://members.chello.nl/jvolk/keepitcool/download.html (TranslateIt)

AfrikanychИ что делать с запятыми-точкойс запятыми? Я так понял, что в английской версии аргументы функций разделяются запятыми в отличие от русской. Правильно понял . Только не в английской версии (вернее не только в ней), а вообще в VBA - который является "US-centric"

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34030251
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AfrikanychСм. справку:
"Коэффициенты — набор коэффициентов при соответствующих степенях x. Количество значений в аргументе коэффициенты определяет количество членов степенного ряда. Например, если в аргументе коэффициенты три значения, то степенной ряд содержит три слагаемых."

Т.е. можно сослаться в функции РЯД.СУММ на некий диапазон, содержащий к-ты, но! Мне-то нужна универсальная формула с априорно неизвестным количеством членов ряда. Следовательно, создать ограниченный массив к-тов или заготовить для него диапазон я априорно не могу.

Это все твои рассуждения, ты дай конкретный пример c имеющимися параметрами и искомым результатом ;-)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34030291
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)[quot Afrikanych]См. справку:


Это все твои рассуждения, ты дай конкретный пример c имеющимися параметрами и искомым результатом ;-)

KL
[MVP - Microsoft Excel]

Дык пример-то выше. Конечно, я могу ввести в А1 длину степенного ряда M, затем придется макросом (для меня - нетривиальным) зарезервировать - добавить в таблицу столбец/строку, заполнить коеффициентами 1/FACT(K) диапазон из М ячеек в этом столбце/строке, чтобы на него можно было потом сослаться из РЯД.СУММ, но такой путь мне не кажется элегантным.
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34030296
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)

Afrikanychругается на русский ФАКТР ( Sub or function not defined)
Че делать-то? FACT


[MVP - Microsoft Excel]

На него так же ругается!
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34030302
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Afrikanych FACT
На него так же ругается!

Дык ты его по-человечески вызывай:

Application.Fact(k)

или

WorksheetFunction.Fact(k)

или

Application.WorksheetFunction.Fact(k)

Ну и функцию почисть - переменные Лямбда и Мю откуда значения получают?
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34030305
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AfrikanychДык пример-то выше. Конечно, я могу ввести в А1 длину степенного ряда M, затем придется макросом (для меня - нетривиальным) зарезервировать - добавить в таблицу столбец/строку, заполнить коеффициентами 1/FACT(K) диапазон из М ячеек в этом столбце/строке, чтобы на него можно было потом сослаться из РЯД.СУММ, но такой путь мне не кажется элегантным.

ты мне дай значения FirstNum , LastNum , Лямбда , Мю и правильный ответ , а я попробую показать тебе как это сделать стандартной формулой. Надеюсь FirstNum и LastNum беруться из ячеек?

А разбираться мне, гуманитарию, с алгоритмом функции просто времени нет, да и нужды тоже :-)


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34030307
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял, Лямбда и Мю - константы (???)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34031254
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sum1= от 0 до (m-1) Σ(λ/μ )^k/k!
m, λ, μ – параметры пользователя, вводятся, ессно, в ячейки и из них берутся ссылками. Втупую расчет дает: 8103,014
Код по твоему совету покрутил, не лезет все-равно, зараза. Лямбды по-англицки написал, конечно.
Резалт - ошибка #ЗНАЧ

FirstNum LastNum Lambda Mu Sum 1
0 25 0,9 0,1 =Sum1(FirstNum;LastNum)
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34031402
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот твоя UDF (пример прилагаю):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Const Лямбда =  0 . 9 
Const Мю =  0 . 1 

Function Sum1(FirstNum As Integer, LastNum As Integer) As Double
    Dim k As Long, s As Double
    For k = FirstNum To LastNum
        s = s + (Лямбда / Мю) ^ k / Application.Fact(k)
    Next k
    Sum1 = s
End Function

Теперь (мне) осталось определить соответствия между твоими переменными:

FirstNum
LastNum
Лямбда
Мю


и теми, которые использует функция РЯД.СУММ:

x
n
m
коэффициенты


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34031578
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ептть, проперло, наконец. Лямбда и Мю - не константы, пользовательские варьируемые параметры, потому их нужно было определить аргументами функции. А я думал, что функция вызовет их из ячеек просто по имени. Теперь все как надоть.
автор
Function Sum1(FirstNum As Long, LastNum As Long, Lambda As Double, Mu As Double) As Double
Dim k As Long, s As Double
s = 0
For k = FirstNum To LastNum
s = s + (Lambda / Mu) ^ k / Application.Fact(k)
Next
Sum1 = s
End Function
автор
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34032232
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AfrikanychЕптть, проперло, наконец. Лямбда и Мю - не константы, пользовательские варьируемые параметры, потому их нужно было определить аргументами функции. А я думал, что функция вызовет их из ячеек просто по имени.Если Лямбда и Мю это имена присвоенные рангам , то:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub test0()
    'from the VBA module of the sheets where the name is stored
    MsgBox Range("Лямбда")
End Sub

Sub test1()
    'from the VBA module of any of the sheets of the same workbook
    MsgBox [Лямбда]
End Sub

Sub test2()
    'from any VBA module of the same workbook
    MsgBox ThisWorkbook.Sheets( 1 ).Range("Лямбда")
End Sub

Sub test3()
    'from any VBA module
    MsgBox Workbooks("Book1.xls").Names("Лямбда").RefersToRange
End Sub

Afrikanych
Function Sum1(FirstNum As Long, LastNum As Long, Lambda As Double, Mu As Double) As Double
Dim k As Long, s As Double
s = 0
For k = FirstNum To LastNum
s = s + (Lambda / Mu) ^ k / Application.Fact(k)
Next
Sum1 = s
End Function
Нет нужды специально присваивать переменной s значение 0, т.к. при декларировании переменной в любом числовом типе, 0 - это значение по умолчанию.

P.S. Как насчет моего вопроса о соответствии между переменными? Стандартная формула наверняка будет эффективнее UDF :-)
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34032264
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае, если Лямбда и Мю содержат переменные, они должны быть включены как параметры для того, чтобы функция могла вовремя отреагировать на их изменение без необх. делать функцию летучей.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34032616
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том-то и проблема, что полного соответствия нет.
x=(Lambda/Mu)
n=FirstNum - в моем случае 0, но хотелось функцию поуниверсальнее
m=1
А вот с вектором коэффициентов засада. Для последнего члена ряда j=LastNum-1, но LastNum определяется пользователем, поэтому сформировать вектор
ak=1/(k-1)! (расчитать все коэффициенты и заполнить диапазон ячеек) я смогу только после определения Last Num.
Попробуй напиши в такой ситуации РЯД.СУММ, которая должна сослаться на уже заполненный вектор коэффициентов и только через него косвенно определить длину ряда.
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34032807
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лови файл ;-)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34032975
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно также присвоить формуле имя как в решении 4 в прилагаемом файле.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34033275
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон - немного напутал с присвоенными именами и забыл включить автоматический пересчет. Теперь, вроде, все верно :-)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34033295
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>with one of them always returning the #NAME error value (#Имя)

У меня обе выдают ошибку. Работает только Sum1. Научишь вставлять копию экрана - покажу.
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34033301
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Afrikanych>with one of them always returning the #NAME error value (#Имя)

У меня обе выдают ошибку. Работает только Sum1. Научишь вставлять копию экрана - покажу.

Тогда попробуй ввести вручную:

в [B11] с помощью CTRL+SHIFT+ENTER

=РЯД.СУММ(Lambda/Mu;n;m;1/ФАКТР(СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;(LastNum-n)+1))-1))

в [B12] с помощью CTRL+SHIFT+ENTER

=РЯД.СУММ(Lambda/Mu;n;m;1/ФАКТР(СТРОКА(ДВССЫЛ("1:"&(LastNum-n)+1))-1))

в имя MySERIESSUM.RU :

1) выбрать [G24]
2) меню Вставка-Имя-Присвоить...
3) имя: MySERIESSUM.RU
4) формула: =РЯД.СУММ(E25/F25;B25;D25;1/ФАКТР(СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;(C25-B25)+1))-1))
5) кнопка Добавить
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34033302
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В приложенном файле 1 и 2 формулы...

- переводятся автоматически , т.к. не используют функций из пакета инструментов для анализа (ATP)

- не требуют ввода с помощью CTRL+SHIFT+ENTER

- вдвое быстрее чем UDF

- не требуют наличия доп. ресурсов ввиде кода VBA или надстройки ATP для работы на любой машине.

- Первая лучше второй потому что она нелетучая


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34035449
Afrikanych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!!! Век живи - век учись.

Вставленная руками
=РЯД.СУММ(Lambda/Mu;n;m;1/ФАКТР(СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;(LastNum-n)+1))-1))
работает, но выдает ошибочный результат 1,133138021
правильный 1,645833333
для LastNum=3, Lambda=1, Mu=2
Функции 1,2 работают правильно

Может самопальная VBA-функция и менее эффективна, но она доступнее для понимания. Обычная картина.
...
Рейтинг: 0 / 0
Нужна функция в Excel Сумма ряда.
    #34035889
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Afrikanychправильный 1,645833333
для LastNum=3, Lambda=1, Mu=2
Странно! У меня все формулы выдают один и тот же правильный результат. "Может в консерватории что подправить?" (М.Жванецкий) :-)))

AfrikanychМожет самопальная VBA-функция и менее эффективна, но она доступнее для понимания. Обычная картина.
Дело, как я уже указывал в сравнительном анализе на листе, не только в эффективности (хотя 0,79 мс для одной ячейки это довольно много), ну да дело хозяйское.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна функция в Excel Сумма ряда.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]