반응형

안녕하세요. 이번 글에서는 VBA 에서 문자열을 가지고 무엇인가를 하는 것을 알아보겠습니다. 프로그래밍을 하다 보면 조건을 가지고 어떤 액션을 해야 하는 결우가 무척 많은데요. 그중에 대표적인 것의 하나가 문자열의 내용을 이용하는 것 입니다. '문자열 내에 특정 문자가 포함되어 있는지?' , '문자열의 첫번째 글짜는 무엇인지?' , '문자열의 전체 길이가 얼마인지?,' 등등 문자열을 이용하여 로직을 구성하는 경우는 아주 흔하기 때문에 VBA 안에서 문자열을 다루는 방법을 잘 알면 아주 매끄러운 코드를 작성할 수 있습니다. 

 

뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. 
도움이 되었다 생각되시면  클릭!!  부탁드려요~

 

 

이번 페이지에서 다룰 내용은 아래와 같습니다.

 

  • 특정 문자열이 문자열 내부에 포함되어 있는지 검사
  • 문자열의 앞에서부터 몇개의 글자를 추출 하기
  • 문자열의 뒤에서 부터 몇개의 글자를 추출 하기
  • 문자열의 중간에 지정된 위치의 글자를 추출하기
  • 문자열의 특정 기호를 이용하여 배열(리스트)로 돌려 주기
  • 문자열 합치기
  • 알파벳 대소문자 전환

 

 

 

 

어렵지 않은 내용들 이므로 가볍게 따라해 봅시다.

 

 

 

특정 문자열이 문자열 내부에 포함되어 있는지 검사

문자열 내부에 특정 단어 또는 글자가 있는지를 검사하는 함수로 Instr 라는 함수가 있습니다.

Sub stringTest()

    Dim testString As String
    
    testString = "The color is #FFCC23"
    
    If InStr(testString, "#") Then
        MsgBox ("컬러코드가 포함되어 있습니다.")
    Else
        MsgBox ("컬러코드가 포함되어 있지 않습니다.")
    End If
    
End Sub

위의 코드에서는 testString 이라는 변수를 생성한뒤 " The color is #FFCC23" 이라는 문자열을 적용해 주었습니다.

Instr 라는 함수를 이용하여 해당 문자열 안에 "#" 이라는 문자가 포함되어 있는지를 검사하는 로직이죠. 만약 "#" 이라는 글자가 있다면 Instr 라는 함수는 해당 문자를 만난 첫번째 위치 (숫자) 를 돌려줍니다. 없는 경우에는 -1 을 돌려주게 되는데요. IF 구분에 사용하게 되면 무엇인가 의미 있는 숫자가 나오면 true 로 인식되고 -1 이 나오면 false 로 인식되기 때문에 해당 문자열이 있는지 없는지를 알수 있게 됩니다.

 

 

 

 

문자열의 앞에서부터 몇개의 글자를 추출 하기

이번에는 문자열의 앞부분부터 몇개의 글자를 추출해 보겠습니다. 몇개의 글자라는게 좀 애매하니까 문자열의 첫번째 단어를 추출하는 것을 작성해 보겠습니다.

 

Sub stringTest()

    Dim testString As String
    Dim firstWord As String
    Dim firstSpacePos As Integer
    
    testString = "The color is #FFCC23"
    
    firstSpacePos = InStr(testString, " ") ' 첫번째 공백의 위치를 돌려줍니다.
    
    MsgBox (firstSpacePos)
    
    firstWord = Left(testString, firstSpacePos - 1) ' 처음부터 첫번째 공백 이전까지의 글자를 추출합니다.
    
    MsgBox (firstWord)
    
    
End Sub

시작 부분에 변수가 두개 더 추가가 되었습니다. 하나는 결과값을 돌려 받을 첫번째 단어를 저장하기 위한 문자열 변수와 첫번째 공백의 위치를 알기위한 숫자 변수 입니다. 문장의 시작부터 첫번째 공백까지의 글자를 추출하면 첫번째 단어가 될테니까요. 여기서도 역시 Instr 를 이용하여 첫번째 공백의 위치를 알아낸 뒤 LEFT 라는 함수를 이용하여 처음부터 몇개의 글자를 추출하는 내용입니다. VBA 에서의 위치는 첫번째 위치가 1 부터 시작이므로 첫번째 공백은 4가 리턴되게 되고 우리가 필요한 글자의 수는 3개이므로 공백 이전까지의 자릿수가 필요합니다. 그래서 firstSpacePos 에서 -1 을 한 값이 적용되었습니다. -1 을 하지 않게 되면 공백까지 추출이 됩니다.

 

 

 

 

