Format 函数

返回一个 Variant (String) 值,其中包含根据格式表达式中所含指令设置格式的表达式

注意

有兴趣开发跨多个平台扩展 Office 体验的解决方案吗? 查看新的 Office 外接程序模型。 与VSTO外接程序和解决方案相比,Office外接程序占用的空间较小,您可以使用几乎任何Web编程技术(例如HTML5,JavaScript,CSS3和XML)来构建它们。

语法

Format(Expression, [ Format ], [ FirstDayOfWeek ], [ FirstWeekOfYear ])

Format 函数语法包含以下各部分。

Part 说明
Expression 必需。 任何有效的表达式。
Format 可选。 一个有效的指定格式表达式或用户定义的格式表达式。
FirstDayOfWeek 可选。 一个指定一周的第一天的常量
FirstWeekOfYear 可选。 一个指定一年的第一周的常量。

设置

firstdayofweek参数具有这些设置。

常量 说明
vbUseSystem 0 使用 NLS API 设置。
vbSunday 1 周日(默认)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六

firstweekofyear参数具有这些设置。

常量 说明
vbUseSystem 0 使用 NLS API 设置。
vbFirstJan1 1 从 1 月 1 日所在的周开始(默认)。
vbFirstFourDays 2 从一年中至少包含四天的第一周开始。
vbFirstFullWeek 3 从一年的第一个完整周开始。

注解

格式化的对象 具体操作
数字 使用预定义的指定数值格式或创建用户定义的数值格式。
日期和时间 使用预定义的指定日期/时间格式或创建用户定义的日期/时间格式。
日期和时间序列号 使用日期和时间格式或数值格式。
字符串 创建您自己的用户定义的字符串格式。

Formatformat 截断为 257 字符。

如果尝试设置数字格式而不指定 format,则 Format 提供类似于 Str 函数的功能(尽管它能够感知区域设置)。 但是,通过使用 Format 将格式设置为字符串的正数不包括为值的符号保留的前导空格;使用 Str 转换这些数字可保留前导空格。

如果您正在设置非本地化数值字符串的格式,则应使用用户定义的数值格式来确保获取所需外观。

注意

如果 Calendar 属性设置为 Gregorianformat 指定了日期格式,则提供的 expression 必须为 Gregorian。 如果 Visual Basic Calendar 属性设置为 Hijri,则提供的 表达式 必须为 Hijri

如果日历为公历,则 format 表达式符号的含义不变。 如果日历为回历,则所有日期格式符号(例如,ddddmmmmyyyy)都具有相同的含义,但适用于回历。 格式符号保留为英文;导致文本显示的符号(如 AM 和 PM)会显示与该符号关联的字符串(英语或阿拉伯语)。 当日历为 Hijri 时,某些符号的范围会发生更改。

日期符号

符号 范围
d 1-31(月份中的某一日,不带前导零)
dd 01-31(月份中的某一日,带前导零)
w 1-7(星期几,从星期日 = 1 开始)
ww 1-53(年份中的某一周,不带前导零;第 1 周从 1 月 1 日开始)
m 1-12(年份中的某一月,不带前导零;从 1 月 = 1 开始)
mm 01-12(年份中的某一月,带前导零;从 1 月 = 01 开始)
mmm 显示缩写的月份名称(Hijri 月份名称没有缩写形式)
mmmm 显示完整的月份名称
y 1-366(年份中的某一天)
yy 00-99(年份的最后两位数)
yyyy 100-9999(三位或四位数年份)

时间符号

符号 范围
h 0-23(在 1-12 时附加“AM”或“PM”)(一天中的小时数,不带前导零)
hh 00-23(在 01-12 时附加“AM”或“PM”)(一天中的小时数,带前导零)
n 0-59(小时内的分钟数,不带前导零)
nn 00-59(小时内的分钟数,带前导零)
m 0-59(小时内的分钟数,不带前导零)。 仅在前面带有 hhh
mm 00-59(小时内的分钟数,带前导零)。 仅在前面带有 hhh
s 0-59(分钟内的秒数,不带前导零)
ss 00-59(分钟内的秒数,带前导零)

示例

本示例演示 Format 函数的各种用途以使用命名格式和用户定义格式设置值的格式。 对于日期分隔符 (/)、时间分隔符 (:) 和 AM/PM 文本,系统显示的实际格式化输出取决于运行代码时所基于的区域设置。 在开发环境中显示时间和日期时,将使用代码区域设置的短时间格式和短日期格式。 在通过运行代码显示日期和时间时,将使用系统区域设置的短时间格式和短日期格式,这可能与代码区域设置所采用的格式不同。 对于此示例,假定使用 English/U.S.。 在开发环境中使用当前系统的短时间设置和短日期设置显示 MyTimeMyDate

