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속성을 혼동하지 않고 잘 사용하실 수 있을겁니다.
'Range object' 카테고리의 다른 글
[Range 개체] AutoFilter Method - 자동필터 (0) | 2023.07.19 |
---|---|
[Range 개체] AutoFill메서드 (0) | 2023.07.17 |
[Range 개체] 셀 병합과 관련된 속성과 메서드 (0) | 2023.07.15 |
[Range 개체] AdvancedFilter메서드 - 고급필터 사용하기 (0) | 2023.07.11 |
[Range 개체] Areas속성 (0) | 2023.07.10 |