본문 바로가기
VBA 라이브러리

Format 함수

2023. 8. 22.

Format 함수

주어진 형식 표현에 따라 서식이 지정된 식을 포함하는 Variant (문자열)을 반환합니다.

Syntax

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

Expression : 필수입니다.유효한 표현식입니다.
Format : 선택 사항입니다.유효한 명명된 또는 사용자 정의 형식 표현입니다.
FirstDayOfWeek : 선택 사항입니다.요일을 지정하는 상수입니다.
firstWeekOfYear : 선택 사항입니다.연도의 첫 번째 주를 지정하는 상수입니다.

firstdayofweek

firstdayofweek 인수는 다음과 같은 설정을 가지고 있습니다.

NLS : National Language Support의 약자로, 국가별 언어 및 문화 관련 설정을 의미합니다.

이는 시스템의 지역 설정에 따라 날짜 및 시간 형식이 자동으로 변경되는 것을 의미합니다. 예를 들어, 미국에서는 "MM/dd/yyyy" 형식으로 날짜를 표시하지만, 영국에서는 "dd/MM/yyyy" 형식으로 표시됩니다.

NLS가 궁금한 분은 아래 링크를 참고하세요.

National Language Support - Win32 apps

National Language Support

learn.microsoft.com

firstweekofyear

firstweekofyear 인수는 다음과 같은 설정을 가지고 있습니다.

참고

Format은 형식을 257자로 자릅니다.

형식을 지정하지 않고 숫자의 서식을 지정하려고 하면 Format은 국제적으로 인식되지만 Str 함수와 유사한 기능을 제공합니다. 그러나 Format을 사용하여 문자열로 서식을 지정한 양수에는 값의 부호를 위해 예약된 선행 공백이 포함되지 않으며, Str을 사용하여 변환된 양수에는 선행 공백이 유지됩니다.

지역화되지 않은 숫자 문자열의 서식을 지정하는 경우 원하는 모양을 얻으려면 사용자 정의 숫자 서식을 사용해야 합니다.

메모

Calendar 속성 설정이 Gregorian(그레고리력)이고 format 함수에서 날짜 형식을 지정하는 경우에는 제공되는 expression도 Gregorian(그레고리력)이어야 합니다. Visual Basic Calendar 속성 설정이 Hijri(회교력)이면 제공되는 expression도 Hijri(회교력)이어야 합니다.

Calendar 속성 설정이 Gregorian(그레고리력)이면 format 식 기호의 의미가 달라지지 않습니다. Calendar 속성 설정이 Hijri(회교력)이면 모든 날짜 형식 기호(예:dddd, mmmm, yyyy)가 의미는 같지만 Hijri(회교력)에 적용됩니다. 형식 기호는 영어 그대로 남습니다. AM과 PM처럼 텍스트로 표시되는 기호는 그 기호에 조합된 문자열(영어 또는 아라비아어)로 나타납니다. 특정 범위의 기호는 Calendar 속성 설정이 Hijri(회교력)일 때 다른 기호로 바뀝니다.
Date Symbols

예제 코드

