2012-05-23 133 views
3

我有一個邏輯,但不知道如何在Excel中執行/編碼。邏輯如下:在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」第一年爲百分之十,隨後幾年爲百分之十。

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

請幫我一個宏或公式中循環,並找出G1值。

此外,我想將此應用於「n」行數,因爲有「n」個文章。

編輯

@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

如果你很熟悉,那麼你會不會感到驚訝有人問:你有什麼嘗試? – assylias

+0

因爲我對MACROS一無所知,所以還沒試試。我的Excel知識只是關於+ - * /。我在Google上發現的IF()聲明。 –

+1

有人可能會幫助你,但是[你應該在詢問之前嘗試,並且你不能指望某人爲你寫代碼](http://meta.stackexchange.com/a/128553/179508)。 – assylias

回答

1

你不需要一個宏,它是簡單的數學。

假設你的百分比(在E1)存儲爲.2(20%),沒有實際20,該公式將工作:

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