본문 바로가기
VBA 라이브러리

StrComp 함수

2023. 7. 22.

문자열 비교 결과를 나타내는 Variant(Integer)를 반환합니다.

 

구문은 다음과 같습니다.

Syntax

StrComp(string1, string2, [ compare ])

 

string1 : 필수입니다. 유효한 문자열 표현식입니다.

string2 : 필수입니다. 유효한 문자열 표현식입니다.

compare : 선택적. 문자열 비교의 형식을 지정합니다. 비교 인수가 Null이면 오류가 발생합니다. 비교를 생략하면 Option Compare 설정에 따라 비교 유형이 결정됩니다.

 

Option Compare

아래 링크는 Option Compare 구문 도움말입니다.

 

Option Compare statement (VBA)

Office VBA reference topic

learn.microsoft.com

Option Compare문은 생략하면 기본적으로 Option Compare Binary를 사용합니다.(대/소문자 구분)

 

Option Compare는 최상단에 위치해야 합니다.

Option Explicit
Option Compare Text ' Option Compare문을 모듈의 맨 처음에 위치시킵니다.

Sub CompareStrings()
    Dim str1 As String
    Dim str2 As String
    
    str1 = "apple"
    str2 = "Apple"
    
    If str1 = str2 Then
        MsgBox "문자열은 동일합니다."
    Else
        MsgBox "문자열은 동일하지 않습니다."
    End If
End Sub

 

도움말에 있는대로 비교인수에 Null을 사용해 봤습니다.

Sub CompareUsingStrComp()
    Dim string1 As String
    Dim string2 As String
    Dim result As Integer
    
    string1 = "Hello"
    string2 = "hello"
    
    ' Null 인수로 인해 오류 발생하는 경우
    result = StrComp(string1, string2, Null) ' 비교 인수를 Null로 지정함, 오류가 발생
End Sub

 

아래 그림과 같이 오류가 납니다.

 

Compare를 생략하니 다음과 같은 결과가 나왔습니다.

반환값은 다음과 같습니다.

-1은 string1이 string2보다 작다는 뜻입니다. 즉 "Hello" < "hello"가 됩니다.

0은 두 문자열이 같음을 의미합니다. 즉 "Hello" = "hello"가 됩니다.(대/소문자 무시)

1은 string1이 string2보다 크다는 의미입니다.

 

비교 인수 설정은 다음과 같습니다.

 

다음은 간단한 예제입니다.

Sub CompareStringsUsingvbBinaryCompare()
    Dim string1 As String
    Dim string2 As String
    Dim result As Integer

    string1 = "Hello"
    string2 = "hello"

    ' StrComp 함수에서 비교 방식으로 vbBinaryCompare을 사용
    result = StrComp(string1, string2, vbBinaryCompare)

    If result = 0 Then
        Debug.Print "vbBinaryCompare - 동일한 문자열입니다!"
    ElseIf result < 0 Then
        Debug.Print "vbBinaryCompare - string1이 string2보다 작습니다!"
    Else
        Debug.Print "vbBinaryCompare - string1이 string2보다 큽니다!"
    End If
End Sub

 

Sub CompareStringsUsingvbTextCompare()
    Dim string1 As String
    Dim string2 As String
    Dim result As Integer

    string1 = "Hello"
    string2 = "hello"

    ' StrComp 함수에서 비교 방식으로 vbBinaryCompare을 사용
    result = StrComp(string1, string2, vbTextCompare)

    If result = 0 Then
        Debug.Print "vbTextCompare - 동일한 문자열입니다!"
    ElseIf result < 0 Then
        Debug.Print "vbTextCompare - string1이 string2보다 작습니다!"
    Else
        Debug.Print "vbTextCompare - string1이 string2보다 큽니다!"
    End If
End Sub

vbBinaryCompare

Sub CompareStringsUsingVbBinaryCompare()
    Dim stringA As String, stringB As String, stringC As String, stringD As String

    stringA = "Hello"
    stringB = "hello"
    stringC = "Hello"
    stringD = "World"

    ' 비교 결과 출력
    PrintComparisonResult stringA, stringB, vbBinaryCompare
    PrintComparisonResult stringA, stringC, vbBinaryCompare
    PrintComparisonResult stringA, stringD, vbBinaryCompare
End Sub

Sub PrintComparisonResult(ByVal string1 As String, ByVal string2 As String, ByVal compareMode As VbCompareMethod)
    Dim result As Integer

    result = StrComp(string1, string2, compareMode)

    Select Case result
        Case 0
            Debug.Print string1 & " <=> " & string2 & " : 동일한 문자열 (vbBinaryCompare)"
        Case -1
            Debug.Print string1 & " < " & string2 & " : string1이 string2보다 작습니다 (vbBinaryCompare)"
        Case 1
            Debug.Print string1 & " > " & string2 & " : string1이 string2보다 큽니다 (vbBinaryCompare)"
    End Select
End Sub

vbTextCompare

Sub CompareStringsUsingVbTextCompare()
    Dim stringA As String, stringB As String, stringC As String, stringD As String

    stringA = "apple"
    stringB = "Apple"
    stringC = "banana"
    stringD = "Banana"

    ' 비교 결과 출력
    PrintComparisonResult stringA, stringB, vbTextCompare
    PrintComparisonResult stringA, stringC, vbTextCompare
    PrintComparisonResult stringC, stringD, vbTextCompare
End Sub

Sub PrintComparisonResult(ByVal string1 As String, ByVal string2 As String, ByVal compareMode As VbCompareMethod)
    Dim result As Integer

    result = StrComp(string1, string2, compareMode)

    Select Case result
        Case 0
            Debug.Print string1 & " <=> " & string2 & " : 동일한 문자열 (vbTextCompare)"
        Case -1
            Debug.Print string1 & " < " & string2 & " : string1이 string2보다 작습니다 (vbTextCompare)"
        Case 1
            Debug.Print string1 & " > " & string2 & " : string1이 string2보다 큽니다 (vbTextCompare)"
    End Select
End Sub

'VBA 라이브러리' 카테고리의 다른 글

Space 함수  (0) 2023.07.22
StrConv 함수  (0) 2023.07.22
ColorConstants  (0) 2023.07.18
IIf 함수  (0) 2023.07.15
InputBox 함수  (0) 2023.07.15