Sub TestFormatSymbols()
    Dim currentDate As Date
    currentDate = Date

    Dim formattedDate As String
    formattedDate = Format(currentDate, "d")       ' 일(day)을 1자리로 표시
    Dim formattedDate2 As String
    formattedDate2 = Format(currentDate, "dd")     ' 일(day)을 2자리로 표시

    Dim formattedWeekday As String
    formattedWeekday = Format(currentDate, "w")    ' 요일(weekday)을 숫자로 표시 (0: 일요일, 1: 월요일, ..., 6: 토요일)
    Dim formattedWeekday2 As String
    formattedWeekday2 = Format(currentDate, "ww")  ' 연중 주(week)를 2자리로 표시

    Dim formattedMonth As String
    formattedMonth = Format(currentDate, "m")      ' 월(month)을 1자리로 표시
    Dim formattedMonth2 As String
    formattedMonth2 = Format(currentDate, "mm")    ' 월(month)을 2자리로 표시
    Dim formattedMonth3 As String
    formattedMonth3 = Format(currentDate, "mmm")   ' 월(month)을 약어로 표시
    Dim formattedMonth4 As String
    formattedMonth4 = Format(currentDate, "mmmm")  ' 월(month)을 전체 이름으로 표시

    Dim formattedYear As String
    formattedYear = Format(currentDate, "y")       ' 연도(year)를 1자리로 표시
    Dim formattedYear2 As String
    formattedYear2 = Format(currentDate, "yy")     ' 연도(year)를 2자리로 표시
    Dim formattedYear4 As String
    formattedYear4 = Format(currentDate, "yyyy")   ' 연도(year)를 4자리로 표시

    Debug.Print "일 (1자리 - d): " & formattedDate
    Debug.Print "일 (2자리 - dd): " & formattedDate2
    Debug.Print "요일 (w): " & formattedWeekday
    Debug.Print "연중 주 (2자리 - ww): " & formattedWeekday2
    Debug.Print "월 (1자리 - m): " & formattedMonth
    Debug.Print "월 (2자리 - mm): " & formattedMonth2
    Debug.Print "월 (약어 - mmm): " & formattedMonth3
    Debug.Print "월 (전체 이름 - mmmm): " & formattedMonth4
    Debug.Print "연도 (1자리 - y): " & formattedYear
    Debug.Print "연도 (2자리 - yy): " & formattedYear2
    Debug.Print "연도 (4자리 - yyyy): " & formattedYear4
End Sub

' Output
' 일 (1자리 - d): 22
' 일 (2자리 - dd): 22
' 요일 (w): 3
' 연중 주 (2자리 - ww): 34
' 월 (1자리 - m): 8
' 월 (2자리 - mm): 08
' 월 (약어 - mmm): Aug
' 월 (전체 이름 - mmmm): August
' 연도 (1자리 - y): 234
' 연도 (2자리 - yy): 23
' 연도 (4자리 - yyyy): 2023

Time symbols

예제 코드

Sub TestFormatTimeSymbols()
    ' 현재 시간을 currentTime 변수에 저장
    Dim currentTime As Date
    currentTime = Now

    ' 12시간 형식 시간 포맷
    Dim formattedHour1 As String
    formattedHour1 = Format(currentTime, "h")
    Dim formattedHour2 As String
    formattedHour2 = Format(currentTime, "hh")

    ' 분 포맷
    Dim formattedMinute1 As String
    formattedMinute1 = Format(currentTime, "n")
    Dim formattedMinute2 As String
    formattedMinute2 = Format(currentTime, "nn")

    ' 초 포맷
    Dim formattedSecond1 As String
    formattedSecond1 = Format(currentTime, "s")
    Dim formattedSecond2 As String
    formattedSecond2 = Format(currentTime, "ss")

    ' 시간 포맷 (예: 1시 2분, 1시 02분)
    Dim formattedTime1 As String
    formattedTime1 = Format(currentTime, "h:m")
    Dim formattedTime2 As String
    formattedTime2 = Format(currentTime, "h:mm")

    ' 결과 출력
    Debug.Print "시 (1자리 - h): " & formattedHour1
    Debug.Print "시 (2자리 - hh): " & formattedHour2
    Debug.Print "분 (1자리 - n): " & formattedMinute1
    Debug.Print "분 (2자리 - nn): " & formattedMinute2
    Debug.Print "초 (1자리 - s): " & formattedSecond1
    Debug.Print "초 (2자리 - ss): " & formattedSecond2
    Debug.Print "시간표시 (1자리- h:m): " & formattedTime1
    Debug.Print "시간표시 (2자리- h:mm): " & formattedTime2
End Sub

' Output
' 시 (1자리 - h): 15
' 시 (2자리 - hh): 15
' 분 (1자리 - n): 18
' 분 (2자리 - nn): 18
' 초 (1자리 - s): 32
' 초 (2자리 - ss): 32
' 시간표시 (1자리- h:m): 15:18
' 시간표시 (2자리- h:mm): 15:18

Example

