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

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Отражение промежуточных значений - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отражение промежуточных значений (Макросы/Sub)
Отражение промежуточных значений
mra12101 Дата: Суббота, 04.11.2017, 16:39 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Приветствую!
С праздником всех!)

Подскажите принцип, по которому нужно переделать нижеследующий макрос, что бы я мог узнать расчетное значение, например, d1
И что мне нужно будет указать в ячейке, что бы его увидеть)
Простите за такие глупые вопросы...)
Спасибо!
[vba]
Код
Function EuropeanOption(CallOrPut, S, K, v, r, T, q)
Dim d1 As Double, d2 As Double, nd1 As Double, nd2 As Double
Dim nnd1 As Double, nnd2 As Double

d1 = (Log(S / K) + (r - q + 0.5 * v ^ 2) * T) / (v * Sqr(T))
d2 = (Log(S / K) + (r - q - 0.5 * v ^ 2) * T) / (v * Sqr(T))
nd1 = Application.NormSDist(d1)
nd2 = Application.NormSDist(d2)
nnd1 = Application.NormSDist(-d1)
nnd2 = Application.NormSDist(-d2)

If CallOrPut = "Call" Then
  EuropeanOption = S * Exp(-q * T) * nd1 - K * Exp(-r * T) * nd2
Else
  EuropeanOption = -S * Exp(-q * T) * nnd1 + K * Exp(-r * T) * nnd2
End If
End Function
[/vba]


Сообщение отредактировал mra12101 - Суббота, 04.11.2017, 16:40
 
Ответить
СообщениеПриветствую!
С праздником всех!)

Подскажите принцип, по которому нужно переделать нижеследующий макрос, что бы я мог узнать расчетное значение, например, d1
И что мне нужно будет указать в ячейке, что бы его увидеть)
Простите за такие глупые вопросы...)
Спасибо!
[vba]
Код
Function EuropeanOption(CallOrPut, S, K, v, r, T, q)
Dim d1 As Double, d2 As Double, nd1 As Double, nd2 As Double
Dim nnd1 As Double, nnd2 As Double

d1 = (Log(S / K) + (r - q + 0.5 * v ^ 2) * T) / (v * Sqr(T))
d2 = (Log(S / K) + (r - q - 0.5 * v ^ 2) * T) / (v * Sqr(T))
nd1 = Application.NormSDist(d1)
nd2 = Application.NormSDist(d2)
nnd1 = Application.NormSDist(-d1)
nnd2 = Application.NormSDist(-d2)

If CallOrPut = "Call" Then
  EuropeanOption = S * Exp(-q * T) * nd1 - K * Exp(-r * T) * nd2
Else
  EuropeanOption = -S * Exp(-q * T) * nnd1 + K * Exp(-r * T) * nnd2
End If
End Function
[/vba]

Автор - mra12101
Дата добавления - 04.11.2017 в 16:39
Pelena Дата: Суббота, 04.11.2017, 18:53 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11755
Репутация: 2596 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Здравствуйте.
Покажите в файле, в каком виде Вы хотите видеть эти промежуточные значения?


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Покажите в файле, в каком виде Вы хотите видеть эти промежуточные значения?

Автор - Pelena
Дата добавления - 04.11.2017 в 18:53
mra12101 Дата: Воскресенье, 05.11.2017, 09:31 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Здравствуйте!
Нужны расчетные значения d1, d2,..... (в файле красным)
К сообщению приложен файл: 3627057.xls(32Kb)
 
Ответить
СообщениеЗдравствуйте!
Нужны расчетные значения d1, d2,..... (в файле красным)

Автор - mra12101
Дата добавления - 05.11.2017 в 09:31
RAN Дата: Воскресенье, 05.11.2017, 09:50 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4602
Репутация: 925 ±
Замечаний: 0% ±

