Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна функция в Excel Сумма ряда. / 25 сообщений из 30, страница 1 из 2
27.09.2006, 08:22:16
    #34014333
Afrikanych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
Выручайте, братцы. Поиск чет не помог, может я притупил.
Проблема в следующем: хотелось бы иметь в Экселе пользовательскую функцию, рассчитывающую сумму ряда неизвестной априорно длины примерно такого вида:
МояСумм(k,m, Fn(x,y)), где k, m – длина ряда и Fn(x,y) – рассчитываются на предварительном этапе.
Встроенная РЯД.СУММ ссылается на вектор коеффициентов фиксированной длины, поэтому непригодна. Подозреваю, что нужно лепить в ВБ. Поскольку опыта работы в ВБ не имею совсем, прошу подробную инструкцию по вкрячиванию такой вот функции в таблицу, вернее в несколько таблиц. Можно в мыло.
Если кто-ть сделает быстро, был бы счастлив. Нужно срочно.
...
Рейтинг: 0 / 0
27.09.2006, 09:07:15
    #34014403
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
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
27.09.2006, 11:19:57
    #34014930
Afrikanych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
Пасиб большой.
Я так понял, что описывать тип аргументов специально не нужно? (в VBA действительно лох полный, прежде все паскалился)
А функцию нужно описывать как действительную? или тока аргументы?
Ну, в общем это и почитать в книжке можно, наверное.
А вот суммирование, вероятно нужно делать циклом. Если синтаксис цикличных операций похож на паскалевский - разберусь, нет - обращусь за помощью
...
Рейтинг: 0 / 0
27.09.2006, 19:04:23
    #34016987
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
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
28.09.2006, 01:12:15
    #34017419
Afrikanych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
Двойной пасиб!!!
Кста, для вызова редактора ВБ нажимать нужно не просто F11, a Alt+F11
...
Рейтинг: 0 / 0
28.09.2006, 04:52:13
    #34017464
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
А можно конкретный пример ситуации, с которой РЯД.СУММ не справляется (если можно, исходные данные и ожидаемый результат)? А то сумнения-с меня грызуть :-)

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

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

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
04.10.2006, 00:38:12
    #34030243
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
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
04.10.2006, 00:45:26
    #34030251
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
AfrikanychСм. справку:
"Коэффициенты — набор коэффициентов при соответствующих степенях x. Количество значений в аргументе коэффициенты определяет количество членов степенного ряда. Например, если в аргументе коэффициенты три значения, то степенной ряд содержит три слагаемых."

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

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

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


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

KL
[MVP - Microsoft Excel]

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

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


[MVP - Microsoft Excel]

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

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

Application.Fact(k)

или

WorksheetFunction.Fact(k)

или

Application.WorksheetFunction.Fact(k)

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

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

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


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

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
04.10.2006, 12:46:28
    #34031254
Afrikanych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
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
04.10.2006, 13:17:30
    #34031402
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
вот твоя 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
04.10.2006, 13:48:56
    #34031578
Afrikanych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
Ептть, проперло, наконец. Лямбда и Мю - не константы, пользовательские варьируемые параметры, потому их нужно было определить аргументами функции. А я думал, что функция вызовет их из ячеек просто по имени. Теперь все как надоть.
автор
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
04.10.2006, 15:49:00
    #34032232
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
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
04.10.2006, 15:55:09
    #34032264
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна функция в Excel Сумма ряда.
В любом случае, если Лямбда и Мю содержат переменные, они должны быть включены как параметры для того, чтобы функция могла вовремя отреагировать на их изменение без необх. делать функцию летучей.

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

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

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

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


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