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

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

  • FormatNumber() — возвращает строковое представление числа в соответствии с заданным форматом. Синтаксис функции:
FormatNumber(<Значение>[, NumDigitsAfterDecimal[,
          IncludeLeadingDigit[, UseParensForNegativeNumbers[,
          GroupDigits]]]])

Пример:

Debug.Print FormatNumber(1.45787421, 5) ' 1,45787
Debug.Print FormatNumber(1.45787421, NumDigitsAfterDecimal:=5)
' 1,45787
  • FormatPercent() — возвращает строковое представление числа в виде процентов в соответствии с заданным форматом. Значение умножается на 100 и в конец добавляется символ процента (%). Формат функции:
FormatPercent(<Значение>[, NumDigitsAfterDecimal[,
          IncludeLeadingDigit[, UseParensForNegativeNumbers[,
          GroupDigits]]]])

Пример:

Debug.Print FormatPercent(1.45787421)    ' 145,79%
Debug.Print FormatPercent(1.45787421, 5) ' 145,78742%
  • FormatCurrency() — возвращает строковое представление числа в денежном формате. В конце добавляется символ валюты. Формат функции:
FormatCurrency(<Значение>[, NumDigitsAfterDecimal[,
          IncludeLeadingDigit[, UseParensForNegativeNumbers[,
          GroupDigits]]]])

Пример:

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

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

  • NumDigitsAfterDecimal — задает количество цифр после десятичной точки. По умолчанию параметр имеет значение -1, которое означает, что используются региональные настройки. Пример:
Debug.Print FormatNumber(1.45787421, 2) ' 1,46
Debug.Print FormatNumber(1.45787421, 5) ' 1,45787
  • IncludeLeadingDigit — определяет нужно ли отображать нулевую целую часть числа. Если указана константа vbTrue (или число -1), то нуль отображается, если vbFalse (или число 0) — то нет. По умолчанию параметр имеет значение константы vbUseDefault (-2), которое означает, что будут использоваться региональные настройки. Пример:
Debug.Print FormatNumber(0.45787421, , vbTrue)  ' 0,46
Debug.Print FormatNumber(0.45787421, , vbFalse) ' ,46
  • UseParensForNegativeNumbers — если указана константа vbTrue (или число -1), то отрицательные значение будут отображаться внутри круглых скобок без знака числа, если vbFalse (или число 0) — то нет. По умолчанию параметр имеет значение константы vbUseDefault (-2), которое означает, что будут использоваться региональные настройки. Пример:
Debug.Print FormatNumber(-1.457, , , vbTrue)       ' (1,46)
Debug.Print FormatNumber(-1.457, , , vbFalse)      ' -1,46
Debug.Print FormatNumber(-1.457, , , vbUseDefault) ' -1,46
  • GroupDigits — если указана константа vbTrue (или число -1), то тысячные группы будут разделяться через символ, указанный в региональных настройках (например, через пробел), если vbFalse (или число 0) — то нет. По умолчанию параметр имеет значение константы vbUseDefault (-2), которое означает, что будут использоваться региональные настройки. Пример:
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 указываются следующие значения в виде строки:

  • General Number — отображает число без разделителя тысячных групп:
Debug.Print Format(1458457.5687, "General Number")
' 1458457,5687
  • Fixed — выводит число без разделителя тысячных групп с двумя цифрами после десятичной точки:
Debug.Print Format(1458457.5687, "Fixed") ' 1458457,57
  • Standard — отображает число с разделителями тысячных групп и двумя цифрами после десятичной точки:
Debug.Print Format(1458457.5687, "Standard") ' 1 458 457,57
  • Percent — возвращает строковое представление числа в виде процентов. Значение умножается на 100 и в конец добавляется символ процента (%). Число отображается без разделителя тысячных групп с двумя цифрами после десятичной точки:
Debug.Print Format(1458457.5687, "Percent")
' 145845756,87%
  • Currency — денежный формат. Число отображается с разделителями тысячных групп, двумя цифрами после десятичной точки и символа валюты в зависимости от региональных настроек:
Debug.Print Format(1458457.5687, "Currency")
' 1 458 457,57р.
  • Scientific — формат с плавающей десятичной точкой:
Debug.Print Format(1458457.5687, "Scientific")
' 1,46E+06
  • Yes/No — отображает значение Нет, если число равно 0, и Да — в противном случае:
Debug.Print Format(0, "Yes/No")                ' Нет
Debug.Print Format(1458457.5687, "Yes/No")     ' Да
  • True/False — выводит значение Ложь, если число равно 0, и Истина — в противном случае:
Debug.Print Format(0, "True/False")            ' Ложь
Debug.Print Format(1458457.5687, "True/False") ' Истина
  • On/Off — отображает значение Выкл, если число равно 0, и Вкл — в противном случае:
Debug.Print Format(0, "On/Off")                ' Выкл
Debug.Print Format(1458457.5687, "On/Off")     ' Вкл
  • General Date — выводит дату и/или время в соответствии с региональными настройками:
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
  • Long Date — отображает дату в соответствии с полным форматом:
