Excel VBA格式日期以获取上一个月的日期
我是VBA的新手,这似乎是一项简单的任务。我只是想用当前日期替换上一个月份,并将日期常量设为21,因此结果必须是yyyy-(m-1)-21 到目前为止,我有一些想法,它们部分起作用Excel VBA格式日期以获取上一个月的日期,excel,vba,date,Excel,Vba,Date,我是VBA的新手,这似乎是一项简单的任务。我只是想用当前日期替换上一个月份,并将日期常量设为21,因此结果必须是yyyy-(m-1)-21 到目前为止,我有一些想法,它们部分起作用 Sub Test_Date() Dim x As String Dim p As String p = Format(Date, "mm") - 1 x = Format(Date, "yyyy-" p "-21") End Sub 如果我将MsgBx“p”作为我想要的返回,但是我不
Sub Test_Date()
Dim x As String
Dim p As String
p = Format(Date, "mm") - 1
x = Format(Date, "yyyy-" p "-21")
End Sub
如果我将MsgBx“p”作为我想要的返回,但是我不知道将它们连接成一个字符串的正确语法
也
您可以使用
DateSerial
它接受一年、一个月和一天作为它的输入,并以此为基础踢出日期
因此,DateSerial(2017,9,22)
将给出今天的日期。为了得到上个月21号,你会使用
DateSerial(Year(Date), Month(Date) - 1, 21)
年(日期)
返回2017,月(日期)
返回9。您可以使用DateSerial
它接受一年、一个月和一天作为它的输入,并以此为基础踢出日期
因此,DateSerial(2017,9,22)
将给出今天的日期。为了得到上个月21号,你会使用
DateSerial(Year(Date), Month(Date) - 1, 21)
年(日期)
返回2017,月(日期)
返回9。使用dateadd函数():
使用dateadd函数():
您也可以尝试以下方法:
Function LastMonth() As Date
Dim d As Date
d = DateAdd("m", -1, Date)
LastMonth = DateSerial(Year(d), Month(d), 21)
End Function
编辑:
根据需要设置返回日期的格式:
Sub Test()
MsgBox Format(LastMonth, "yyyy-mm-dd")
End Sub
您也可以尝试以下方法:
Function LastMonth() As Date
Dim d As Date
d = DateAdd("m", -1, Date)
LastMonth = DateSerial(Year(d), Month(d), 21)
End Function
编辑:
根据需要设置返回日期的格式:
Sub Test()
MsgBox Format(LastMonth, "yyyy-mm-dd")
End Sub
试一试
试一试
DateAdd(“m”、-1,Date)
将为您提供所需DateAdd(“m”、-1,Date)
将为您提供所需,如果Date=2017/01/01,是否会返回2017/12/21?2016/12/21应该在哪里?你好,达伦。它还可以将日期更改为正确的值,但顺序错误,因为最后一个建议显示为mm/dd/yyyy而不是yyyy-mm-dd。谢谢你的帮助comment@KostasK. 不,Dateserial(2017,1-1,21)
返回2016年12月21日,Dateserial(2017,-13,1)
返回2015年11月1日。@Darren Bartrup Cook感谢Darren澄清这一点。我不确定@Fabsklo将日期更改为正确的值是什么意思,但在错误的顺序下,Sheet1.范围(“A1”)=Dateserial(年(日)、月(日)-1,21)
将使用您的本地格式设置在A1中放置日期。然后,您可以将单元格的格式更改为yyyy-mm-dd
,这样Excel仍然可以理解它是一个日期。出于好奇,如果日期=2017/01/01,它不会返回2017/12/21吗?2016/12/21应该在哪里?你好,达伦。它还可以将日期更改为正确的值,但顺序错误,因为最后一个建议显示为mm/dd/yyyy而不是yyyy-mm-dd。谢谢你的帮助comment@KostasK. 不,Dateserial(2017,1-1,21)
返回2016年12月21日,Dateserial(2017,-13,1)
返回2015年11月1日。@Darren Bartrup Cook感谢Darren澄清这一点。我不确定@Fabsklo将日期更改为正确的值是什么意思,但在错误的顺序下,Sheet1.范围(“A1”)=Dateserial(年(日)、月(日)-1,21)
将使用您的本地格式设置在A1中放置日期。然后,您可以将单元格的格式更改为yyyy-mm-dd
,这样Excel仍然可以理解这是一个日期。谢谢您,这非常接近,除了日期返回为mm/21/yyy,我需要它为yyyy-mm-21。最后一行代码有一些错误,我尝试了函数lastmount()作为Date Dim d作为Date d=DateAdd(“m”,-1,Date)lastmount=DateSerial(Year(d),Month(d),21)d=Format(lastmount,“yyyy-mm-dd”)MsgBox d End函数,结果相同“8/21/2017”嘿,科斯塔斯!我得到了它。。。只需将变量d的调用从date更改为string。非常感谢兄弟的帮助,祝你过得愉快!您需要在函数外部处理格式。请参阅编辑。谢谢kostas,非常接近,除了日期返回为mm/21/yyyy,我需要它为yyyy-mm-21。最后一行代码有一些错误,我尝试了函数lastmount()作为Date Dim d作为Date d=DateAdd(“m”,-1,Date)lastmount=DateSerial(Year(d),Month(d),21)d=Format(lastmount,“yyyy-mm-dd”)MsgBox d End函数,结果相同“8/21/2017”嘿,科斯塔斯!我得到了它。。。只需将变量d的调用从date更改为string。非常感谢兄弟的帮助,祝你过得愉快!您需要在函数外部处理格式。请参见编辑。