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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 11:22   #1
Mint86
Пользователь
 
Аватар для Mint86
 
Регистрация: 17.07.2008
Сообщений: 81
По умолчанию Аналог функции ЧИСТВНДОХ

Коллеги, хотелось бы иметь функцию ЧИСТВНДОХ из пакета анализа на VBA (на случай если надстройка пакет анализа изначально не установлена на компьютере). Кто знает как можно вытащить код данной функции из файлов надстроек пакета анализа? Функция на английском XIRR. Описание функции здесь.

Последний раз редактировалось Mint86; 12.05.2010 в 11:24.
Mint86 вне форума Ответить с цитированием
Старый 12.05.2010, 13:04   #2
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

в справке VBA: WorksheetFunction -- Xirr. там все написано
maksim_serg вне форума Ответить с цитированием
Старый 12.05.2010, 13:23   #3
Mint86
Пользователь
 
Аватар для Mint86
 
Регистрация: 17.07.2008
Сообщений: 81
По умолчанию

Цитата:
Сообщение от maksim_serg Посмотреть сообщение
в справке VBA: WorksheetFunction -- Xirr. там все написано
А что там написано то? Нужен макрос который дает такой же результат как функция XIRR. Зачастую бывает что Excel установлен урезанный и пакета анализа там нет.

Попытался посмотреть код в файлах надстройках:
ANALYS32.XLL
ATPVBAEN.XLA
FUNCRES.XLA
PROCDB.XLA

В файлах ATPVBAEN.XLA и FUNCRES.XLA ничего путного нет.
Есть подозрение что код хранится в файле ANALYS32.XLL но как его посмотреть?
Mint86 вне форума Ответить с цитированием
Старый 12.05.2010, 14:25   #4
Mint86
Пользователь
 
Аватар для Mint86
 
Регистрация: 17.07.2008
Сообщений: 81
По умолчанию

Вот исходный код данной функции на VB 6.0
буду признателен если знающие люди переведут сей код на vba...
Вложения
Тип файла: zip XIRRCODE.ZIP (5.6 Кб, 125 просмотров)

Последний раз редактировалось Mint86; 12.05.2010 в 14:31.
Mint86 вне форума Ответить с цитированием
Старый 12.05.2010, 21:44   #5
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

не понятно, что это за функция такая, но судя по справке это должно выглядеть так:
Код:
Public Function что_то_из_экономики(Значения As Range, Даты As Range, Предп As Single)
If Значения.Rows.Count = Даты.Rows.Count And Значения.Rows(1) < 0 Then
p = 0
    For i = 1 To Значения.Rows.Count
           p = p + Значения.Rows(i) / ((1 + Предп) ^ ((Даты.Rows(i) - Даты.Rows(1)) / 365))
    Next i
If p < 0 Then
    Do
        Предп = Предп - 0.001: p = 0 'где 0.001 - точность результата
            For i = 1 To Значения.Rows.Count
                   p = p + Значения.Rows(i) / ((1 + Предп) ^ ((Даты.Rows(i) - Даты.Rows(1)) / 365))
            Next i
    Loop While p <= 0
Else
    Do
        Предп = Предп + 0.001: p = o 'где 0.001 - точность результата
            For i = 1 To Значения.Rows.Count
                   p = p + Значения.Rows(i) / ((1 + Предп) ^ ((Даты.Rows(i) - Даты.Rows(1)) / 365))
            Next i
    Loop While p >= 0
End If
что_то_из_экономики = Предп
Else: что_то_из_экономики = "#ЧИСЛО!"
End If
End Function

Последний раз редактировалось maksim_serg; 13.05.2010 в 06:47.
maksim_serg вне форума Ответить с цитированием
Старый 13.05.2010, 07:44   #6
Mint86
Пользователь
 
Аватар для Mint86
 
Регистрация: 17.07.2008
Сообщений: 81
По умолчанию

maksim_serg, спасибо! Работает, но почему-то дает чуть-чуть разный результат по сравнению с функцией ЧИСТВНДОХ. Для функции ЧИСТВНДОХ не обязательно указывать предп.
Цитата:
Предп — это предполагаемое значение результата функции ЧИСТВНДОХ. В большинстве случаев нет необходимости задавать аргумент предп для функции ЧИСТВНДОХ. Если это аргумент опущен, то предп полагается равным 0,1 (10 процентов).
В вашей функции я так понял надо обязательно задавать предп, иначе получаем ошибку. Результат совпадает если указать в качестве предп 1.

Во вложенном файле пример с расчетами, буду благодарен если вы осуществите колибровку..
Вложения
Тип файла: zip ЧИСТВНДОХ.zip (8.0 Кб, 98 просмотров)
Mint86 вне форума Ответить с цитированием
Старый 13.05.2010, 08:26   #7
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Цитата:
Сообщение от maksim_serg Посмотреть сообщение
Код:
Предп = Предп + 0.001: p = o 'где 0.001 - точность результата
чем ближе шаг изменения Предп (0.001) к нулю, тем точнее получается результат.НО! -тем меньше скорость выполнения функции. для моего ноутбука шаг = 0.001 - предел, дальше зависает...
а по поводу необходимости Предп, можно поставить условие в начале:
если Предп не задано, то Предп=0

Последний раз редактировалось maksim_serg; 13.05.2010 в 09:22. Причина: опечатался маленько...
maksim_serg вне форума Ответить с цитированием
Старый 13.05.2010, 08:41   #8
Mint86
Пользователь
 
Аватар для Mint86
 
Регистрация: 17.07.2008
Сообщений: 81
По умолчанию

maksim_serg, огромное спасибо! увеличил p=0.00001 в принципе работает и условие если Предп не задан то Предп=0,1 чтобы было сходство с функцией.
Mint86 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
аналог функции case redfield Microsoft Office Excel 3 05.05.2010 12:25
Аналог этой функции на C killer12rus Помощь студентам 1 20.03.2010 15:23
Аналог функции ИЛИ (OR) на VBA Andrey3055 Microsoft Office Excel 4 03.11.2009 13:47
чиствндох АлёнаP Microsoft Office Excel 1 24.04.2009 10:44
Аналог функции WriteProcessMemory KleoY Win Api 10 31.03.2009 01:17