2010
UDF массива
[vba]
Код
Function EuropeanOption(CallOrPut, S, K, v, r, T, q)
    Dim d1 As Double, d2 As Double, nd1 As Double, nd2 As Double
    Dim nnd1 As Double, nnd2 As Double
    Dim EO(7)
    d1 = (Log(S / K) + (r - q + 0.5 * v ^ 2) * T) / (v * Sqr(T))
    d2 = (Log(S / K) + (r - q - 0.5 * v ^ 2) * T) / (v * Sqr(T))
    nd1 = Application.NormSDist(d1)
    nd2 = Application.NormSDist(d2)
    nnd1 = Application.NormSDist(-d1)
    nnd2 = Application.NormSDist(-d2)
    If CallOrPut = "Call" Then
        EO(0) = S * Exp(-q * T) * nd1 - K * Exp(-r * T) * nd2
    Else
        EO(0) = -S * Exp(-q * T) * nnd1 + K * Exp(-r * T) * nnd2
    End If
    EO(1) = d1
    EO(2) = d2
    EO(3) = nd1
    EO(4) = nd2
    EO(5) = nnd1
    EO(6) = nnd2
    EuropeanOption = EO
End Function
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Воскресенье, 05.11.2017, 10:33
 
Ответить
СообщениеUDF массива
[vba]
Код
Function EuropeanOption(CallOrPut, S, K, v, r, T, q)
    Dim d1 As Double, d2 As Double, nd1 As Double, nd2 As Double
    Dim nnd1 As Double, nnd2 As Double
    Dim EO(7)
    d1 = (Log(S / K) + (r - q + 0.5 * v ^ 2) * T) / (v * Sqr(T))
    d2 = (Log(S / K) + (r - q - 0.5 * v ^ 2) * T) / (v * Sqr(T))
    nd1 = Application.NormSDist(d1)
    nd2 = Application.NormSDist(d2)
    nnd1 = Application.NormSDist(-d1)
    nnd2 = Application.NormSDist(-d2)
    If CallOrPut = "Call" Then
        EO(0) = S * Exp(-q * T) * nd1 - K * Exp(-r * T) * nd2
    Else
        EO(0) = -S * Exp(-q * T) * nnd1 + K * Exp(-r * T) * nnd2
    End If
    EO(1) = d1
    EO(2) = d2
    EO(3) = nd1
    EO(4) = nd2
    EO(5) = nnd1
    EO(6) = nnd2
    EuropeanOption = EO
End Function
[/vba]

Автор - RAN
Дата добавления - 05.11.2017 в 09:50
buchlotnik Дата: Воскресенье, 05.11.2017, 10:02 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3325
Репутация: 886 ±
Замечаний: 0% ±

2010, 2013, 2016 RUS / ENG
чутка переписал [vba]
Код
Function EuropeanOption2(CallOrPut, S, K, v, r, T, q)
Dim d1#, d2#, nd1#, nd2#, nnd1#, nnd2#, arr#(7), eo#
d1 = (Log(S / K) + (r - q + 0.5 * v ^ 2) * T) / (v * Sqr(T))
d2 = (Log(S / K) + (r - q - 0.5 * v ^ 2) * T) / (v * Sqr(T))
nd1 = Application.NormSDist(d1)
nd2 = Application.NormSDist(d2)
nnd1 = Application.NormSDist(-d1)
nnd2 = Application.NormSDist(-d2)

If CallOrPut = "Call" Then
eo = S * Exp(-q * T) * nd1 - K * Exp(-r * T) * nd2
Else
eo = -S * Exp(-q * T) * nnd1 + K * Exp(-r * T) * nnd2
End If

arr(0) = eo
arr(1) = d1
arr(2) = d2
arr(3) = nd1
arr(4) = nd2
arr(5) = nnd1
arr(6) = nnd2

EuropeanOption2 = arr

End Function
[/vba] UPD - Андрей, ты файл, случаем не перепутал? А код у тебя прикольней yes
К сообщению приложен файл: 2535510.xls(46Kb)


каждому For - Next!
платная помощь:
ЯД: 410012595572239
buchlotnik@mail.ru


Сообщение отредактировал buchlotnik - Воскресенье, 05.11.2017, 10:04
 
Ответить
Сообщениечутка переписал [vba]
Код
Function EuropeanOption2(CallOrPut, S, K, v, r, T, q)
Dim d1#, d2#, nd1#, nd2#, nnd1#, nnd2#, arr#(7), eo#
d1 = (Log(S / K) + (r - q + 0.5 * v ^ 2) * T) / (v * Sqr(T))
d2 = (Log(S / K) + (r - q - 0.5 * v ^ 2) * T) / (v * Sqr(T))
nd1 = Application.NormSDist(d1)
nd2 = Application.NormSDist(d2)
nnd1 = Application.NormSDist(-d1)
nnd2 = Application.NormSDist(-d2)