문자열의 뒤에서 부터 몇개의 글자를 추출 하기

문자열의 뒤에서 부터 글자를 추출하는 함수는 RIGHT 입니다. 오른쪽이라느 뜻이죠? 사용 방법은 LEFT와 동일합니다. RIGHT(string, number) 와 같이 작성하며 string 의 오른쪽 끝부터 시작해서 number 만큼의 글자를 뽑아내어 돌려줍니다.

 

 

 

 

문자열의 중간에 지정된 위치의 글자를 추출하기

문자열의 맨 앞부터 또는 맨 뒤부터 글자를 추출하는 경우는 사실 아주 일반적으로 사용되지 않습니다. 보통은 특정 위치로부터 몇개의 글자를 뽑아내는 경우가 많죠. 이번에는 위에서 사용한 샘플 문장에서 색상 코드에 해당하는 부분만 추출해 보도록 하겠습니다.

 

Sub stringTest()


    Dim testString As String
    Dim firstWord As String
    Dim firstSpacePos As Integer
    
    testString = "The color is #FFCC23"
    
    firstSpacePos = InStr(testString, "#")
    
    MsgBox (firstSpacePos)
    
    firstWord = Mid(testString, firstSpacePos, 7)
    
    MsgBox (firstWord)

End Sub

이번에는 # 이라는 글자가 보여지는 첫번째 위치를 알아낸 뒤 그뒤의 7개의 글자를 뽑아내는 내용입니다. 어떤 문장이든 이제 #과 함께 오는 6개의 색상 값의 위치를 알수 있게 됩니다. 추출된 결과는 "#FFCC23" 이 됩니다.

 

 

 

 

 

문자열의 특정 기호를 이용하여 배열(리스트)로 돌려 주기

 

문자열 내부에 반복적으로 보여지는 특정 글자 또는 기호를 이용하여 배열로 만드는 방법입니다. 저는 샘플 문자열을 이용할 것이기 때문에 공백을 이용할 계획인데요. CSV 파일을 읽어 사용하거나 할 때는 tab 이나 ","(쉼표) 를 이용하면 되겠습니다.

Sub stringTest()


    Dim testString As String
    Dim filterChar As String
    Dim stringArray() As String
        
    testString = "The color is #FFCC23"
    
    filterChar = " " ' 구분을 위한 문자열 또는 기호를 작성합니다.
    
    stringArray = Split(testString, filterChar) ' stringArray 라는 문자 배열에 담아냅니다.
    
    
    For Each myStr In stringArray
        MsgBox (myStr)				'한단어씩 차례로 배열안의 값을 보여줍니다.
    Next myStr
        
End Sub

이렇게 하면 전체 문자열은 공백을 기준으로 각각 단어별로 잘라지게 됩니다. 앞서 이야기 한것처럼 CSV 파일 등을 이용하여 자료를 불러들이거나 할때 유용한 기능입니다.

 

 

 

 

 

문자열 합치기

 

문자열을 합치는 방법을 알아보겠습니다. 보통의 스크립트 언어에서는 일반적으로 문자열 변수끼리는 + 로 문자열을 합칠 수 있습니다. string3 = string1 + string2 이런식이죠. 그런데 VBA 에서는 좀 다른 방법으로 합쳐주는 것이 좋습니다. 바로 & 기호를 이용하는 방법인데요. 작성하는 방법은 동일합니다. 기호만 다를뿐

Sub stringTest()


    Dim testString As String
    Dim filterChar As String
    Dim stringArray() As String
    Dim sting2 As String
    Dim resultString As String
    
    string2 = " what color is your favorite?"
    
    testString = "The color is #FFCC23"
    
    
    resultString = testString & string2
    
    MsgBox (resultString)  
    
End Sub

 

이렇게 합치는데는 여러가지 이유가 있겠지만 숫자형과 문자형을 합치는데 가장 큰 이유가 있는 것 같습니다. 다른 언어에서는 숫자와 문자는 기본적으로 합치는 것이 불가능합니다. 그런데 VBA 에서는 & 기호를 이용하면 숫자든 문자든 보이는 그대로 연결하여 합쳐진 문자열을 출력하는 것이 가능합니다. 

