Форматирование чисел

Для форматирования чисел предназначены следующие функции:

FormatNumber(<Значение>[, NumDigitsAfterDecimal[,
          IncludeLeadingDigit[, UseParensForNegativeNumbers[,
          GroupDigits]]]])

Пример:

Debug.Print FormatNumber(1.45787421, 5) ' 1,45787
Debug.Print FormatNumber(1.45787421, NumDigitsAfterDecimal:=5)
' 1,45787
FormatPercent(<Значение>[, NumDigitsAfterDecimal[,
          IncludeLeadingDigit[, UseParensForNegativeNumbers[,
          GroupDigits]]]])

Пример:

Debug.Print FormatPercent(1.45787421)    ' 145,79%
Debug.Print FormatPercent(1.45787421, 5) ' 145,78742%
FormatCurrency(<Значение>[, NumDigitsAfterDecimal[,
          IncludeLeadingDigit[, UseParensForNegativeNumbers[,
          GroupDigits]]]])

Пример:

Debug.Print FormatCurrency(1.45787421)    ' 1,46р.
Debug.Print FormatCurrency(1.45787421, 2) ' 1,46р.

Параметры в функциях FormatNumber(), FormatPercent() и FormatCurrency() имеют следующий смысл:

Debug.Print FormatNumber(1.45787421, 2) ' 1,46
Debug.Print FormatNumber(1.45787421, 5) ' 1,45787
Debug.Print FormatNumber(0.45787421, , vbTrue)  ' 0,46
Debug.Print FormatNumber(0.45787421, , vbFalse) ' ,46
Debug.Print FormatNumber(-1.457, , , vbTrue)       ' (1,46)
Debug.Print FormatNumber(-1.457, , , vbFalse)      ' -1,46
Debug.Print FormatNumber(-1.457, , , vbUseDefault) ' -1,46
Debug.Print FormatNumber(1458457, , , , vbTrue)  ' 1 458 457,00
Debug.Print FormatNumber(1458457, , , , vbFalse) ' 1458457,00

Функция Format()

Форматировать числа позволяет также функция Format(). Помимо чисел можно отформатировать и вывод значения даты и времени, а также строк. Формат функции:

Format(<Значение>[, Format[, FirstDayOfWeek[, FirstWeekOfYear]]])

Необязательный параметр Format задает выражение формата, параметр FirstDayOfWeek — первый день недели (константы vbMonday, vbTuesday, vbWednesday, vbThursday, vbFriday, vbSaturday, vbSunday (значение по умолчанию) и vbUseSystemDayOfWeek), а параметр FirstWeekOfYear — первую неделю года (константы vbFirstJan1 (значение по умолчанию), vbFirstFullWeek, vbFirstFourDays и vbUseSystem).

В параметре Format указываются следующие значения в виде строки:

Debug.Print Format(1458457.5687, "General Number")
' 1458457,5687
Debug.Print Format(1458457.5687, "Fixed") ' 1458457,57
Debug.Print Format(1458457.5687, "Standard") ' 1 458 457,57
Debug.Print Format(1458457.5687, "Percent")
' 145845756,87%
Debug.Print Format(1458457.5687, "Currency")
' 1 458 457,57р.
Debug.Print Format(1458457.5687, "Scientific")
' 1,46E+06
Debug.Print Format(0, "Yes/No")                ' Нет
Debug.Print Format(1458457.5687, "Yes/No")     ' Да
Debug.Print Format(0, "True/False")            ' Ложь
Debug.Print Format(1458457.5687, "True/False") ' Истина
Debug.Print Format(0, "On/Off")                ' Выкл
Debug.Print Format(1458457.5687, "On/Off")     ' Вкл
Dim d As Date, dt As Date
d = #9/6/2012#
dt = #9/6/2012 10:48:12 PM#
Debug.Print Format(d, "General Date")  ' 06.09.2012
Debug.Print Format(dt, "General Date") ' 06.09.2012 22:48:12
Debug.Print Format(d, "Long Date")  ' 6 Сентябрь 2012 г.
Debug.Print Format(dt, "Long Date") ' 6 Сентябрь 2012 г.
Debug.Print Format(d, "Medium Date")  ' 06-сен-12
Debug.Print Format(dt, "Medium Date") ' 06-сен-12
Debug.Print Format(d, "Short Date")  ' 06.09.2012
Debug.Print Format(dt, "Short Date") ' 06.09.2012
Debug.Print Format(d, "Long Time")  ' 0:00:00
Debug.Print Format(dt, "Long Time") ' 22:48:12
Debug.Print Format(d, "Medium Time")  ' 12:00
Debug.Print Format(dt, "Medium Time") ' 10:48
Debug.Print Format(d, "Short Time")  ' 00:00
Debug.Print Format(dt, "Short Time") ' 22:48

В параметре Format можно также указать шаблон с пользовательским форматом. В этом случае в строке используются следующие специальные символы:

