示例:转换成英文日期
如图所示,该表为某公司合同签订日期。现需要将合同签订日期转换成英文日期,该如何通过VBA批量实现?
姓名 | 合同签订日期 | 英文日期1 | 英文日期2 | 英文日期3 |
辛劭钧 | 2010/1/1 | 1 Jan 2010 | 1 January 2010 | 1st Jan,2010 |
林庆荣 | 2009/10/2 | |||
许亚瑾 | 2010/1/11 | |||
施佳翔 | 2007/12/21 | |||
钟皓宇 | 2010/7/31 | |||
李志仁 | 2008/1/22 | |||
杨婉伶 | 2008/1/5 | |||
林艺芳 | 2008/1/5 | |||
陈俐宁 | 2009/11/15 | |||
李冠霆 | 2009/12/8 | |||
吕柏贤 | 2010/6/22 | |||
杜金佳 | 2010/1/14 | |||
林映君 | 2009/11/15 | |||
陈柏勋 | 2009/12/8 | |||
陈怡瑄 | 2010/1/14 | |||
叶羽恬 | 2009/9/15 | |||
王介廷 | 2009/9/25 | |||
穆彦浚 | 2010/4/8 | |||
洪亚菁 | 2010/3/5 | |||
吴宗隆 | 2008/1/5 | |||
余思宜 | 2010/7/20 | |||
邱建霖 | 2008/1/5 | |||
黄译庆 | 2010/3/5 | |||
周逸宣 | 2010/6/22 | |||
梁殷铨 | 2009/10/31 | |||
李晏庭 | 2009/10/18 | |||
曹贤德 | 2009/11/15 | |||
张政 | 2010/7/2 | |||
杨智玮 | 2009/10/20 | |||
陈伯伦 | 2010/1/14 | |||
柯雅文 | 2010/5/9 | |||
陈韦志 | 2010/6/5 |
实现代码
Option Explicit
Sub 转换英文日期()
Dim RowN As Long
Dim dDate As Date
For RowN = 2 To Cells(Rows.Count, "A").End(xlUp).Row
dDate = Cells(RowN, "B").Value
Cells(RowN, "C").Value = "'" & CStr(Format(dDate, "d MMM YYYY"))
Cells(RowN, "D").Value = "'" & CStr(Format(dDate, "d MMMM YYYY"))
Select Case Day(dDate)
Case 1, 31
Cells(RowN, "E").Value = Format(dDate, "d""st"" MMMM,YYYY")
Case 2
Cells(RowN, "E").Value = Format(dDate, "d""nd"" MMMM,YYYY")
Case 3
Cells(RowN, "E").Value = Format(dDate, "d""rd"" MMMM,YYYY")
Case Else
Cells(RowN, "E").Value = Format(dDate, "d""th"" MMMM,YYYY")
End Select
Next
End Sub
Format函数
Format函数可以用来对数字、日期、文本进行格式化,并返回格式化后的结果。其语法
Format(expression [,format[,firstdayofweek[,firstweekofyear ]
其中,参数expression为被格式化的数字、日期或文本表达式。参数format为格式表达式。关于日期和时间的格式设置,见表。
Format函数的format参数关于日期和时间的设置
字 符 | 说 明 |
(:) | 时间分隔符 |
(/) | 日期分隔符 |
d | 将天显示为不带前导零的数字(例如,1) |
d | 将天显示为带—个前导零的数字(例如,01) |
ddd | 将天显示为缩写(例如,Sun) |
dddd | 将天显示为全名(例如,Sunday) |
M | 将月显示为不带前导零的数字(例如,一月表示为1) |
MM | 将月显示为带一个前导零的数字(例如,01/12/01) |
MMM | 将月显示为缩写(例如,Jan) |
MMMM | 将月显示为完整的月份名称(例如,January) |
h | 使用12小时制时钟将小时显示为不带前导零的数字(例如,1:15:15PM) |
hh | 使用12小时制时钟将小时显示为带前导零的数字(例如,01:15:15PM) |
H | 使用24小时制时钟将小时显示为不带前导零的数字(例如,1:15:15) |
HH | 使用24小时制时钟将小时显示为带前导零的数字(例如,01:15: `5) |
m | 将分钟显示为不带前导零的数字(例如,12:1:15) |
mm | 将分钟显示为带前导零的数字(例如,12:01:15) |
s | 将秒显示为不带前导零的数字(例如,12:15:5) |
ss | 将秒显示为带前导零的数字(例如,12:15:05) |
yy | 以带一个前导零的两位数字格式显示年(例如,09) |
yyyy | 以四位数字格式显示年(例如,2009) |
参数firstdayofweek表示以哪一天作为一周的开始。
参数firstweekofyear表示以何种设置为标准表示每年的一周开始。
特殊的英文格式日期
Format函数的功能虽然强大,但是无法将数字转换为序数词。因而本例中,使用了SelectCase分支结构,对日期进行分组判断,从而根据实际情况设置不同的序数词。
使用DatePart函数获取日期信息
DatePart函数可以获取日期或者时间中的某个信息,其语法为
DatePart(interval,date[,firstdayofweek[,firstweekofyear]])
参数interval为一个文本,表示需要获取的信息,可以为下表中的任意一个字符。
参数设置 | Date参数范围 |
yyyy | 年 |
q | 季度 |
m | 月 |
y | 三个参数均表示天,实质是一致的 y表示1年中的天数 d表示天 w表示1周中的天数 |
d | |
w | |
ww | 周 |
h | 小时 |
n | 分钟 |
s | 秒 |
- 参数date为一个日期表达式。
- 参数firstdayofweek表示以哪一天作为一周的开始,其值可以为表3-6中的任意常量。
- 参数firstweekofyear表示每年的一周开始以何种设置为标准。
以上函数可以返回一个日期信息,若要得知当前是一年中的第几个季度时,可以使用以下表达式获取:
DatePart("q",Date)