2012-12-17 64 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

相关问题