아래 예제는 Format 함수를 사용하여 명명된 형식과 사용자 정의 형식을 모두 사용하여 값을 서식화하는 다양한 예제를 보여줍니다. 날짜 구분 기호 (/), 시간 구분 기호 (:), AM/PM 리터럴의 경우 코드가 실행되는 로케일 설정에 따라 실제 서식이 적용되는 출력이 달라집니다. 시간과 날짜가 개발 환경에서 표시될 때 코드 로케일의 짧은 시간 형식과 짧은 날짜 형식이 사용됩니다. 실행 코드에서 표시될 때는 시스템 로케일의 짧은 시간 형식과 짧은 날짜 형식이 사용되며, 이는 코드 로케일과 다를 수 있습니다. 이 예제에서는 영어/미국 로케일이 가정되었습니다. MyTime과 MyDate는 현재 시스템의 짧은 시간 설정과 짧은 날짜 설정을 사용하여 개발 환경에서 표시됩니다.

Sub TestFormatFunction()
    Dim MyTime, MyDate, MyStr
    MyTime = #5:04:23 PM#
    MyDate = #1/27/1993#

    ' Returns current system time in the system-defined long time format.
    MyStr = Format(Time, "Long Time")
    Debug.Print "Current System Time (Long Time): " & MyStr

    ' Returns current system date in the system-defined long date format.
    MyStr = Format(Date, "Long Date")
    Debug.Print "Current System Date (Long Date): " & MyStr

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

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

' Output
' Current System Time (Long Time): 12:56:06 PM
' Current System Date (Long Date): Tuesday, August 22, 2023
' Formatted MyTime (h:m:s): 17:4:23
' Formatted MyTime (hh:mm:ss am/pm): 05:04:23 pm
' Formatted MyTime (hh:mm:ss AM/PM): 05:04:23 PM
' Formatted MyDate (dddd, mmm d yyyy): Wednesday, Jan 27 1993
' Formatted 23: 23
' Formatted 5459.4 (##,##0.00): 5,459.40
' Formatted 334.9 (###0.00): 334.90
' Formatted 5 (0.00%): 500.00%
' Formatted 'HELLO' (<): hello
' Formatted 'This is it' (>): THIS IS IT

숫자 값에 따른 다양한 서식

숫자에 대한 사용자 정의 서식 표현식은 세미콜론으로 구분된 1~4개의 섹션을 가질 수 있습니다. 형식 인수에 명명된 숫자 형식 중 하나가 포함된 경우 하나의 섹션만 허용됩니다.

"$#,##0;($#,##0)"

세미콜론 사이에 아무것도 포함하지 않은 경우 누락된 섹션은 양수 값의 형식을 사용하여 인쇄됩니다. 예를 들어 다음 형식은 첫 번째 섹션의 형식을 사용하여 양수 및 음수 값을 표시하고 값이 0인 경우 "0"을 표시합니다.

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

다양한 문자열 값에 대한 다양한 형식

문자열의 형식 표현식에는 세미콜론(;)으로 구분된 하나의 섹션 또는 두 개의 섹션이 있을 수 있습니다.

명명된 날짜/시간 형식

다음 표에는 미리 정의된 날짜 및 시간 형식 이름이 나와 있습니다.

예제 코드

Sub TestFormatDateAndTimeFormats()
    Dim currentDate As Date
    currentDate = Now

    Dim formattedGeneralDate As String
    formattedGeneralDate = Format(currentDate, "General Date") ' 일반 날짜 형식
    Dim formattedLongDate As String
    formattedLongDate = Format(currentDate, "Long Date") ' 긴 날짜 형식
    Dim formattedMediumDate As String
    formattedMediumDate = Format(currentDate, "Medium Date") ' 중간 날짜 형식
    Dim formattedShortDate As String
    formattedShortDate = Format(currentDate, "Short Date") ' 짧은 날짜 형식

    Dim formattedLongTime As String
    formattedLongTime = Format(currentDate, "Long Time") ' 긴 시간 형식
    Dim formattedMediumTime As String
    formattedMediumTime = Format(currentDate, "Medium Time") ' 중간 시간 형식
    Dim formattedShortTime As String
    formattedShortTime = Format(currentDate, "Short Time") ' 짧은 시간 형식

    Debug.Print "일반 날짜 형식: " & formattedGeneralDate
    Debug.Print "긴 날짜 형식: " & formattedLongDate
    Debug.Print "중간 날짜 형식: " & formattedMediumDate
    Debug.Print "짧은 날짜 형식: " & formattedShortDate
    Debug.Print "긴 시간 형식: " & formattedLongTime
    Debug.Print "중간 시간 형식: " & formattedMediumTime
    Debug.Print "짧은 시간 형식: " & formattedShortTime
