Я пытаюсь создать пользовательскую функцию в VBA в Excel. Это мой первый раз.
Я хочу определить, какую выгоду получит обычный человек (если бы наше правительство расширило социальную помощь в ответ на блокировку по счету 19), основываясь на данных девяти различных децилей распределения доходов. Я вызвал функцию, которая находит грант при каждом дециле onerow
, и функцию, которая усредняет эти UIFavg
.
В моем файле Excel децили перечислены в столбце, поэтому я хочу использовать только ячейку вверху в качестве аргумента. Это потребовало бы от меня найти строку аргумента firstrow
, а затем добавить 1 к номеру строки для остальных девяти точек. К сожалению, я не знаю, как определить таким образом номера строк, которые функция должна использовать для различных децилей. Я не знал, как искать документацию для этого.
Я показываю свою попытку ниже. Ты умеешь разбивать строки?
Public Function onerow(decile As Double, propzero As Double, propupper As Double, upperbound As Double, natminwage As Double)
If decile < upperbound Then
If decile < natminwage Then
onerow = (propzero - (propzero - propupper) / upperbound * decile) * natminwage 'UIF benefit at the minimum wage
ElseIf decile >= natminwage Then
onerow = (propzero - (propzero - propupper) / upperbound * decile) * decile
End If
Else
onerow = propupper * upperbound 'Maximum benefit (for those who earn above the upper limit)
End If
End Function
Public Function UIFavg(firstrow As Double, secondrow As Double, thirdrow As Double, fourthrow As Double, fifthrow As Double, sixthrow As Double, seventhrow As Double, eighthrow As Double, ninthrow As Double, propzero As Double, propupper As Double, upperbound As Double, natminwage As Double)
UIFavg = (1.5 * onerow(firstrow, propzero, propupper, upperbound, natminwage) + onerow(secondrow, propzero, propupper, upperbound, natminwage) + onerow(thirdrow, propzero, propupper, upperbound, natminwage) + onerow(fourthrow, propzero, propupper, upperbound, natminwage) + onerow(fifthrow, propzero, propupper, upperbound, natminwage) + onerow(sixthrow, propzero, propupper, upperbound, natminwage) + onerow(seventhrow, propzero, propupper, upperbound, natminwage) + onerow(eighthrow, propzero, propupper, upperbound, natminwage) + 1.5 * onerow(ninthrow, propzero, propupper, upperbound, natminwage)) / 10
End Function