
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.09.2006, 08:22:16
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Выручайте, братцы. Поиск чет не помог, может я притупил. Проблема в следующем: хотелось бы иметь в Экселе пользовательскую функцию, рассчитывающую сумму ряда неизвестной априорно длины примерно такого вида: МояСумм(k,m, Fn(x,y)), где k, m – длина ряда и Fn(x,y) – рассчитываются на предварительном этапе. Встроенная РЯД.СУММ ссылается на вектор коеффициентов фиксированной длины, поэтому непригодна. Подозреваю, что нужно лепить в ВБ. Поскольку опыта работы в ВБ не имею совсем, прошу подробную инструкцию по вкрячиванию такой вот функции в таблицу, вернее в несколько таблиц. Можно в мыло. Если кто-ть сделает быстро, был бы счастлив. Нужно срочно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.09.2006, 09:07:15
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
1. Нажимаете F11 (ну это я говорю если вы вообще не разбираетесь в VBA :) 2. Затем вставляете модуль (Insert>Module) 3. И создате функцию что-то вроде этого: Код: plaintext 1. 2. 3. 4. В Excel'е в любой ячейке (для вышеприведенного случая) =MySum(1;2) т.е. функция как обычно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.09.2006, 11:19:57
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Пасиб большой. Я так понял, что описывать тип аргументов специально не нужно? (в VBA действительно лох полный, прежде все паскалился) А функцию нужно описывать как действительную? или тока аргументы? Ну, в общем это и почитать в книжке можно, наверное. А вот суммирование, вероятно нужно делать циклом. Если синтаксис цикличных операций похож на паскалевский - разберусь, нет - обращусь за помощью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.09.2006, 19:04:23
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
AfrikanychЯ так понял, что описывать тип аргументов специально не нужно? (в VBA действительно лох полный, прежде все паскалился) Можно не описывать, но лучше описывать. Аргументы без описания принимают тип Variant со всеми вытекающими. Впрочем, в приведеном примере, процентик после имени аргумента задает его тип как целый :) Это страшное наследие оригинального BASIC и его использовать можно, но не желательно. AfrikanychА функцию нужно описывать как действительную? или тока аргументы???? Какого типа аргументы хочешь, такого и пишешь. Какого типа функцию надо, такой тип и пишешь. Например принять вещественное и целое числа как аргументы и вернуть строку: function aaa(x As Real, y As Integer) As String. AfrikanychА вот суммирование, вероятно нужно делать циклом. Если синтаксис цикличных операций похож на паскалевский - разберусь, нет - обращусь за помощью Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2006, 01:12:15
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Двойной пасиб!!! Кста, для вызова редактора ВБ нажимать нужно не просто F11, a Alt+F11 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2006, 04:52:13
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
А можно конкретный пример ситуации, с которой РЯД.СУММ не справляется (если можно, исходные данные и ожидаемый результат)? А то сумнения-с меня грызуть :-) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.09.2006, 18:41:03
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
KL (XL)А можно конкретный пример ситуации, с которой РЯД.СУММ не справляется (если можно, исходные данные и ожидаемый результат)? А то сумнения-с меня грызуть :-)Да запросто! Напиши параметры для РЯД.СУММ с ошибкой и оно сразу перестанет справляться с данными :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2006, 17:42:53
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
См. справку: "Коэффициенты — набор коэффициентов при соответствующих степенях x. Количество значений в аргументе коэффициенты определяет количество членов степенного ряда. Например, если в аргументе коэффициенты три значения, то степенной ряд содержит три слагаемых." Т.е. можно сослаться в функции РЯД.СУММ на некий диапазон, содержащий к-ты, но! Мне-то нужна универсальная формула с априорно неизвестным количеством членов ряда. Следовательно, создать ограниченный массив к-тов или заготовить для него диапазон я априорно не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 00:05:19
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Опа! Оказывается, в пользовательской функции нельзя использовать стандартные русскоязычные функции. В такой вот конструкции: 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) Че делать-то? Где я в русскоязычном Экселе стандартные функции на английском возьму? И что делать с запятыми-точкойс запятыми? Я так понял, что в английской версии аргументы функций разделяются запятыми в отличие от русской. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 00:38:12
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
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] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 00:45:26
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
AfrikanychСм. справку: "Коэффициенты — набор коэффициентов при соответствующих степенях x. Количество значений в аргументе коэффициенты определяет количество членов степенного ряда. Например, если в аргументе коэффициенты три значения, то степенной ряд содержит три слагаемых." Т.е. можно сослаться в функции РЯД.СУММ на некий диапазон, содержащий к-ты, но! Мне-то нужна универсальная формула с априорно неизвестным количеством членов ряда. Следовательно, создать ограниченный массив к-тов или заготовить для него диапазон я априорно не могу. Это все твои рассуждения, ты дай конкретный пример c имеющимися параметрами и искомым результатом ;-) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 02:21:14
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
KL (XL)[quot Afrikanych]См. справку: Это все твои рассуждения, ты дай конкретный пример c имеющимися параметрами и искомым результатом ;-) KL [MVP - Microsoft Excel] Дык пример-то выше. Конечно, я могу ввести в А1 длину степенного ряда M, затем придется макросом (для меня - нетривиальным) зарезервировать - добавить в таблицу столбец/строку, заполнить коеффициентами 1/FACT(K) диапазон из М ячеек в этом столбце/строке, чтобы на него можно было потом сослаться из РЯД.СУММ, но такой путь мне не кажется элегантным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 02:27:29
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
KL (XL) Afrikanychругается на русский ФАКТР ( Sub or function not defined) Че делать-то? FACT [MVP - Microsoft Excel] На него так же ругается! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 03:10:03
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Afrikanych FACT На него так же ругается! Дык ты его по-человечески вызывай: Application.Fact(k) или WorksheetFunction.Fact(k) или Application.WorksheetFunction.Fact(k) Ну и функцию почисть - переменные Лямбда и Мю откуда значения получают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 03:28:46
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
AfrikanychДык пример-то выше. Конечно, я могу ввести в А1 длину степенного ряда M, затем придется макросом (для меня - нетривиальным) зарезервировать - добавить в таблицу столбец/строку, заполнить коеффициентами 1/FACT(K) диапазон из М ячеек в этом столбце/строке, чтобы на него можно было потом сослаться из РЯД.СУММ, но такой путь мне не кажется элегантным. ты мне дай значения FirstNum , LastNum , Лямбда , Мю и правильный ответ , а я попробую показать тебе как это сделать стандартной формулой. Надеюсь FirstNum и LastNum беруться из ячеек? А разбираться мне, гуманитарию, с алгоритмом функции просто времени нет, да и нужды тоже :-) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 03:30:47
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Если я правильно понял, Лямбда и Мю - константы (???) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 12:46:28
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Sum1= от 0 до (m-1) Σ(λ/μ )^k/k! m, λ, μ – параметры пользователя, вводятся, ессно, в ячейки и из них берутся ссылками. Втупую расчет дает: 8103,014 Код по твоему совету покрутил, не лезет все-равно, зараза. Лямбды по-англицки написал, конечно. Резалт - ошибка #ЗНАЧ FirstNum LastNum Lambda Mu Sum 1 0 25 0,9 0,1 =Sum1(FirstNum;LastNum) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 13:17:30
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
вот твоя UDF (пример прилагаю): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Теперь (мне) осталось определить соответствия между твоими переменными: FirstNum LastNum Лямбда Мю и теми, которые использует функция РЯД.СУММ: x n m коэффициенты KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 13:48:56
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Ептть, проперло, наконец. Лямбда и Мю - не константы, пользовательские варьируемые параметры, потому их нужно было определить аргументами функции. А я думал, что функция вызовет их из ячеек просто по имени. Теперь все как надоть. автор 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 автор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 15:49:00
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
AfrikanychЕптть, проперло, наконец. Лямбда и Мю - не константы, пользовательские варьируемые параметры, потому их нужно было определить аргументами функции. А я думал, что функция вызовет их из ячеек просто по имени.Если Лямбда и Мю это имена присвоенные рангам , то: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 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 :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 15:55:09
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
В любом случае, если Лямбда и Мю содержат переменные, они должны быть включены как параметры для того, чтобы функция могла вовремя отреагировать на их изменение без необх. делать функцию летучей. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 17:13:58
|
|||
|---|---|---|---|
|
|||
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
В том-то и проблема, что полного соответствия нет. x=(Lambda/Mu) n=FirstNum - в моем случае 0, но хотелось функцию поуниверсальнее m=1 А вот с вектором коэффициентов засада. Для последнего члена ряда j=LastNum-1, но LastNum определяется пользователем, поэтому сформировать вектор ak=1/(k-1)! (расчитать все коэффициенты и заполнить диапазон ячеек) я смогу только после определения Last Num. Попробуй напиши в такой ситуации РЯД.СУММ, которая должна сослаться на уже заполненный вектор коэффициентов и только через него косвенно определить длину ряда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 18:03:47
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Лови файл ;-) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 18:56:25
|
|||
|---|---|---|---|
Нужна функция в Excel Сумма ряда. |
|||
|
#18+
Можно также присвоить формуле имя как в решении 4 в прилагаемом файле. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=61&tablet=1&tid=2184179]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 336ms |

| 0 / 0 |
