배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   Value, Text, Ensemble
제목:   Value와 Text의 Ensemble
     
 

새 페이지 2

  STEP> 살펴보기


다 아시다시피 문자와 달리 숫자나 날짜는 그 내용이 셀의 너비를 넘게 되면 #으로 표시됩니다. 그러나 Value속성은 셀에 표시되는 내용과 관계없이 실제 저장된 값을 돌려주게 됩니다.  

그러면 #으로 도배를 하든, 숫자마다 컴마(,)가 들어가든 그저 셀에 표시된대로 가져오려면 어떻게 할까요? 정답은 Text속성입니다. Text는 지정된 서식으로 표시된 내용 그대로를 가져 옵니다. 

Text속성은 셀에 표시된 내용대로 되돌려 줍니다. 가령 D13셀에 12345가 입력되어 있고 열의 너비가 좁아 ########으로 표시된다면 Range("D13").Value 12345를 돌려주지만 Range("D13").Text 는 화면에 표시된 대로 ########을 돌려 줍니다

Text의 이러한 성질을 이용하여 셀의 너비를 조정해주는 데 응용해보면 어떨까요? 보통 Autofit메소드는 열 내에서 가장 긴 내용을 기준으로 열의 너비를 조정해줍니다. 그러다 보니 종종 불편한 점이 생깁니다.  

현재 셀을 기준으로 너무 남지도 않게, 너무 모자라지도 않게 열의 너비를 조정하는 것입니다. 다음은 현재 셀의 내용을 기준으로 #이 안보일 정도로만 열의 너비를 조정하는 프로시져입니다.

Sub FlexibleWidth()
    Dim x       As String 

// 화면의 갱신을 막아둔다
    Application.ScreenUpdating = False
    With ActiveCell

// 현재 셀 내용의 종류를 VarType()함수로 판단한다.
// 이때 Value가 사용되는 결정적 장면을 볼 수 있다
        Select Case VarType(.Value)

// 데이터의 종류가 숫자와 날짜라면 뭔가 처리를 한다.
        Case vbInteger To vbDate

// Text속성을 문자열 변수 x에 저장한다.
            x = .Text

// 문자열 변수에 #이 있는지 알아본다.
            If InStr(x, "#") > 0 Then

// #의 갯수만큼 컬럼의 너비를 줄여 나간다.
                While InStr(x, "#") > 0
                    .ColumnWidth = .ColumnWidth + 0.1
                    x = .Text
                Wend

// #이 없는 경우 컬럼의 너비를 줄여 나간다.
            Else
                Do
                    .ColumnWidth = .ColumnWidth - 0.1
                    x = .Text

// #이 보일때 까지 줄여 나간다.
                Loop Until InStr(x, "#") > 0

// #이 보이지 않도록 다시 늘린다.
// 셀의 내용이 보일만큼 이제 적절한 너비로 조정된다.
                .ColumnWidth = .ColumnWidth + 0.1
            End If
        End Select
    End With

// 막아둔 화면갱신을 풀어준다.
    Application.ScreenUpdating = True

End Sub

위에서 VarType()함수는 매개변수의 데이터 종류를 알아내고 숫자형이나 날짜형인 경우 현재 셀의 내용 중 #이 존재하는지를 판단합니다. #이 있다면 #이 안보일 때 까지 열의 너비를 0.1씩 늘려 나갑니다

그러나 #이 안 보인다면 당연히 만족스러울 것입니다. 그러나 우리의 목표는 #이 안보일 정도로만 열의 너비를 조정하는 것입니다. 즉 열의 너비가 충분하여 너무 넉넉하게 남아도 안되고 너무 좁아서 #이 보여서도 안됩니다. #이 없는 경우 #이 생길 때 까지 열의 너비를 0.1씩 좁혀갑니다

이 프로시져를 워크시트의 SelectionChange이벤트에 넣어두면 셀 포인터를 이동할 때 마다 적절하게 열의 너비를 조정해줄 것입니다.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call FlexibleWidth
End Sub