나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 조삿갓 (choga21)

추천:  2
파일:     TextLen.xlsm (17.3KB) 조회:  2416
제목:   [RE] 셀에 표시된 내용을 기준으로 문자열의 길이 구하기
     
  ==============[aortla님 글에 대한 답변입니다]==============

요 앞에 질문과 답변에서처럼
엑셀 워크시트의 셀에 표시된 내용은 실제 셀에 기억되어 있는 값과
다를 수 있습니다.
그런데 LEN 함수를 이용하여 특정 셀에 있는 문자열의 길이
즉, 문자의 개수를 구하게 되면
셀에 표시된 내용과 관계 없이 실제 기억된 값을 기준으로 계산해 버리기 때문에
이상한 결과가 나올 수 있습니다.

예를들어, A1 셀 서식을 회계 서식으로 지정하고 10000을 입력하면
화면상에는 10,000으로 표시됩니다.(겉보기 글자 수 6글자)
그런데, =LEN(A1)으로 문자열의 개수를 물어보면
6이 아닌 5를 반환해 줍니다.
왜냐하면, 실제 셀에 기억되어 있는 값은
눈에 보이는 "10,000"이 아닌 수치 10000이기 때문이지요.

셀 - 즉, Range 개체의 속성 중에서
화면에 표시되는 문자열을 알아볼 수 있는 속성은 Text입니다.
Value나 Value2 속성은 화면 표시가 아닌 실제 기억된 값을 알려줍니다.

따라서 셀의 Text 속성을 이용하여 문자열의 길이를 계산하면
실제 워크시트 화면에 보이는 내용을 기준으로 글자 수를 알아낼 수 있습니다.
다만 이 경우에도, 셀 서식에서 _을 이용하여 양쪽에 공백을 추가한 경우에는 눈에 보이는 글자 수와 다른 결과를 계산해버릴 수 있으므로
Trim 함수와 함께 결합해 주어야 합니다.

이렇게 만든 사용자정의 함수 TextLen 함수의 코드입니다.

' ============================================================================
' 겉보기 표시된 내용을 기준으로 문자열 길이 계산
' (저) 조삿갓  2018.2.11.
' 임의 배포 가능한 Open Source임. 단, 저작권 도용 및 상업적 이용 금지
' 사용법: =TextLen(문자열집합)
'   문자열집합은 셀 범위, 수치, 문자열 등이며, 배열수식으로 사용할 수도 있음
' 반환값: 각 문자열집합이 포함하는 문자열에 대하여 각각의 길이(글자 수)를
'         합산한 정수 값
' 참고: 문자열집합에 셀 범위가 포함된 경우, 셀 표시형식에 의해 표현되는
'       겉보기 문자열의 길이를 계산함(이 함수 설계의 궁극적 목적임)
' 주의사항: TextLen을 계산한 후에 대상 셀의 서식을 변경한 경우에는
'           즉시 반영이 되지 않으므로 '재계산'을 해 주어야 함
' =============================================================================

Public Function TextLen(ParamArray Strings() As Variant) As Integer
    Dim param As Variant
    Dim element As Variant
    Dim rng As Range
    
    TextLen = 0
    For Each param In Strings
        Select Case TypeName(param)
            Case "Variant()"
                For Each element In param
                    TextLen = TextLen + TextLen(element)
                Next
            Case "Range"
                For Each rng In param
                    TextLen = TextLen + Len(Trim(rng.Text))
                Next
            Case "String"
                TextLen = TextLen + Len(Trim(param))
            Case Else
                TextLen = TextLen + Trim(Str(param))
        End Select
    Next
End Function


 
[불량 게시물 신고]  
        
  

작성일 : 2018-02-11(21:02)
최종수정일 : 2018-02-11(21:02)
 


 ◎ 관련글

  제 목   작성자   날짜
개수를 구하고자 합니다 aortla 2018-02-07
[RE] 셀에 표시된 내용을 기준으로 문자열의 길이 구하기 조삿갓 2018-02-11
Combinumerals글꼴 일 경우 엉뚱한 값이 aortla 2018-02-08
Combinumerals글꼴 일 경우 엉뚱한 값이 가을하늘 2018-02-09