篇一:Excel时间加减函数TMC
Function TMC(time_text, minu)
'时间格式:2012-1-11 16:28:14
Dim t2, t3, t4, y, m, d, zong_miao, miao1, miao2, shi, fen, miao, shi1, fen1, miao3 Dim t1, m1
Dim flag1 As Boolean
Dim flag2 As Boolean
t1 = time_text
m1 = -minu
flag1 = False
flag2 = False
If IsNumeric(m1) Then
flag2 = True
End If
If IsDate(t1) Then
flag1 = True
End If
If t1 = "" Or m1 = "" Or flag2 = False Or flag1 = False Then
TMC = ""
Exit Function
End If
y = Year(t1)
m = Month(t1)
d = Day(t1)
shi = Hour(t1)
fen = Minute(t1)
miao = Second(t1)
If shi = 0 Then
shi = 24
End If
zong_miao = shi * 3600 + fen * 60 + miao
miao1 = m1 * 60
miao2 = zong_miao - miao1
shi1 = Int(miao2 / 3600)
fen1 = Int((miao2 - shi1 * 3600) / 60)
miao3 = miao2 - shi1 * 3600 - fen1 * 60
If shi1 >= 24 Then
n = Int(shi1 / 24)
shi1 = shi1 - n * 24
d = d + n
End If
If m = 1 Or m = 3 Or m = 5 Or m = 7 Or m = 8 Or m = 10 Or m = 12 Then If d > 31 Then
m = m + Int(d / 31)
d = d Mod 31
End If
ElseIf m = 1 Or m = 3 Or m = 5 Or m = 7 Or m = 8 Or m = 10 Or m = 12 ThenIf d > 30 Then
m = m + Int(d / 31)
d = d Mod 30
End If
ElseIf m = 2 Then
If y Mod 4 = 0 And y Mod 100 = 0 And y Mod 400 = 0 Then
If d > 29 Then
m = m + Int(d / 31)
d = d Mod 29
End If
Else
If d > 28 Then
m = m + Int(d / 31)
d = d Mod 28
End If
End If
End If
If m > 12 Then
y = y + Int(m / 12)
m = m Mod 12
End If
If Len(shi1) < 2 Then
shi1 = "0" & shi1
End If
If Len(fen1) < 2 Then
fen1 = "0" & fen1
End If
If Len(miao3) < 2 Then
miao3 = "0" & miao3
End If
If shi = 24 And shi1 <= 23 Then
d = d - 1
If d <= 0 Then
If m = 5 Or m = 7 Or m = 8 Or m = 10 Or m = 12 Then
d = 30
m = m - 1
ElseIf m = 4 Or m = 2 Or m = 6 Or m = 8 Or m = 9 Or m = 11 Or m = 1 Thend = 31
m = m - 1
ElseIf m = 3 Then
If y Mod 4 = 0 And y Mod 100 = 0 And y Mod 400 = 0 Then
d = 29
m = m - 1
Else
d = 28
m = m - 1
End If
End If
End If
If m <= 0 Then
m = 12
y = y - 1
End If
End If
If m < 10 Then
m = "0" & m
End If
If d < 10 Then
d = "0" & d
End If
t2 = y & "-" & m & "-" & d & " "
t3 = shi1 & ":" & fen1 & ":" & miao3
t4 = t2 & t3
TMC = t4
End Function
篇二:Excel 日期常用函数
VBA日期的加减函数:DateAdd 函数
返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔。 语法
DateAdd(interval, number, date) DateAdd 函数语法中有下列命名参数: 部分
描述
interval 必要。字符串表达式,是所要加上去的时间间隔。 number date 设置
必要。数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。 必要。Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。
interval 参数具有以下设定值: 设置 yyyy 年 q m y d w ww h n
季 月
一年的日数 日
一周的日数 周 时 分钟
描述
s 说明
秒
可以使用 DateAdd 函数对日期加上或减去指定的时间间隔。例如,可以用 DateAdd 来计算距今天为三十天的日期;或者计算距现在为 45 分钟的时间。 为了对 date 加上“日”,可以使用“一年的日数” (“y”),“日” (”d”) 或“一周的日数” (”w”)。
DateAdd 函数将不返回有效日期。在以下实例中将 1 月31 日加上一个月: DateAdd(m, 1, 31-Jan-95)
上例中,DateAdd 返回 1995 年 2 月 28 日,而不是 1995 年 2 月 31 日。如果 date 是 1996 年 1 月 31 日,则由于 1996 年是闰年,返回值是 1996 年 2 月 29 日。
如果计算的日期超前 100 年(减去的年度超过 date 中的年份),就会导致错误发生。
如果 number 不是一个 Long 值,则在计算时取最接近的整数值来计算。 注意DateAdd 返回值的格式由 Control Panel设置决定,而不是由传递到date 参数的格式决定。
DateAdd 函数示例
本示例先取得一个日期,再用 DateAdd 函数显示未来数月后的日期。 Dim FirstDate As Date ' 声明变量。 Dim IntervalType As String Dim Number As Integer Dim Msg
IntervalType = "m" ' "m"指定以“月份”作为间隔。 FirstDate = InputBox("Enter a date")
Number = InputBox("Enter number of months to add")
Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate) MsgBox Msg
DATEDIF
计算两个日期之间的天数、月数或年数。提供此函数是为了与 Lotus 1-2-3 兼容。
语法
DATEDIF(start_date,end_date,unit)
Start_date 为一个日期,它代表时间段内的第一个日期或起始日期。日期有多种输入方法:带引号的文本串(例如 "2001/1/30")、系列数(例如,如果使用 1900 日期系统则 36921 代表 2001 年 1 月 30 日)或其他公式或函数的结果(例如,DATEVALUE("2001/1/30"))。有关日期系列数的详细信息,请参阅 NOW。
End_date 为一个日期,它代表时间段内的最后一个日期或结束日期。
Unit 为所需信息的返回类型。
Unit 返回
"Y" 时间段中的整年数。 "M" 时间段中的整月数。 "D" 时间段中的天数。
"MD" start_date 与 end_date 日期中天数的差。忽略日期中的月和年。 "YM" start_date 与 end_date 日期中月数的差。忽略日期中的日和年。 "YD" start_date 与 end_date 日期中天数的差。忽略日期中的年。
说明
Microsoft Excel 按顺序的系列数保存日期,这样就可以对其进行计算。如果工作簿使用 1900 日期系统,则 Excel 会将 1900 年 1 月 1 日保存为系列数 1。而如果工作簿使用 1904 日期系统,则 Excel 会将 1904 年 1 月 1 日保存为系列数 0,(而将 1904 年 1 月 2 日保存为系列数 1)。例如,在 1900 日期系统中 Excel 将 1998 年 1 月 1 日保存为系列数 35796,因为该日期距离 1900 年 1 月 1 日为 35795
天。请查阅 Microsoft Excel 如何存储日期和时间。
Excel for Windows 和 Excel for Macintosh 使用不同的默认日期系统。有关详细信息,请参阅 NOW。
示例
DATEDIF("2001/1/1","2003/1/1","Y") 等于 2,即时间段中有两个整年。
DATEDIF("2001/6/1","2002/8/15","D") 等于 440,即在 2001 年 6 月 1
日和 2002 年 8 月 15 日之间
有 440 天。
DATEDIF("2001/6/1","2002/8/15","YD") 等于 75,即在 6 月 1 日与 8 月 15 日之间有 75 天,忽略日
期中的年。
DATEDIF("2001/6/1","2002/8/15","MD") 等于 14,即开始日期 1 和结束日期 15 之间的差,忽略日期中
的年和月。
纵观Excel日期函数对日期的运算规则得出以下理解(比如Edate、Datedif等都是遵循这个规则的):先理解“月末”——指某月的最后一天再理解“整月”即不是按30天也不是
按29天等来算,这个是一个变动的概念。
——由m月d日至m+1月d日,若m+1月没有d日,则取m+1月的“月末”算一个“整月”。反之,倒推
回来,由m月d日至m-1月d日,若m-1月没有d日,则取m-1月的月末算一个“整月”
例子:2006-1-28~31日,往后推1个月得到的都是2-28,其中2006-1-28遵循了m+1=2月d=28日的规则,而2006-1-29~31则遵循了“取月末”的规则,即因为2006年的m+1=2月没有29、30、31日,则取其月末。用=Edate(star_date,1)验证上述规则;用Datedif(star_date,"2006-2-28","m")同样能验证这个规则。即从2006-1-28~31日至2006-2-28的Datedif(??,"m")——都算1个“整月”。 Private Function getFirstDayOfMonth(ByVal D As Date) As Date getFirstDayOfMonth = CDate(Year(D) & "-" & Month(D) & "-1") End Function
'获取给定日期的当月最后一天
Private Function getLastDayOfMonth(ByVal D As Date) As Date Dim dteFirstDayOfNextMonth As Date
dteFirstDayOfNextMonth = DateAdd("m", 1, getFirstDayOfMonth(D)) getLastDayOfMonth = DateAdd("d", -1, dteFirstDayOfNextMonth) End Function
'获取给定日期的当年第一天
Private Function getFirstDayOfYear(ByVal D As Date) As Date getFirstDayOfYear = CDate(Year(D) & "-1-1") End Function
'获取给定日期的当年最后一天
Private Function getLastDayOfYear(ByVal D As Date) As Date getLastDayOfYear = CDate(Year(D) & "-12-31") '本月第一天星期几
[A22].Value = Weekday([A21]) b = [A22].Value Select Case b
Case vbSunday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期日" Case vbMonday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期一" Case vbTuesday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期二" Case vbWednesday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期三" Case vbThursday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期四" Case vbFriday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期五" Case vbSaturday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期六" End Select
'得到本月第一周周一的日期
Select Case b Case vbSunday [B21].Value = DateAdd("d", 1, [A21]) Case Else
[B21].Value = DateAdd("d", 9 - b, [A21]) 使用 DatePart("ww", Date()) 来返回周 DatePart 函数
返回一个包含已知日期的指定时间部分的 Variant (Integer)。 语法
DatePart(interval, date[,firstdayofweek[, firstweekofyear]]) DatePart 函数语法中有下列命名参数:
篇三:各种日期格式的转换公式
excel常用函数公式大全:各种日期格式的转换公式 (2012-11-15 11:18:01)
转载▼
标签: 分类: 精品转载
杂谈
不少朋友提问关于excel中各种功能的实现方法、excel函数的编写以及应用方法,经过寻修网/多方收集,现在将常用的excel常用函数公式逐一整理出来,供广大网友们借鉴,如果还需要实现什么功能,也可在寻修网上提问,我们一定及时补充。
各种日期格式的转换公式
将 “01/12/2005” 转换成“20050112”格式
=RIGHT(A1,4)&MID(A1,4,2)&LEFT(A1,2)
=YEAR($A2)&TEXT(MONTH($A2),"00")&TEXT(DAY($A2),"00") 该公式不用设置数据有效性,但要设置储存格格式。
也可以用下列两方法:
1、先转换成文本, 然后再用字符处理函数。
2、[数据]-[分列] [日期]-[MDY]
将“2005年9月”转换成“200509”格式
先用公式:=text(a1,"yyyymm")+0 然后将单元格格式为常规。 将“2005-8-6”格式转换为“20050806”格式
用公式:=TEXT(A1,"YYYYMMDD")
反之,将20050806转为日期2005-8-6格式,可用公式:
=DATE(LEFT(A1,4),MID(A1,5,2),RIGHT(A1,2))
另四种公式:
=text(a1,"0000-00-00") 显示:2005-08-06
=--TEXT(A1,"#-00-00"),把单元格设置为日期格式 显示:2005-8-6 =TEXT(20050806,"0000-00-00")*1,单元格设置日期型 显示:2005-8-6 =VALUE(LEFT(A1,4)&"-"&MID(A1,5,2)&"-"&RIGHT(A1,2)) 显示:2005-8-6 将“20060501”转换为“2006-05-01”格式
=DATE(LEFT(A2,4),MID(A2,5,2),RIGHT(A2,2))
将“199306”转换为“1993-6”
公式1:=LEFT(A3,4)&"-"&RIGHT(A3,2)*1
公式2:=--TEXT(A3*100+1,"#-00-00") 公式2需要设置单元格格式,自定义:e-m
公式3:=TEXT(TEXT(A3&"01","0000-00-00"),"e-m")
把198405转换成1984.05
一、查找—1984,替换—1984.
二、如果全部是年月的话,寻修网/建议,
1、采取辅助=mid(xxxxxx,1,4) & "." & right(xxxxxx,2)
2、选中这列,用数据中的分列。然后?????
三、单元格格式/数字/自定义,类型下面输入:####"."##
将文本“2004.01.02” 转换为日期格式:2004-1-2
=DATE(MID(A1,1,4),MID(A1,6,2),MID(A1,9,2))
将2005-8-6转换为2005年8月6日格式
=TEXT(A1,"yyyy""年""m""月""d""日"";@")
象22怎样转换成22日?转成当年当月的日子
公式为:=date(year(now()),month(now()),22)
将“2006年5月”转换成“2006年05月”
公式为:=TEXT(A8,"yyyy""年""mm""月"";@")
也可以这样处理:选中单元格,设置单元格公式-数字-自定义,将
yyyy“年”m“月”改为:yyyy“年”mm“月”,即可。但这方法打印出来显示为:2006/5/
将“1968年6月12日”转换为“1968/6/12”格式
=YEAR(A1)&"/"&MONTH(A1)&"/"&DAY(A1) 显示:1968/6/12
=TEXT(A1,"yyyy/mm/dd") 显示:1968/06/12
将“1968年6月12日”转换为“1968-6-12”格式
=YEAR(A1)&"-"&MONTH(A1)&"-"&DAY(A1) 显示:1968-6-12
=TEXT(A1,"yyyy-mm-dd") 显示:1968-06-12
将1993-12-28的日期格式转换成1993年12月
=CONCATENATE(YEAR(A1),"年",MONTH(A1),"月")
=YEAR(A1)&"年"&MONTH(A1)&"月"
也可以自定义格式 [$-404]e"年"m"月"
将“1978-5-2”包含年月日的日期转换成“197805”只有年月的格式 =year(A1)&text(month(A1),"00")
要将“99.08.15” 格式转换成“1999.08.15”如何做
选中列,数据菜单中选分列,分列过程中“格式”选“日期YMD”,结束。 要保持2005/8/6格式
当输入2005/8/6后系统自动变成2005-8-6,要保持2005/8/6格式,可以使用强制文本(前面加'号)或使用公式=TEXT(A1,"YYYY/MM/DD")。也可以用另一种公式:
=IF(ISERROR(TEXT(A1,"yyyy/mm/dd")),TEXT(A1,"0000!/00!/00"),TEXT(A1,"yyyy/mm/dd"))
将“二○○三年十二月二十五日”转为“2003-12-25”格式,
1、可以用数组公式将中文日期转化为日期系列数
{=14610+MATCH(SUBSTITUTE(A3,"元","一
"),TEXT(ROW($14611:$55153),"[DBNum1]yyyy年m月d日"),0)}
该公式速度较慢。
2、改进后的公式,速度要快的多:
{=DATE(1899+MATCH(LEFT(A7,4),TEXT(ROW($1900:$2100),"[DBNum1]0000"),0),MONTH(MATCH(SUBSTITUTE(MID(A7,6,7),"元","一
"),TEXT(ROW($1:$366),"[DBNum1]m月d日
"),0)),DAY(MATCH(SUBSTITUTE(MID(A7,6,7),"元","一
"),TEXT(ROW($1:$366),"[DBNum1]m月d日"),0)))}
要设置为1900年的日期格式。
日期格式转换
如A列是月份数为8,B列是日期数为18,如何在C列显示“8月18日” =A1&"月"&B1&"日"
反之,要将C列的“8月18日” 直接分别到D、E列,显示月份和日期, 月数份=LEFT(C5,FIND("月",C5)-1)
日期数=MID(C5,FIND("月",C5)+1,FIND("日",C5)-FIND("月",C5)-1) 也可分别用公式:
=month(--c5)
=day(--c5)
日期格式转换问题
输入的日期是:04-07-26. 与另一格的"001"合并,合并出来是:040726001. =TEXT(A1,"YYMMDD")&"001"
要想自动取得“编制日期:XXXX年X月X日”
可在该单元格输入 ="编制日期:"&TEXT(TODAY(),"yyyy年m月d日")
excel中如何将文本格式数字转为数字格式 ?
?
?
?
?
?
?
?
| 浏览:16656 | 更新:2013-03-01 10:48 | 标签:excel
1
?
2
?
3
?
4
?
5
《Excel2010日期函数的加减怎么做》出自:百味书屋
链接地址:http://www.850500.com/news/31103.html
转载请保留,谢谢!