---------------------------------------
A B C D
---------------------------------------
Timestamp Stock Qty Price
---------------------------------------
01 February 2011 ST1 100 10
02 March 2013 ST1 900 11
01 February 2011 ST2 200 121
04 May 2014 ST1 250 15
02 March 2016 ST2 150 130
04 May 2018 ST2 250 140
08 September 2016 ST1 300 19
01 February 2012 ST3 400 190
11 November 2017 ST1 -400 20
Я хочу создать функцию в Excel с именем MyXIRR (Даты в качестве диапазона, Значения в качестве диапазона, Баланс в виде двойного значения, Дата BalanceAsOn)
В эту функцию мне нужно передать данные изСтолбец отметки времени в виде Даты, Кол-во Х Цена как Значения для каждой Акции.Balance и BalanceAsOn - это то, что я буду определять отдельно.
Например, для ST1
Даты будут ниже
01 February 2011
02 March 2013
04 May 2014
08 September 2016
11 November 2017
значения будут ниже
100
900
250
300
-400
Проблема, с которой я сталкиваюсь, заключается в том, как передать список значений на основе фильтра по биржевому коду.
Я не эксперт по INDEX, MATCH и т. Д., Но когда я попробовал что-то вроде
=MyXIRR(INDEX(A1:A9,MATCH("ST1",B1:B9,0)), INDEX(C1:C9*D1:D9,MATCH("ST1",B1:B9,0)), 100.00, TODAY())
ИЛИ используйте это как массив, нажимая Ctrl + Shift + Enter, т.е.
{=MyXIRR(INDEX(A1:A9,MATCH("ST1",B1:B9,0)), INDEX(C1:C9*D1:D9,MATCH("ST1",B1:B9,0)), 100.00, TODAY())}
Затем при отладке MyXIRR я получаю только одно значение в датах и одно значение в значениях, т. Е. 01 февраля 2011 и 100. Я ожидаю, что MyXIRR получит список, а не только первое значение.
Подозреваю, что я неправильно использую INDEX Iпробовал IF и SUMPRODUCT, но я получаю #VALUE!Ошибка в обоих из двух приведенных ниже случаев
=MyXIRR(IF(B1:B9="ST1",A1:A9,0), IF(B1:B9="ST1",C1:C9*D1:D9,0), 100.00, TODAY())
ИЛИ
= MyXIRR(SUMPRODUCT((B1:B9="ST1"),A1:A9), SUMPRODUCT((B1:B9="ST1"),C1:C9*D1:D9), 100.00, TODAY() )
Может кто-нибудь подсказать, что я делаю неправильно и / или предложить дальнейшие действия?
Я используюExcel для Mac версия 16.16.2
Ниже показано, как выглядит моя функция
Public Function MyXIRR(Dates As Range, Trans As Range, Balance As Double, BalanceAsOn As Date) As Double
Dim Cell As Range
For Each Cell In Dates
MsgBox Cell.Value
Next Cell
MyXIRR = Dates.Count
End Function
Это просто включается только один раз и отображает 01.02.2011, когда я вызываю его для ST1