按照你的意思,你返回的值应该是一个String型,而不是日期型,把类型修改后可以运行,另外我觉的你的算法有些不太安全,最好使用日期函数进行运算。
Function date1(a As Integer, b As Integer, c As Integer) As String
If b >= 1 And b < 4 Then date1 = CStr(a - 1) + "-" + CStr(9) + "-" + CStr(30)
If b >= 4 And b < 6 Then date1 = CStr(a - 1) + "-" + CStr(12) + "-" + CStr(31)
If b >= 6 And b < 9 Then date1 = CStr(a) + "-" + CStr(3) + "-" + CStr(31)
If b >= 9 And b < 12 Then date1 = CStr(a) + "-" + CStr(6) + "-" + CStr(30)
If b = 12 Then date1 = CStr(a) + "-" + CStr(9) + "-" + CStr(30)
End Function
vba自带的日期函数:
Date 系统当前的日期
DateValue(字符串) 字符串转换为日期
DateSerial(年,月,日) 指定的年月日转换为日期
DateAdd("x",时间间隔,"日期") 某一日期加上一段时间
DateDiff("x","日期","日期") 两日期间相差一段时间
DatePart("x", "日期") 返回日期的部分
Application.Days360("日期开始", "日期结束") 两日期间的天数(按每月30天计)
DateDiff("d", "日期开始", "日期结束") 两日期间的天数(按实际天数计)
x为:
yyyy 年
q 季
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒
Year("日期") 返回日期的年份
Month("日期") 返回日期的月份
Day("日期") 返回日期的某日
Hour("日期") 返回日期的某时
Minute("日期") 返回日期的某分
Second("日期") 返回日期的某秒
Time 系统当前的时间
Timer 午夜到现在经过的秒数
TimeValue(字符串) 字符串转换为时间
TimeSerial(时,分,秒) 指定的时分秒转换为时间
Now 系统当前的日期和时间
Weekday("日期") 返回日期的星期几
WeekdayName(n) 数字转化成星期几(n为1~7)
MonthName(n) 数字转化成月份(n为1~12)
请参考
日期转化有三个函数:
1、=DAY(A1),转化为日
2、=MONTH(A1),转化为月
3、=YEAR(A1),转化为年
这样可以吗?
[b1]=format([a1],"yyyy年mm月")
修改字符串可以实现各种格式