바로 이렇게요.

Sub stringTest()

    Dim sting2 As String		' 문자열 변수를 설정    
    Dim myNumber As Integer 	'숫자인 변수를 설정
    Dim resultString As String
    
    string2 = "The number is "
    myNumber = 16

    resultString = string2 & myNumber	' 문자와 숫자가 합쳐져 하나의 문자열이 됨
    
    MsgBox (resultString)
    ' 결과: The number is 16
End Sub

 

사실 자료형을 변경해가며 문자열을 다루는 것은 매우 꼼꼼하게 코드를 작성하지 않으면 대부분 실수가 나오는 부분이거든요. VBA 는 나름 편리하게 이런 문제를 예방하고 있다고 판단됩니다.

 

 

 

알파벳 대소문자 전환

끝으로 문자열의 모든 글자를 대문자로, 또는 소문자로 변경하는 함수를 소개해드리고 마무리를 할까 합니다. 

 

Sub stringTest()


    Dim testString As String
    Dim resultString As String   
    
    testString = "The color is #FFCC23"
    
    resultString = UCase(testString) ' 모든 문자를 대문자로
    MsgBox (resultString)
    
    resultString = LCase(testString) ' 모든 문자를 소문자로
    MsgBox (resultString)
    

End Sub

UCase(string) 는 string 의 모든 문자를 대분자로 바꿔주며 LCase(string) 은 반대로 모든 문자를 소문자로 변경해 줍니다.

 

 

이상으로 VBA 에서 기본적인 문자열을 다루는 내용을 알아보았습니다. 사실 복잡한 함수와 기능이 더 있지만 이정도만 알아도 기본적으로 문자열을 컨트롤 하는데는 무리가 없을 것으로 판단이 됩니다.

 

슬기로운 개발생활이 되기길 바랍니다.

뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. 
도움이 되었다 생각되시면 클릭!!  부탁드려요~

2022.12.02 - [DEV/VBA] - [excel vba] 16진수를 10진수로, 10진수를 16진수로 변경

 

[excel vba] 16진수를 10진수로, 10진수를 16진수로 변경

오늘은 간단한 VBA 코드를 하나 소개해 드릴까 합니다. 프로그래밍을 하다보면 16진수를 10진수로 바꾸거나 10진수를 16진수로 바꾸어야 하는 경우가 종종 있습니다. 읭? 16 진수? 라고 하실수도 있

diy-dev-design.tistory.com

2020/02/12 - [DEV/VBA] - [VBA] 엑셀에서 파일 쓰기, 텍스트 추출

 

[VBA] 엑셀에서 파일 쓰기, 텍스트 추출

엑셀 파일을 이용하여 정말 다양한 작업이 가능합니다. 계산이며 표만들기며 각종 정보를 분석하거나 데이터 화 시키는 작업 등 정말 할 수 있는 일이 무궁무진 하죠. 그런데 가끔 엑셀을 이용하여 특정 정보를 별..

diy-dev-design.tistory.com

2020/01/30 - [분류 전체보기] - [vba] 셀 속성 조정하기 (넓이, 높이, 숨기기, 테두리 등)

 

[vba] 셀 속성 조정하기 (넓이, 높이, 숨기기, 테두리 등)

이번 포스트에서는 vba 를 이용하여 셀의 속성을 조정하는 방법을 설명 드리겠습니다. 엑셀은 단순한 표의 형식을 취하고 있지만 셀의 간격이나 테두리 등의 속성을 자유롭게 조정할 수 있어 다양한 서식에 사용하..

diy-dev-design.tistory.com

2019/12/06 - [DEV/VBA] - [vba] 하위폴더 내의 모든 파일 정보 가져오기

 

[vba] 하위폴더 내의 모든 파일 정보 가져오기

일을 하다 보면 가끔 업무를 진행하던 경로 하위에 있는 데이들의 리스트를 만들어야 하는 경우가 있습니다. 하나의 폴더라면 어떻게 해보겠는데 그 폴더가 하위 뎁스가 연속해서 있고 저장되어 있는 파일이 불특..

diy-dev-design.tistory.com

 

반응형

+ Recent posts