2012-05-23 3 views
3

У меня есть логика на месте, но я не знаю, как ее выполнять/кодировать в Excel. Логика ниже:Loop in Excel VBA

В офисе мне нужно узнать стоимость многих старых статей на основе их стоимости покупки и возраста. Я не хочу использовать VDB или другие встроенные функции.

В моей таблице:

A1 = "Table" (Name of the article) 
B1 = "01/01/2005" (Date of purchase in MM/DD/YYYY format) 
C1 = "1000" (Purchase value) 
D1 = "=DATEDIF(B1,TODAY(),"Y")" (Gives the age of article in years) 
E1 = "20" (Percentage depreciation for first year, which varies based on article) 
F1 = "=C1*10%" '(Depreciated value should not be less than 10% of purchase value) 

Теперь в G1 я хочу, чтобы вычислить значение амортизации в статье «A1» с покупной стоимостью «C1» для «D1» число лет, @ плоский «E1» % за первый год и 10% за последующие годы.

H1 = "=C1-G1" (Value of the article after depreciation) 
I1 = "=IF(H1<=F1,F1,H1)" 

Пожалуйста, помогите мне с помощью макроса или формулы в цикле и выяснить значение G1.

Кроме того, я хочу применить это к «n» числу строк, так как существует «n» количество статей.

EDIT

@assylias Спасибо за просветить меня о SO policy, поставив меня на для себя, чтобы найти ответ.

После примерно 30 минут поискового запроса, за которым следуют проб и ошибок, я успешно написал макрос, чтобы делать то, что хотел. Вот он:

Sub DepVal() 
' 
' DepVal Macro 
' Macro by Prashanth JC 
' 
' Keyboard Shortcut: Ctrl+d 
' 
fYear = 0 
dVal = 0 
tYear = ActiveCell.Offset(0, -3) 
purVal = ActiveCell.Offset(0, -4) 
depFirst = ActiveCell.Offset(0, -2) 
depOther = 10 

If tYear >= 1 Then 
    Do 
     If fYear = 0 Then 
      dVal = purVal - (purVal * depFirst)/100 
     Else 
      dVal = dVal - (dVal * depOther)/100 
     End If 

     fYear = fYear + 1 

    Loop Until fYear = tYear 

    ActiveCell.Value = dVal 

Else 
    ActiveCell.Value = purVal 

End If 

End Sub 

Наконец, я отформатировал ячейку G1 на число с нумеровым десятичным знаком. Теперь все работает отлично!

Еще раз спасибо, SO и assylias!

+1

Если вы знакомы с SO, то вы не будете удивлены, спросить: что вы пробовали? – assylias

+0

Поскольку я ничего не знаю о MACROS, не пробовал. Знание моего Excel составляет всего около + - * /. Оператор IF(), который я нашел в Google. –

+1

Кто-то может вам помочь, но [вы должны попробовать, прежде чем спрашивать, и вы не можете ожидать, что кто-то напишет код для вас] (http://meta.stackexchange.com/a/128553/179508). – assylias

ответ

1

Вам не нужен макрос, это простая математика.

Предполагая, что ваш процент (в E1) хранится в .2 (20%), на самом деле не 20, эта формула будет работать:

=MAX(F1,C1*(1-E1)-(C1*0.1*(D1-1)))