If CallOrPut = "Call" Then
eo = S * Exp(-q * T) * nd1 - K * Exp(-r * T) * nd2
Else
eo = -S * Exp(-q * T) * nnd1 + K * Exp(-r * T) * nnd2
End If

arr(0) = eo
arr(1) = d1
arr(2) = d2
arr(3) = nd1
arr(4) = nd2
arr(5) = nnd1
arr(6) = nnd2

EuropeanOption2 = arr

End Function
[/vba] UPD - Андрей, ты файл, случаем не перепутал? А код у тебя прикольней yes

Автор - buchlotnik
Дата добавления - 05.11.2017 в 10:02
RAN Дата: Воскресенье, 05.11.2017, 10:27 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4602
Репутация: 925 ±
Замечаний: 0% ±

2010
Перепутал. :)
Перевложил.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПерепутал. :)
Перевложил.

Автор - RAN
Дата добавления - 05.11.2017 в 10:27
mra12101 Дата: Воскресенье, 05.11.2017, 10:55 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Спасибо большое!
Будем разбираться)

У RAN файл не доступен.

Хороших выходных!
 
Ответить
СообщениеСпасибо большое!
Будем разбираться)

У RAN файл не доступен.

Хороших выходных!

Автор - mra12101
Дата добавления - 05.11.2017 в 10:55
mra12101 Дата: Воскресенье, 05.11.2017, 14:17 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Скажите, а можно ли реализовать данный макрос только без использования массива.
У меня значения находятся не в одном диапазоне, нужно использовать относительные ссылки.
 
Ответить
СообщениеСкажите, а можно ли реализовать данный макрос только без использования массива.
У меня значения находятся не в одном диапазоне, нужно использовать относительные ссылки.

Автор - mra12101
Дата добавления - 05.11.2017 в 14:17
buchlotnik Дата: Воскресенье, 05.11.2017, 15:23 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3325
Репутация: 886 ±
Замечаний: 0% ±

2010, 2013, 2016 RUS / ENG
mra12101, без использования массива на входе или на выходе? короче покажите в файле как должно быть


каждому For - Next!
платная помощь:
ЯД: 410012595572239
buchlotnik@mail.ru


Сообщение отредактировал buchlotnik - Воскресенье, 05.11.2017, 15:55
 
Ответить
Сообщениеmra12101, без использования массива на входе или на выходе? короче покажите в файле как должно быть

Автор - buchlotnik
Дата добавления - 05.11.2017 в 15:23
mra12101 Дата: Понедельник, 06.11.2017, 09:48 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Доброе утро!
Для каждой S нужно рассчитать значения (красные)
К сообщению приложен файл: 4141206.xls(32Kb)
 
Ответить
СообщениеДоброе утро!
Для каждой S нужно рассчитать значения (красные)

Автор - mra12101
Дата добавления - 06.11.2017 в 09:48
RAN Дата: Понедельник, 06.11.2017, 09:55 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4602
Репутация: 925 ±
Замечаний: 0% ±

2010
без использования массива.

??????????
К сообщению приложен файл: 8412968.xls(48Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
без использования массива.

??????????

Автор - RAN
Дата добавления - 06.11.2017 в 09:55
buchlotnik Дата: Понедельник, 06.11.2017, 10:15 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3325
Репутация: 886 ±
Замечаний: 0% ±

2010, 2013, 2016 RUS / ENG
затык-то в чём? убрали ТРАНСП() и всё - так даже проще
К сообщению приложен файл: 8850009.xls(54Kb)


каждому For - Next!
платная помощь:
ЯД: 410012595572239
buchlotnik@mail.ru
 
Ответить
Сообщениезатык-то в чём? убрали ТРАНСП() и всё - так даже проще

Автор - buchlotnik
Дата добавления - 06.11.2017 в 10:15
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отражение промежуточных значений (Макросы/Sub)
Страница 1 из 11
Поиск:

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