Dim MyTime, MyDate, MyStr
MyTime = #17:04:23#
MyDate = #January 27, 1993#

' Returns current system time in the system-defined long time format.
MyStr = Format(Time, "Long Time")

' Returns current system date in the system-defined long date format.
MyStr = Format(Date, "Long Date")

MyStr = Format(MyTime, "h:m:s")    ' Returns "17:4:23".
MyStr = Format(MyTime, "hh:mm:ss am/pm")    ' Returns "05:04:23 pm".
MyStr = Format(MyTime, "hh:mm:ss AM/PM")    ' Returns "05:04:23 PM".
MyStr = Format(MyDate, "dddd, mmm d yyyy")    ' Returns "Wednesday, Jan 27 1993".
' If format is not supplied, a string is returned.
MyStr = Format(23)    ' Returns "23".

' User-defined formats.
MyStr = Format(5459.4, "##,##0.00")    ' Returns "5,459.40".
MyStr = Format(334.9, "###0.00")    ' Returns "334.90".
MyStr = Format(5, "0.00%")    ' Returns "500.00%".
MyStr = Format("HELLO", "<")    ' Returns "hello".
MyStr = Format("This is it", ">")    ' Returns "THIS IS IT".

针对不同数值的不同格式

针对数字的用户定义的格式表达式可包含 1 到 4 个部分,它们之间用分号分隔开。 如果格式参数包含某个指定数值格式,则仅允许有一个部分。

如果使用 结果为
仅一个部分 格式表达式适用于所有值。
两个部分 第一个部分适用于正值和零,第二个部分适用于负值。
三个部分 第一个部分适用于正值,第二个部分适用于负值,第三个部分适用于零。
四个部分 第一个部分适用于正值,第二个部分适用于负值,第三个部分适用于零,第四部分适用于 Null 值。
"$#,##0;($#,##0)"

如果包含两个连续的分号,则缺少的部分用正值的格式显示。 例如,以下格式显示采用第一部分中的格式的正值和负值,并且显示"零"(如果值为零)。

"$#,##0;;\Z\e\r\o"

针对不同字符串值的不同格式

针对字符串的格式表达式可包括一个或两个部分(由分号 (;) 分隔)。

在使用以下各项的情况下 结果为
仅一个部分 格式适用于所有字符串数据。
两个部分 第一个部分适用于字符串数据,第二个部分适用于 Null 值和零长度字符串 ("")。

命名的日期/时间格式

下表标识了预定义的日期和时间格式名称。

格式名称 说明
General Date 显示日期和/或时间,例如,1993 年 4 月 3 日 05:34 PM。 如果没有小数部分,则只显示日期,例如,1993 年 4 月 3 日。 如果没有整数部分,则只显示时间,例如,05:34 PM。 日期显示由系统设置确定。
Long Date 根据您系统的长日期格式显示日期。
Medium Date 使用适用于主机应用程序的语言版本的中日期格式显示日期。
Short Date 使用您系统的短日期格式显示日期。
Long Time 使用您系统的长时间格式显示时间;包括小时、分钟、秒。
Medium Time 使用小时和分钟以及 AM/PM 指示符按 12 小时制格式显示时间。
Short Time 使用 24 小时制格式显示时间,例如 17:45。

命名的数值格式

下表标识了预定义的数值格式名称。

格式名称 说明
General Number 显示没有千位分隔符的数字。
Currency 显示带千位分隔符的数字(如果适当);显示小数点右边的两位数。 输出将基于系统区域设置
Fixed 至少显示小数点左边的一位数和小数点右边的两位数。
Standard 显示带千位分隔符的数字,至少显示小数点左边的一位数和小数点右边的两位数。
Percent 显示乘以 100 之后得到的数字,并在右侧附加一个百分号 (%);始终显示小数点右边的两位数。
Scientific 使用标准科学记数法。
是/否 如果数字为 0,则显示 No;否则显示 Yes。
True/False 如果数字为 0,则显示 False;否则显示 True
On/Off 如果数字为 0,则显示 Off;否则显示 On。

用户定义的字符串格式

可以使用以下任意字符为字符串创建格式表达式