Debug.Print Format(d, "Long Date")  ' 6 Сентябрь 2012 г.
Debug.Print Format(dt, "Long Date") ' 6 Сентябрь 2012 г.
  • Medium Date — выводит дату в соответствии со средним форматом:
Debug.Print Format(d, "Medium Date")  ' 06-сен-12
Debug.Print Format(dt, "Medium Date") ' 06-сен-12
  • Short Date — отображает дату в соответствии с сокращенным форматом:
Debug.Print Format(d, "Short Date")  ' 06.09.2012
Debug.Print Format(dt, "Short Date") ' 06.09.2012
  • Long Time — выводит часы, минуты и секунды в соответствии с полным форматом:
Debug.Print Format(d, "Long Time")  ' 0:00:00
Debug.Print Format(dt, "Long Time") ' 22:48:12
  • Medium Time — отображает часы и минуты в 12-часовом формате:
Debug.Print Format(d, "Medium Time")  ' 12:00
Debug.Print Format(dt, "Medium Time") ' 10:48
  • Short Time — выводит часы и минуты в 24-часовом формате:
Debug.Print Format(d, "Short Time")  ' 00:00
Debug.Print Format(dt, "Short Time") ' 22:48

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

  • 0 — отображает цифру или нуль, если цифры нет:
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
  • % — значение умножается на 100 и в позицию символа-заполнителя добавляется символ процента (%):
Debug.Print Format(1458457.5687, "##,###,###,###.00%")
' 145 845 756,87%
  • E- и e- — отображение числа в научном формате. Знак порядка отображается только для отрицательных значений:
Debug.Print Format(1458457.5687, "###.##E-00") ' 145,85E04
Debug.Print Format(0.5687, "###.##E-00")       ' 568,7E-03
  • E+ и e+ — отображение числа в научном формате. Знак порядка отображается в любом случае:
Debug.Print Format(1458457.5687, "###.##E+00") ' 145,85E+04
Debug.Print Format(0.5687, "###.##E+00")       ' 568,7E-03
  • yy — год из двух цифр (от "00" до "99");
  • yyyy — год из четырех цифр (например, "2012");
  • m — номер месяца без предваряющего нуля (от "1" до "12"). Если перед спецсимволом m стоит спецсимвол h или hh, то выводятся минуты без предваряющего нуля:
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 (часы и минуты)
  • mm — номер месяца с предваряющим нулем (от "01" до "12"). Если перед спецсимволом mm стоит спецсимвол h или hh, то выводятся минуты с предваряющим нулем:
Debug.Print Format(dt, "mm")    ' 09 (месяц)
Debug.Print Format(dt, "h mm")  ' 22 08 (часы и минуты)
  • mmm — аббревиатура месяца в зависимости от настроек локали (например, "сен" для сентября);
  • mmmm — название месяца в зависимости от настроек локали (например, "Сентябрь");
  • d — номер дня в месяце без предваряющего нуля (от "1" до "31");
  • dd — номер дня в месяце с предваряющим нулем (от "01" до "31");
  • y — номер дня с начала года (от "1" до "366");
  • q — номер квартала (от "1" до "4");
  • ww — номер недели в году (от "1" до "54");
  • w — номер дня недели ("1" — для воскресенья, "7" — для субботы);
  • ddd — аббревиатура дня недели в зависимости от настроек локали (например, "Чт" для четверга);
  • dddd — название дня недели в зависимости от региональных настроек (например, "четверг");
  • h — часы без предваряющего нуля (от "0" до "23");
  • hh — часы с предваряющим нулем (от "00" до "23");
  • n — минуты без предваряющего нуля (от "0" до "59");
  • nn — минуты с предваряющим нулем (от "00" до "59");
  • s — секунды без предваряющего нуля (от "0" до "59");
  • ss — секунды с предваряющим нулем (от "00" до "59");
  • ddddd — отображает дату в соответствии с сокращенным форматом:
Debug.Print Format(dt, "ddddd")    ' 06.09.2012
  • dddddd — отображает дату в соответствии с полным форматом:
Debug.Print Format(dt, "dddddd")    ' 6 Сентябрь 2012 г.
  • ttttt — отображает время:
Debug.Print Format(dt, "ttttt")    ' 22:08:12
  • c — отображает дату и время в соответствии с сокращенным форматом:
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
  • четыре секции — первая секция задает шаблон для положительных значений, вторая секция — для отрицательных значений, третья секция — для нуля, а четвертая секция — для значения Null:
Debug.Print Format(Null, "###.00;-###.0;0;""Null""") ' 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() позволяют вычислить величину амортизации имущества различными способами. Все финансовые функции являются специфическими и не представляют особого интереса для большинства программистов, поэтому мы не будем рассматривать их в этой книге. За подробной информацией по финансовым функциям обращайтесь к документации.

Visual Basic for Applications (VBA)
Самоучитель по VBA

Помощь сайту

Yandex-деньги: 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

Поиск по сайту в Яндексе