본문 바로가기
Range object

[Range개체] - NumberFormat속성과 NumberFormatLocal속성

2023. 7. 16.

NumberFormat

개체의 형식 코드를 나타내는 Variant 값을 반환하거나 설정합니다 .

 

구문은 다음과 같습니다.

 

expression.NumberFormat

 

도움말의 Remarks(비고)를 보면 다음과 같은 말이 있습니다.

이 속성은 지정된 범위의 모든 셀이 동일한 숫자 서식을 갖지 않으면 Null을 반환합니다.

 

위 문장은 다음 코드를 보면 쉽게 이해가 가실 겁니다.

Sub NumberFormatExample()
    Dim NumberFormat1 As String
    Dim NumberFormat2 As String
    ' 셀 A1, A2, A3에 값을 입력하고 셀 서식을 지정합니다.
    Range("A1").Value = 1000
    Range("A1").NumberFormat = "#,##0.00"
    Range("A2").Value = 2000
    Range("A2").NumberFormat = "#,##0.00"
    Range("A3").Value = 3000
    Range("A3").NumberFormat = "#,##0.00"

    ' Range A1:A3에서 NumberFormat 속성을 얻습니다.
    NumberFormat2 = Range("A1:A3").NumberFormat
    Debug.Print "A1:A3의 NumberFormat: " & NumberFormat2

    ' A3 셀의 셀 서식을 변경합니다.
    Range("A3").NumberFormat = "0.00%"

    ' Range A1:A3에서 변경된 NumberFormat 속성을 얻습니다.
    NumberFormat3 = Range("A1:A3").NumberFormat
    Debug.Print "A1:A3의 변경된 NumberFormat: " & NumberFormat3

End Sub

 

NumberFormat속성은 매크로 기록기를 누른 후 셀 서식을 변경하면 볼 수 있습니다.

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("A1").Select
    Selection.FormulaR1C1 = "1234.567"
    Selection.NumberFormat = "$#,##0.00"
    Range("A2").Select
    Selection.FormulaR1C1 = "=TODAY()"
    Selection.NumberFormat = "mm/dd/yy"
    Range("A3").Select
    Selection.FormulaR1C1 = "=TODAY()"
    Selection.NumberFormat = "dddd"
    Range("A4").Select
    Selection.FormulaR1C1 = "=NOW()"
    Selection.NumberFormat = "h:mm AM/PM"
    Range("A5").Select
    Selection.FormulaR1C1 = "0.285"
    Selection.NumberFormat = "0.0%"
    Range("A6").Select
    Selection.FormulaR1C1 = "4.34"
    Selection.NumberFormat = "# ?/?"
    Application.Left = 743.5
    Application.Top = 46
    Range("A7").Select
    Selection.FormulaR1C1 = "12200000"
    Selection.NumberFormat = "0.00E+00"
    Range("A8").Select
    Selection.FormulaR1C1 = "1234"
    Selection.NumberFormat = "0000000"
    Range("A9").Select
    Selection.FormulaR1C1 = "123456"
    Selection.NumberFormat = "##0° 00' 00''"
End Sub

 

코드를 약간 다듬으면 다음과 같습니다.

Sub Macro()
    
    With Range("A1")
        .FormulaR1C1 = "1234.567"
        .NumberFormat = "$#,##0.00"
    End With
   
    With Range("A2")
        .FormulaR1C1 = "=TODAY()"
        .NumberFormat = "mm/dd/yy"
    End With
    
    With Range("A3")
        .FormulaR1C1 = "=TODAY()"
        .NumberFormat = "dddd"
    End With

    With Range("A4")
        .FormulaR1C1 = "=NOW()"
        .NumberFormat = "h:mm AM/PM"
    End With

    With Range("A5")
        .FormulaR1C1 = "0.285"
        .NumberFormat = "0.0%"
    End With
   
    With Range("A6")
        .FormulaR1C1 = "4.34"
        .NumberFormat = "# ?/?"
    End With
   
    With Range("A7")
        .FormulaR1C1 = "12200000"
        .NumberFormat = "0.00E+00"
    End With

    With Range("A8")
        .FormulaR1C1 = "1234"
        .NumberFormat = "0000000"
    End With

    With Range("A9")
        .FormulaR1C1 = "123456"
        .NumberFormat = "##0° 00' 00''"
    End With
End Sub

 

이해는 좀 어렵지만 간결하게 하려면 다음과 같은 코드도 있습니다.

Sub SimpleMacro()
    ' 변수 선언
    Dim formats As Variant
    Dim formulas As Variant

    ' 초기화
    formulas = Array("1234.567", "=TODAY()", "=TODAY()", "=NOW()", "0.285", "4.34", "12200000", "1234", "123456")
    formats = Array("$#,##0.00", "mm/dd/yy", "dddd", "h:mm AM/PM", "0.0%", "# ?/?", "0.00E+00", "0000000", "##0° 00' 00''")

    ' 범위 반복 처리
    Dim i As Integer
    For i = LBound(formulas) To UBound(formulas)
        ' 현재 범위 설정
        With Range("A" & i + 1)
            ' 수식 설정
            .FormulaR1C1 = formulas(i)
            ' 숫자 형식 설정
            .NumberFormat = formats(i)
        End With
    Next i
End Sub

NumberFormatLocal

개체의 형식 코드를 사용자 언어의 문자열로 나타내는 Variant 값을 반환하거나 설정합니다.

 

구문은 다음과 같습니다.

 

expression.NumberFormatLocal

 

NumberFormat과의 차이점은 NumberFormat은 미국 형식이지만 NumberformatLocal은 지역 형식을 따라간다는 것입니다.

 

표시형식을 일반으로 바꾸려고 할 때 위 그림에서 아래와 같은 코드를 사용하면 원하는 결과가 나오지 않습니다.

Sub ChangeNumberFormat()

    Range("A1:A5").NumberFormat = "G/표준"

End Sub

이유는 미국 형식이기 때문에 NumberFormat을 "G/표준"이 아닌 "General"을 사용해야 합니다.

Sub ChangeNumberFormat()

    Range("A1:A5").NumberFormat = "General"

End Sub

"G/표준"을 사용하려면 NumberFormat이 아닌 NumberFormatLocal을 사용해야 합니다.

Sub ChangeNumberFormat()

    Range("A1:A5").NumberFormatLocal = "G/표준"

End Sub

실험을 해보니 NumberFormatLocal속성은 오피스가 설치된 버전과는 상관이 없는것 같습니다.

 

지역 형식에 따라 변경됩니다.

영문판 엑셀을 사용중인데 지역 형식을 한국으로 하니 "G/표준" 사용이 가능했습니다.

 

지역 형식이 미국일때 NumberFormatLocal을 "G/표준"으로 하면 아래와 같이 됩니다.

 

그 외에도 아래그림에서 보듯이 색상이나 통화기호 같은게 있는데요.이런 차이점을 잘 알고 계시면 NumberFormat속성과 NumberFormatLocal속성을 혼동하지 않고 잘 사용하실 수 있을겁니다.