字符 说明
@ 字符占位符。 显示字符或空格。 如果字符串在格式字符串中的 at (@) 符号位置有一个字符,则显示该字符;否则,将在该位置显示空格。 占位符从右到左填充,除非格式字符串中有感叹号字符 (!)。
& 字符占位符。 显示字符或不显示任何内容。 如果字符串在显示 & 号的位置有一个字符,则显示该字符;否则,将不在该位置显示任何内容。 占位符从右到左填充,除非格式字符串中有感叹号字符 (!)。
< 强制使用小写形式。 以小写形式显示所有字符。
> 强制使用大写形式。 以大写形式显示所有字符。
! 强制从左至右填充占位符。 默认情况下,将从右至左填充占位符。

用户定义的日期/时间格式

下表标识了可用于创建用户定义的日期/时间格式的字符。

字符 说明
(:) 时间分隔符。 在一些区域设置中,可使用其他字符表示时间分隔符。 在设置时间值格式时,时间分隔符用于分隔小时、分钟和秒。 在格式化输出中用作时间分隔符的实际字符由您的系统设置决定。
(/) 日期分隔符。 在部分区域,也可以使用其他字符表示日期分隔符。 在设置日期值格式时,日期分隔符用于分隔天、月和年。 在格式化输出中用作日期分隔符的实际字符由您的系统设置决定。
c 按该顺序将日期显示为 ddddd,并将时间显示为 ttttt。 如果日期序列号没有小数部分,则仅显示日期信息;如果没有整数部分,则仅显示时间信息。
d 将日期显示为没有前导零的数字, (1-31) 。
dd 将日期显示为前导零 (01-31) 。
ddd 将日期显示为) (Sun-Sat 的缩写。 本地化。
dddd (周日到星期六) ,将日期显示为全名。 本地化。
ddddd 将日期显示为完整日期(包括日、月和年),并根据您系统的短日期格式设置进行格式设置。 默认的短日期格式为 m/d/yy
dddddd 将日期序列号显示为完整日期(包括日、月和年),并根据您系统识别的长日期设置进行格式化。 默认的长日期格式为 mmmm dd, yyyy
w 将一周中的某一天显示为数字(1 到 7 分别表示星期天到星期六)。
ww 将一年中的一周显示为数字 (1-54) 。
m 将月份显示为没有前导零的数字, (1-12) 。 如果 m 紧跟 hhh,则显示分钟而不是显示月。
mm 将月份显示为前导零的数字, (01-12) 。 如果 m 紧跟 hhh,则显示分钟而不是显示月。
mmm 将月份显示为 () 年 1 月到 12 月的缩写。 本地化。
mmmm 将月份显示为 () 年 1 月到 12 月的完整月份名称。 本地化。
q 以数字 (1-4) 显示一年四分之一。
y 将一年中的某一天显示为数字 (1-366) 。
yy 将年份显示为 2 位数字 (00-99) 。
yyyy 将年份显示为 4 位数字 (100-9999) 。
h 将小时显示为不带前导零 (0-23) 的数字。
hh 将小时显示为前导零 (00-23) 的数字。
n 将分钟显示为没有前导零 (0-59) 的数字。
nn 将分钟显示为前导零 (00-59) 的数字。
s 将第二个显示为不带前导零的数字, (0-59) 。
ss 将第二个显示为前导零 (00-59) 的数字。
ttttt 将时间显示为完整时间(包括小时、分钟和秒),并使用由您系统识别的时间格式定义的时间分隔符进行格式设置。 如果选择了前导零选项,并且时间在上午 10:00 或晚上 10:00 之前,将显示前导零。默认时间格式为 h:mm:ss
AM/PM 使用 12 小时制,并为中午之前的任意小时显示大写形式的 AM;为中午与 11:59 P.M 之间的任意小时显示大写形式的 PM。
am/pm 使用 12 小时制,并为中午之前的任意小时显示小写形式的 AM;为中午与 11:59 P.M 之间的任意小时显示小写形式的 PM。
A/P 使用 12 小时制,并为中午之前的任意小时显示大写形式的 A;为中午与 11:59 P.M 之间的任意小时显示大写形式的 P。
a/p 使用 12 小时制,并为中午之前的任意小时显示小写形式的 A;为中午与 11:59 P.M 之间的任意小时显示小写形式的 P。
AMPM 使用 12 小时制,并在中午前的任何小时显示系统定义的 AM 字符串文本 ;显示系统定义的 PM 字符串文本,中午到晚上 11:59 之间的任意小时。AMPM 可以是大写或小写,但显示的字符串大小写与系统设置定义的字符串匹配。 默认格式为 AM/PM。 如果系统设置为 24 小时制,则字符串通常设置为零长度字符串。

用户定义的数字格式

下表标识了可用于创建用户定义的数字格式的字符。

字符 说明
显示不带任何格式的数字。
(0) 数字占位符。 显示一个数字或一个零。 如果表达式在格式字符串中出现 0 的位置有一个数字,则显示该数字;否则,在该位置显示零。如果数字的位数少于格式表达式中的零的位数(小数的两边),则显示前导或尾随零。 如果数字在格式表达式中的小数分隔符右边具有的位数多于小数分隔符右边的零的数目,则将对该数字进行四舍五入(小数位的数目与零的数目相等)。 如果数字在格式表达式中的小数分隔符左边具有的位数多于小数分隔符左边的零的数目,则显示多余的位数而进行修改。
(#) 数字占位符。 显示一个数字或不显示任何内容。 如果表达式在格式字符串中的显示 # 的位置有一个数字,则显示该数字;否则,不在该位置显示任何内容。 此符号的工作方式与 0 数字占位符类似,只不过当数字在格式表达式中具有的数位等于或少于小数分隔符两边的 # 字符的数目时,不显示前导零或尾随零。
(.) 小数点占位符。 在一些区域设置中,将逗号用作小数分隔符。 小数点占位符决定小数分隔符左边和右边显示的数位。 如果格式表达式只在此符号左边包括数字符号,则小于 1 的数字将以小数分隔符开头。 若要显示随小数一起显示的前导零,请将 0 用作小数分隔符左边的第一个数字占位符。 在格式化的输出中用作小数占位符的实际字符取决于您的系统所识别的数字格式。
(%) 百分比占位符。 将表达式乘 100。 百分号 (%) 将插入其在格式字符串中出现的位置。
(,) 千位分隔符。 在部分区域,句点用作千位分隔符。 千位分隔符将在小数分隔符左边具有四个或更多位的数字中分隔千位和百位。 如果格式包含由数字占位符(0#)包围的千位分隔符,则将指定千位分隔符的标准用法。 小数分隔符左侧的两个相邻的千位分隔符或一千个分隔符 (是否指定了小数点) 表示“通过将数字除以 1000 来缩放数字,根据需要舍入”。例如,可以使用格式字符串“##0,”将 1 亿表示为 100。 小于 1 亿的数字将显示为 0。 在紧靠小数分隔符左边的位置之外的任何其他位置的两个相邻的千位分隔符将被简单对待,就像指定千位分隔符的用法一样。 在格式化的输出中用作千位分隔符的实际字符取决于您的系统所识别的数字格式。
(:) 时间分隔符。 在一些区域设置中,可使用其他字符表示时间分隔符。 在设置时间值格式时,时间分隔符用于分隔小时、分钟和秒。 在格式化输出中用作时间分隔符的实际字符由您的系统设置决定。
(/) 日期分隔符。 在部分区域,也可以使用其他字符表示日期分隔符。 在设置日期值格式时,日期分隔符用于分隔天、月和年。 在格式化输出中用作日期分隔符的实际字符由您的系统设置决定。
(E- E+ e- e+) 科学记数法格式。 如果格式表达式在 E-、E+、e- 或 e+ 的右边至少包括一个数字占位符(0#),则数字以科学记数法格式显示,并且 E 或 e 将插入该数字与其指数之间。 右边的数字占位符的数目将决定指数中的位数。 使用 E- 或 e- 可在负指数旁边放置减号。 使用 E+ 或 e+ 可以在负指数旁边放置减号并在正指数旁边放置加号。
- + $ ( ) 显示文本字符。 若要显示所列字符之外的字符,请在该字符前面加反斜杠 (\) 或将其用双引号括起来 (" ")。
(\) 显示格式字符串中的下一个字符。 若要将具有特殊含义的字符显示为文本字符,请在该字符前面加上反斜杠 (\)。 反斜杠本身不会显示。 使用反斜杠与使用双引号将下一个字符括起来的效果相同。 若要显示反斜杠,请使用双反斜杠 (\\)。 不能显示为文本字符的字符示例包括日期格式和时间格式字符 (, c、d、h、m、n、p、q、s、t、w、y、/和 :) 、数字格式字符 (#、0、%E、e、逗号和句点) ,以及字符串格式字符 (@、&、 <、 >和 !) 。
("ABC") 显示双引号 (" ") 中的字符。 若要在代码中包含 format 格式的字符串,必须使用 Chr(34) 将文本括起来(34 为双引号 (") 的字符代码)。

另请参阅

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。