모두의매뉴얼

이것저것 블로그

[VB] 콤보박스에서 해당 문자열이 포함되어 있는 아이템을 선택하기





  1. VB 콤보박스에서 원하는 문자열이 포함되어 있는 아이템을 선택 하려면,
  2. 콤보박스 아이템 개수(ListCount) 만큼 For 문을 돌려서,
  3. InStr 함수로 해당 아이템에 원하는 문자열이 포함 되어 있는지 확인한 후,
  4. ListIndex 로 해당 아이템을 선택 하면 됩니다.

콤보박스에서 원하는 문자열이 포함되어 있는 아이템을 선택하는 예제를 알아보도록 합시다.

상황설명

간단하게 상황을 설명하자면, 아이템들이 들어 있는 콤보박스(ComboBox1)가 있는데, “조회” 버튼(Button1)을 눌렀을 때 그 아이템들 중에 “0363” 이라는 문자열을 포함하는 아이템을 선택하고 싶은 경우입니다.

이를 위해 콤보박스의 속성과 메소드 중 ListIndex, ListCount, 그리고 InStr 함수와 직접 만든 함수를 사용하도록 합니다.

전체 예제

아래는 Button1 을 클릭 했을때 실행할 코드 입니다.

Private Sub Button1_Click()

    ComboBox1.ListIndex = Find_Item(ComboBox1, "0363")

End Sub

아래는 위 코드에 사용된 Find_Item() 함수의 코드입니다.

Public Function Find_Item(cmb as ComboBox, Str as String)

    Dim Count as Double
    Dim i as Double

    Count = cmb.ListCount

    For i = 0 To Count - 1
        If InStr(1, cmb.List(i), Str) > 0 Then
            Find_Item = i
            Exit Function
        End If
    Next i

    Find_Item = -1

End Function

이제 하나씩 알아볼까요?

콤보박스의 아이템 선택하기: ListIndex

ComboBox1.ListIndex = Find_Item(ComboBox1, "0363")

콤보박스의 아이템을 선택하기 위해서는 ListIndex 속성을 사용하면 됩니다. 예를 들어 콤보박스의 3번째 아이템을 선택하기 위해서는 ListIndex 에 2 값을 넣어주면 됩니다(콤보박스의 아이템 순번은 0부터 시작하기 때문입니다).

따라서 우리는 콤보박스에서 원하는 문자열이 포함된 아이템의 순서를 찾아서 반환해주는 함수(Find_Item)를 만들어서 사용하면 됩니다.

콤보박스의 아이템 찾기

Find_Item 이라는 함수를 만들 것입니다. 파라미터로 두가지를 받습니다. 첫번째는 타겟이 되는 콤보박스를, 두번째는 찾고 싶은 값입니다.

Public Function Find_Item(cmb as ComboBox, Str as String)

    Dim Count as Double
    Dim i as Double

    Count = cmb.ListCount

    For i = 0 To Count - 1
        If InStr(1, cmb.List(i), Str) > 0 Then
            Find_Item = i
            Exit Function
        End If
    Next i

    Find_Item = -1

End Function

타겟이 되는 콤보박스의 아이템을 하나씩 For 문을 이용해 검사합니다. 원하는 아이템을 찾으면 해당 아이템의 순번을 반환하면서 함수가 끝나고, 그렇지 않으면 -1을 반환해주면서 콤보박스가 어떤 것도 선택하지 않은 상태로 만들어 줍니다.

콤보박스의 전체 개수 확인하기

Count = cmb.ListCount

콤보박스의 아이템을 검사하기 위해서는 전체 아이템의 개수를 알아야겠죠? Count 라는 변수에 콤보박스의 ListCount 속성을 이용하여 전체 개수를 담아줍니다.

For 문으로 전체 아이템 검사하기

For i = 0 To Count - 1

    ...

Next i

For 문을 이용해 콤보박스의 아이템을 한땀한땀 검사합니다. 콤보박스 아이템의 순번은 0 부터 시작하고 전체 갯수의 -1 개가 마지막 순번이니 0 에서 Count - 1 까지 아이템들을 검사 합니다.

아이템의 문자열 포함여부 검사하기

If InStr(1, cmb.List(i), Str) > 0 Then
    Find_Item = i
    Exit Function
End If

각 아이템이 해당 문자열을 포함하는지 확인하기 위해 InStr 함수를 사용합니다. 만약 해당 아이템이 문자열을 포함할 경우(InStr > 0) i 가 해당 아이템의 순번이 되니 함수 값으로 반환 해주고, 할일을 모두 마친 함수를 종료해줍니다.

Find_Item = -1

만약 해당 조건을 만족 하는 경우가 한번도 없다면? For 문이 종료 되면서 함수는 -1을 반환하면서 종료됩니다.


결론적으로 콤보박스에 원하는 문자열이 포함되어 있는지 콤보박스의 아이템들을 하나씩 검사하고 포함하고 있다면 해당 아이템의 고유번호를 반환해주는 함수를 이용해 해당 콤보박스의 아이템을 선택하는 과정입니다.

복잡해 보이지만 해보면 간단해요. Find_item 함수도 만들어 놓고 이곳저곳에서 막 가져다 쓰면 좋습니다.