End Sub

' Output
' 일반 날짜 형식: 8/22/2023 3:22:40 PM
' 긴 날짜 형식: Tuesday, August 22, 2023
' 중간 날짜 형식: 22-Aug-23
' 짧은 날짜 형식: 8/22/2023
' 긴 시간 형식: 3:22:40 PM
' 중간 시간 형식: 03:22 PM
' 짧은 시간 형식: 15:22

명명된 숫자 형식

다음 표에는 미리 정의된 숫자 형식 이름이 나와 있습니다.

예제 코드

Sub TestFormatNumberAndBooleanFormats()
    Dim numberValue As Double
    numberValue = 123.6789

    Dim formattedGeneralNumber As String
    formattedGeneralNumber = Format(numberValue, "General Number") ' 일반 숫자 형식
    Dim formattedCurrency As String
    formattedCurrency = Format(numberValue, "Currency") ' 통화 형식
    Dim formattedFixed As String
    formattedFixed = Format(numberValue, "Fixed") ' 고정 소수점 형식
    Dim formattedStandard As String
    formattedStandard = Format(numberValue, "Standard") ' 표준 형식
    Dim formattedPercent As String
    formattedPercent = Format(numberValue / 1000, "0.00%") ' 백분율 형식
    Dim formattedScientific As String
    formattedScientific = Format(numberValue, "Scientific") ' 과학적 표기 형식

    Dim booleanValue As Boolean
    booleanValue = True

    Dim formattedYesNo As String
    formattedYesNo = Format(booleanValue, "Yes/No") ' 예/아니오 형식
    Dim formattedTrueFalse As String
    formattedTrueFalse = Format(booleanValue, "True/False") ' 참/거짓 형식
    Dim formattedOnOff As String
    formattedOnOff = Format(booleanValue, "On/Off") ' 켜짐/꺼짐 형식

    Debug.Print "일반 숫자 형식: " & formattedGeneralNumber
    Debug.Print "통화 형식: " & formattedCurrency
    Debug.Print "고정 소수점 형식: " & formattedFixed
    Debug.Print "표준 형식: " & formattedStandard
    Debug.Print "백분율 형식: " & formattedPercent
    Debug.Print "과학적 표기 형식: " & formattedScientific
    Debug.Print "예/아니오 형식: " & formattedYesNo
    Debug.Print "참/거짓 형식: " & formattedTrueFalse
    Debug.Print "켜짐/꺼짐 형식: " & formattedOnOff
End Sub

' Output
'일반 숫자 형식: 123.6789
'통화 형식: $123.68
'고정 소수점 형식: 123.68
'표준 형식: 123.68
'백분율 형식: 12.37%
'과학적 표기 형식: 1.24E+02
'예/아니오 형식: Yes
'참/거짓 형식: True
'켜짐/꺼짐 형식: On

사용자 정의 문자열 형식

문자열에 대한 형식 표현식을 생성하려면 다음 문자 중 하나를 사용하십시오 .

사용자 정의 날짜/시간 형식

다음 표에는 사용자 정의 날짜/시간 형식을 만드는 데 사용할 수 있는 문자가 나와 있습니다.

사용자 정의 숫자 형식

다음 표에는 사용자 정의 숫자 형식을 만드는 데 사용할 수 있는 문자가 나와 있습니다.

도움말 출처

Format function (Visual Basic for Applications)

Office VBA reference topic

learn.microsoft.com

'VBA 라이브러리' 카테고리의 다른 글

FormatDateTime 함수  (0) 2023.08.23
FormatCurrency 함수  (0) 2023.08.22
GetObject 함수  (0) 2023.08.06
CreateObject 함수  (0) 2023.08.06
String 함수  (0) 2023.07.22