VBA学习笔记之Text(四)——格式化字符串
⼀、Format函数
vba自学好学吗可以使⽤Format函数规定输出的字符串的格式,其语法为:
Format(expression [,format])
参数expression必须,为任何有效的表达式,其余参数均为可选。参数format表⽰所要采取的格式。
⼆、字符串格式中的字符符号:
&:空或字符占位符,如果在输⼊的字符串的相应位置有字符,则显⽰该字符,否则不显⽰
@:空或字符占位符,如果在输⼊的字符串的相应位置有字符,则显⽰该字符,否则显⽰空格
<:将所有字符显⽰为⼩写格式
>:将所有字符显⽰为⼤写格式
!:强制占位符从左向右填满,满⾜默认为从右向左。
演⽰代码:
Sub FormatDemo1()
Debug.Print Format(6666666, "(@@@)&&&-&&&&No Phone")
Debug.Print Format(6666666, "(&&&)&&&-&&&&No Phone")
Debug.Print Format(66666666, "(@@@)&&&-&&&&No Phone")
Debug.Print Format(66666666, "(&&&)&&&-&&&&No Phone")
Debug.Print Format(6666666666#, "(@@@)&&&-&&&&No Phone")
Debug.Print Format(6666666666#, "(&&&)&&&-&&&&No Phone")
Debug.Print Format("", "(&&&)&&&-&&&&No Phone")
Debug.Print Format("Hello", "<")
Debug.Print Format("Hello", ">")
End Sub
运⾏结果:
( )666-6666
()666-6666
( 6)666-6666
(6)666-6666
(666)666-6666
(666)666-6666
No Phone
hello
HELLO
三、Format函数的简要使⽤规则:
1. 允许⽤户预先定义或⽤户定义的格式来建⽴多种⽤于输出字符串、数字和⽇期/时间数据的⽅法
2. 创建⽤户定义的数值格式最多可以有四个部分,每个部分代表⼀种不同类型的数值,且⽤分号分隔。第⼀部分在单独命名使⽤时可⽤于所
有值,与其他多个部分⼀起使⽤时只⽤于正数;第⼆部分⽤于负数;第三部分⽤于零值;第四个部分⽤于Null值。
参数中不必包括所有四个部分,但所有部分的数⽬决定了每个⼀个部分所定义的数值类型。只有⼀个部分,则应⽤于所有的数值;
有两个部分,则第⼀部分应⽤于正数和零值,第⼆部分应⽤于负数;有三个部分,则第⼀部分⽤于正数,第⼆部分⽤于负数,第三部分⽤于零值;有四个部分时,同2.
如果忽略了⼀个部分,则该部分使⽤与定义正数的部分⼀样的格式,如:"#.00;;#,##",表⽰负数值与正数值使⽤同⼀种格式显
⽰。
如果参数含有命名格式,则只能有⼀个部分。
4. 字符串值的⽤户定义格式有两个部分,第⼀部分可应⽤于所有值,第⼆部分应⽤于Null值或零长字符串。
四、预定义的⽇期和时间格式
Sub FormatDemo2()
Debug.Print "General Date:" & Format("28/02/2012", "General Date")
Debug.Print "Long Date:" & Format("28/02/2012", "Long Date")
Debug.Print "Medium Date:" & Format("28/02/2012", "Medium Date")
Debug.Print "Short Date:" & Format("28/02/2012", "Short Date")
Debug.Print "Long Time:" & Format("17:30:03", "Long Time")
Debug.Print "Medium Time:" & Format("17:30:03", "Medium Time")
Debug.Print "Short Time:" & Format("17:30:03", "Short Time")
'预定义的数值格式:
Debug.Print "General Number:" & Format(1234.08933, "General Number") Debug.Print "Currency:" & Format(123456.0789, "Currency")
Debug.Print "Fixed:" & Format(0.2, "Fixed")
Debug.Print "Standard:" & Format(123456.0789, "Standard")
Debug.Print "Percent:" & Format(0.7321, "Percent")
Debug.Print "Scientific:" & Format(123456.0789, "Scientific")
Debug.Print "Yes/No:" & Format(0, "Yes/No") '0为No,⾮0为Yes
Debug.Print "True/False:" & Format(0, "True/False") '0为False,⾮0为True Debug.Print "On/Off:" & Format(0, "On/Off") '0为Off,⾮0为On
End Sub
运⾏结果:
General Date:2012-2-28
Long Date:2012年2⽉28⽇
Medium Date:12-02-28
Short Date:2012-2-28
Long Time:17:30:03
Medium Time:下午 05:30
Short Time:17:30
General Number:1234.08933
Currency:¥123,456.08
Fixed:0.20
Standard:123,456.08
Percent:73.21%
Scientific:1.23E 05
Yes/No:No
True/False:False
On/Off:Off
五、创建⽤户⾃定义的⽇期和时间格式的字符
Sub FormatDemo3()
'基于当前Windows系统的短⽇期和短时间国际设置格式的⽇期和时间
Debug.Print "c: " & Format("28/02/2012 17:30:03", "c")
'基于当前Windows系统的长⽇期国际设置格式的完整⽇期
Debug.Print "dddddd: " & Format("28/02/2012", "dddddd")
Debug.Print "/⽇期分隔符: " & Format("28/02/2012", "mm-dd-yyyy")
Debug.Print "d: " & Format("28/02/2012", "d") '返回天
Debug.Print "dd: " & Format("28/02/2012", "dd") '返回带有前导0的天
Debug.Print "ddd: " & Format("28/02/2012", "ddd") '英⽂星期的简写
Debug.Print "dddd: " & Format("28/02/2012", "dddd") '英⽂星期的全称
Debug.Print "ddddd: " & Format("28/02/2012", "ddddd") '短⽇期格式
Debug.Print "h: " & Format("05:08:06", "h") '⼩时
Debug.Print "hh: " & Format("05:08:06", "hh") '前导0的⼩时
Debug.Print "n: " & Format("05:08:06", "n") '分钟
Debug.Print "nn: " & Format("05:08:06", "nn") '前导0分钟
Debug.Print "s: " & Format("05:08:06", "s") '秒
Debug.Print "ss: " & Format("05:08:06", "ss") '前导0秒
'基于12⼩时制的时间,包含Windows区域设置中指定的时间分隔符和前导0.
Debug.Print "ttttt: " & Format("05:08:06", "ttttt")
Debug.Print "hh:mm:ss AM/PM: " & Format("17:08:06", "hh:mm:ss AM/PM")
Debug.Print "hh:mm:ss am/pm: " & Format("17:08:06", "hh:mm:ss am/pm")
Debug.Print "hh:mm:ss A/P: " & Format("17:08:06", "hh:mm:ss A/P")
Debug.Print "hh:mm:ss a/p: " & Format("17:08:06", "hh:mm:ss a/p")
Debug.Print "w: " & Format("02/02/2012", "w") '1~7分别表⽰星期天到星期六
Debug.Print "ww: " & Format("02/02/2012", "ww") '⼀年中的第多少周(为1~64间的数字)
Debug.Print "m: " & Format("02/02/2012", "m") '⽉(1~12范围内的数字)
Debug.Print "mm: " & Format("02/02/2012", "mm") '前导0⽉
Debug.Print "mmm: " & Format("02/02/2012", "mmm") '英⽂⽉的简写
Debug.Print "mmmm: " & Format("02/02/2012", "mmmm") '英⽂⽉的全称
Debug.Print "q: " & Format("02/02/2012", "q") '季度(1~4范围内数字)
Debug.Print "y: " & Format("02/02/2012", "y") '⼀年中的第n天(1~365之间的数字)
Debug.Print "yy: " & Format("02/02/2012", "yy") '年(00~99之间的数字)
Debug.Print "yyyy: " & Format("02/02/2012", "yyyy") '年(1000~9999范围内的四位数字)
End Sub
运⾏结果:
c: 2012-2-28 17:30:03
dddddd: 2012年2⽉28⽇
/⽇期分隔符: 02-28-2012
d: 28
dd: 28
ddd: Tue
dddd: Tuesday
ddddd: 2012-2-28
h: 5
hh: 05
n: 8
nn: 08
s: 6
ss: 06
ttttt: 5:08:06
hh:mm:ss AM/PM: 05:08:06 PM
hh:mm:ss am/pm: 05:08:06 pm
hh:mm:ss A/P: 05:08:06 P
hh:mm:ss a/p: 05:08:06 p
w: 5
ww: 5
m: 2
mm: 02
mmm: Feb
mmmm: February
q: 1
y: 33
yy: 12
yyyy: 2012
六、⽤于创建⽤户⾃定义数字格式的字符
1. 0:数字站位符。如果参数expression所代表的数值在相应的0位置上有⼀个数字,则显⽰这个数字,否则显⽰0.所指定的⼩数点后的位
数,使数值舍⼊为给定的⼩数位数,但不影响⼩数点左边的数字位数。
2. #:数字占位符。如果参数expression所代表的数值在相应的#位置上有⼀个数字,则显⽰这个数字,否则什么也不显⽰。
3. .:⼩数点占位符。⼩数点占位符实际显⽰的字符由本机Windows系统国际设置格式决定
4. %:百分数占位符。⾸先将参数expression所代表的数值乘以100,然后把它作为百分数显⽰。
5. ,:千分位占位符。实际显⽰的字符由本机Windows系统国际设置格式决定。在格式定义中只需要给出⼀个千分位分隔符。如
Format(1000000,”#,###“)返回:1,000,000
6. E-E e-e :科学记数法格式。如果格式表达式在E-、E 或e-、e 的右边⾄少有⼀个数字占位符(0或#),数字就以科学记数法格式显⽰数
字,参数Format中所⽤的字母E或e在该数字和它的指数之间显⽰。右边的数字占位符数⽬决定了要在指数中显⽰的位数。使⽤E-或e-可以在负指数前插⼊⼀个减号,使⽤E 或e 可以在正指数前插⼊⼀个正号。
7. - $:显⽰⼀个直接量字符
8. \:反斜杠后的字符以直接量字符显⽰。可以⽤反斜杠将某个特定格式的字符以直接量字符显⽰。
Sub FormatDemo4()
Debug.Print "0: " & Format(23.657, "0.0000")
Debug.Print "0: " & Format(2357, "00000")
Debug.Print "#: " & Format(23.567, "##.##")
Debug.Print "#: " & Format(12323.567, "#,###.##")
Debug.Print "%: " & Format(0.567, "##.00%")
Debug.Print "E-: " & Format(1.09837555, "#4##E-###")
Debug.Print "E : " & Format(109837.555, "#.##E-###")
Debug.Print "E: " & Format(109837.555, "#.##E-###")
Debug.Print "$: " & Format(234.25, "$#,###.##")
Debug.Print "\: " & Format(0.25, "##.##\%")
End Sub
运⾏结果:
0: 23.6570
0: 02357
#: 23.57
#: 12,323.57
%: 56.70%
E-: 10984E-4
E : 1.1E5
E: 1.1E5
$: $234.25
\: .25%
注:格式代码可以叠加,如:
注:
Sub ShowFormatVal()
Debug.Print Format(Now, """Today is ""dddd, mmmm d, yyyy" & _
""" the ""y""th day of the year. The time is now"" ttttt.")
End Sub
运⾏结果:Today is Saturday, October 6, 2012 the 280th day of the year. The time is now 19:19:54.
【应⽤】格式设置在表格式智能化上有很⼤帮助,尤其做⽇常报表的来说。制订好报表格式的宏,让代码为您的从繁复⼯作脱离,快哉快哉!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。