본문 바로가기

엑셀

[엑셀VBA] value, value2, text 차이

반응형

 엑셀 VBA에서는 셀이 가지는 값을 가장 많이 활용합니다. 그도 그럴 것이, 엑셀 문서는 통상적으로 데이터와 수식으로 이루어져 있기 때문입니다.

 

1. value

 엑셀에서 값을 가지고 올 때, 통상적으로 셀의 위치 정보만 표시합니다. 자료를 입력하여 출력해보겠습니다.

 

Sub valueType()
    Cells(1, 1) = 100
    Debug.Print Cells(1, 1)
    Debug.Print Cells(1, 1).Value
End Sub

 

 직접 실행창에 출력된 내용을 보면, 둘다 100으로 출력된 것을 확인할 수 있습니다. 이처럼 속성(Property)를 지정하지 않으면, value로 전달합니다.

2. value2

 value2는 value와 다르게 화폐(Currency)와 날짜(Date) 형태를 사용하지 않습니다.

 

Sub value2Type()
    Cells(1, 1) = "2022-03-01"
    Debug.Print Cells(1, 1).Value
    Debug.Print Cells(1, 1).Value2
End Sub

 직접 실행창에 출력된 내용을 보면, value는 "2022-03-01"을 출력하고, value2는 "44621"을 출력합니다. value2는 일반적으로 value, text보다 속도가 빠릅니다.

 3. text

 text는 서식이 적용된 값이 출력합니다. 엑셀에서 보여지는 대로 출력된다고 보시면 됩니다.

 

Sub textType()
    Cells(1, 1).Value = 123.456
    Cells(1, 1).NumberFormatLocal = "0.0"
    Debug.Print Cells(1, 1).Value
    Debug.Print Cells(1, 1).Value2
    Debug.Print Cells(1, 1).Text
    
    Cells(1, 2).Value = "2022-03-01"

    Debug.Print Cells(1, 2).Value
    Debug.Print Cells(1, 2).Value2
    Debug.Print Cells(1, 2).Text     
End Sub

 

 A1에는 123.456의 소수점 첫째자리까지 보이도록 서식을 적용하여, 123.5로 보입니다. B1에는 "2022-03-01"을 입력했으나, 열 너비로 인해 "#######"로 보입니다.

 직접 실행창에 출력된 내용을 보면, A1의 value와 value2는 동일하게 "123.456"으로 출력되고, text만 "123.5"로 다르게 출력됩니다. A2의 경우, value는 "2022-03-01"로, value2는 "44621"로, text는 "######"로 출력되어, 세 가지 경우 모두 다르게 출력되는 것을 확인할 수 있습니다.

 자료를 비교하는 VBA를 만든다면, 자료의 종류에 따라서 적절한 속성(Property)을 선택하여 프로그래밍하시기 바랍니다. 속도 이슈는 아래 링크를 참고하시기 바랍니다.

https://fastexcel.wordpress.com/2011/11/30/text-vs-value-vs-value2-slow-text-and-how-to-avoid-it/

 

TEXT vs VALUE vs VALUE2 – Slow TEXT and how to avoid it

I was intrigued by a recent post pointing out that using .Text to retrieve data from Excel ranges got slower and slower as you iterated through the rows. So I took some time to explore and compare …

fastexcel.wordpress.com

 

반응형