2012-12-17 67 views
0

我希望用戶能夠在單元格D1中輸入一年(例如「2013」​​),並按下一個觸發宏的按鈕。該宏將自動爲單元格D2-O2(一年中每個月的一個單元格)分配一個函數,以將這些單元格轉換爲實際的日期類型。根據一個單元格的值填充日期單元格?

例如,D2單元格的值將是=DATE(2013, 1, 1),表示此單元代表2013年1月1日同樣,E2單元格的值將是=DATE(2013, 2, 1),F2的值將是=DATE(2013, 3, 1)

以下是我的僞代碼,你能幫我把這個轉換成實際的VBA嗎?

var myYear = the value of cell D1 
cell D2 value is =DATE(2013,1,1) 
cell E2 value is =DATE(2013,2,1) 
cell F2 value is =DATE(2013,3,1) 
cell G2 value is =DATE(2013,4,1) 
cell H2 value is =DATE(2013,5,1) 
cell I2 value is =DATE(2013,6,1) 
cell J2 value is =DATE(2013,7,1) 
cell K2 value is =DATE(2013,8,1) 
cell L2 value is =DATE(2013,9,1) 
cell M2 value is =DATE(2013,10,1) 
cell N2 value is =DATE(2013,11,1) 
cell O2 value is =DATE(2013,12,1) 

感謝

+2

您是否嘗試錄製宏,然後修改它以滿足您的需求? –

+1

我想我從來沒有想到這一點。我不用Excel工作。感謝您的見解。 – TimeBomb006

+1

你想要日期是一個值或一個公式?因此,如果用戶運行宏並且在D1中更改年份,單元格是否應該更新以反映已更改的年份,還是應該保持不變? – PaulStock

回答

1

試試這個:

Sub FillYear() 
    YearNum = Cells(1, 4) ' Cell D1 
    For MonthNum = 1 To 12 
     Cells(2, MonthNum + 3).Value = DateSerial(YearNum, MonthNum, 1) 
    Next 
End Sub 

UPDATE:

如果您想要的日期值是一個公式,這樣的日期,如果用戶的變化而變化當年,將For Loop內部的行更改爲:

Cells(2, MonthNum + 3).Formula = "=Date(R1C4," & MonthNum & ", 1)" 
+0

這正是我正在尋找的。我正在考慮循環,但我不知道如何循環遍歷每個單元格的字母,使用索引解決這個問題。我確實有一個問題,Excel是否在1開始索引?例如,從我的編程語言知識來看,大多數索引從0開始,「Cells(1,4)」實際上是E2。此外,我正在整理一個語法錯誤。 – TimeBomb006

+0

語法錯誤是循環內雙右括號。它工作正常。非常感謝你! – TimeBomb006

+1

是的,Excel從1開始索引,而不是0.因此,單元格A1是'Cells(1,1)'。他們可能是這樣做的,因爲在工作表中,行從1開始編號,如果行在表單中以單向編號和代碼中的不同方式編號,那將太令人困惑了。對於語法錯誤抱歉,我在我的答案中糾正了這個錯誤。 – PaulStock

相關問題