求excel函数高手,设置日期按月递增

在A1中,输入任一日期,在B1到B12中,自动带出后一年的日期,月份增加,日数不变,但遇到月底有月大和月小,甚至2月份如何写判断?要求 1:B1开始月份递增至B12 2:B1的日数比A1的日数小1,B2至B12的日都和B1一样(例:若A1是2017年12月20日,则B2为 2018年1月19日,后面分别为2月19日、3月19日……12月19) 3:如图,若A1中输入日期为2017年12月1日,B2为2017年12月31日,后面若月份为2,则显示2月28日,若月份为1、3、5、7、8、10、12则日显示为31,其他显示为30

A1=2017年12月1日
B1=DATE(YEAR(A$1),MONTH(A$1)+ROW(A1),0)
然后下拉。
如果日期的表达形式不符合您的要求的话,可以设置单元格格式。选择你要调整单元格——右键——设置单元格格式——数字——日期,然后有很多个日期的表达形式的。追问

你说的只是A1的日数值等于1日时是对的
但若A1的日数是等于20日,就要求B1到B12,都是日数值都是19,又怎么做呢???
如何做条件判断呢??

追答

结果对得上的啊,如下:公式=Row(reference)表示单元格所在Excel表格中的行数。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-11

这还是用VBA处理比较好办,函数太绕了。代码已发

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myer%, mmon%, mday%, myd%, x%
    Dim mdate As Date, arr(1 To 12, 1 To 1)
    If Target.Address = "$A$2" Then
        mdate = Target.Value
        mday = Day(mdate)
        mmon = Month(mdate)
        myer = Year(mdate)
        For x = 1 To 12
            If mday = 1 Then
                myd = Day(DateSerial(myer, mmon + x, 0))
                arr(x, 1) = DateSerial(myer, mmon + x - 1, myd)
            Else
                myd = Day(DateSerial(myer, mmon + x + 1, 0))
                If myd < mday Then
                    arr(x, 1) = DateSerial(myer, mmon + x, myd)
                Else
                    arr(x, 1) = DateSerial(myer, mmon + x, mday - 1)
                End If
            End If
        Next x
        Range("B2").Resize(12, 1) = arr
    End If
End Sub

本回答被提问者采纳
第2个回答  2017-12-08
B1

=DATE(YEAR(A$1),MONTH(A$1)+ROW(A1),0)
下拉追问

你说的只是A1的日数值等于1日时是对的
但若A1的日数是等于20日,就要求B1到B12,都是日数值都是19,又怎么做呢???
如何做条件判断呢??

本回答被网友采纳