Debug.Print Format(1458457.5687, "00000000") ' 01458458
Debug.Print Format(1458457.5687, "########") ' 1458458
Debug.Print Format(1458457.5687, "########.00") ' 1458457,57
Debug.Print Format(1458457.5687, "##,###,###.00")
' 1 458 457,57
Debug.Print Format(1458457.5687, "##,###,###,###.00%")
' 145 845 756,87%
Debug.Print Format(1458457.5687, "###.##E-00") ' 145,85E04
Debug.Print Format(0.5687, "###.##E-00")       ' 568,7E-03
Debug.Print Format(1458457.5687, "###.##E+00") ' 145,85E+04
Debug.Print Format(0.5687, "###.##E+00")       ' 568,7E-03
Dim d As Date, dt As Date
d = #9/6/2012#
dt = #9/6/2012 10:08:12 PM#
Debug.Print Format(dt, "m")    ' 9 (месяц)
Debug.Print Format(dt, "h m")  ' 22 8 (часы и минуты)
Debug.Print Format(dt, "mm")    ' 09 (месяц)
Debug.Print Format(dt, "h mm")  ' 22 08 (часы и минуты)
Debug.Print Format(dt, "ddddd")    ' 06.09.2012
Debug.Print Format(dt, "dddddd")    ' 6 Сентябрь 2012 г.
Debug.Print Format(dt, "ttttt")    ' 22:08:12
Debug.Print Format(dt, "c")    ' 06.09.2012 22:08:12
Debug.Print Format(dt, "dd/mm/yyyy")    ' 06.09.2012
Debug.Print Format(dt, "hh:mm:ss")    ' 22:08:12
Debug.Print Format(dt, "hh:nn:ss")    ' 22:08:12
Debug.Print "'" & Format("Строка", "@@@@@@@@@@@@") & "'"
' '      Строка'
Debug.Print Format("Строка", "@ @ @ @ @ @")    ' С т р о к а
Debug.Print "'" & Format("Строка", "!@@@@@@@@@@@@") & "'"
' 'Строка      '
Debug.Print "'" & Format("Строка", "&&&&&&&&&&&&") & "'"
' 'Строка'
Debug.Print Format("Строка", "<")    ' строка
Debug.Print Format("Строка", ">")    ' СТРОКА

Шаблон с пользовательским форматом может содержать не только специальные символы, но и обычные символы. Если необходимо отобразить специальный символ как обычный, то перед символом следует указать защитный слеш (\) или заключить текстовый фрагмент в кавычки. Так как кавычки обрамляют строку, нужно заключить фрагмент в удвоенные кавычки, а не в одинарные. Пример:

Dim dt As Date
dt = #9/6/2012 10:08:12 PM#
Debug.Print Format(dt, "\h\h\:\m\m\:\s\s = hh:mm:ss")
' hh:mm:ss = 22:08:12
Debug.Print Format(dt, """hh:mm:ss"" = hh:mm:ss")
' hh:mm:ss = 22:08:12

Если нужно вывести защитный слеш (\), то его следует удвоить:

Debug.Print Format(dt, "\\hh:mm:ss\\") ' \22:08:12\

При форматировании чисел шаблон может содержать от одной до четырех секций, разделяемых с помощью точки с запятой (;):

Debug.Print Format(145.5687, "###.00;-###.0")    ' 145,57
Debug.Print Format(-145.5687, "###.00;-###.0")   ' -145,6
Debug.Print Format(0, "###.00;-###.0")           ' ,00
Debug.Print Format(145.5687, "###.00;-###.0;0")  ' 145,57
Debug.Print Format(-145.5687, "###.00;-###.0;0") ' -145,6
Debug.Print Format(0, "###.00;-###.0;0")         ' 0
Debug.Print Format(Null, "###.00;-###.0;0;""Null""") ' Null

При форматировании строки шаблон может содержать от одной до двух секций, разделяемых с помощью точки с запятой (;):

Debug.Print Format("Строка", "@@@@@@@@@@@@;""Null""")
'       Строка
Debug.Print Format(Null, "@@@@@@@@@@@@;""Null""")     ' Null
Debug.Print Format("", "@@@@@@@@@@@@;""Null""")       ' Null

Функция Format() возвращает значение типа Variant (String). Чтобы получить значение типа String следует использовать функцию Format$(), имеющую тот же самый формат. Пример:

Debug.Print Format$("СТРОКА", "<")    ' строка

Финансовые функции

Язык VBA содержит много встроенных функций, предназначенных для выполнения финансовых операций. Например, функции DDB(), SLN() и SYD() позволяют вычислить величину амортизации имущества различными способами. Все финансовые функции являются специфическими и не представляют особого интереса для большинства программистов, поэтому мы не будем рассматривать их в этой книге. За подробной информацией по финансовым функциям обращайтесь к документации.

Предыдущая статья Все статьи Следующая статья