프로그래밍

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

📈 0
  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 함수도 만들어 놓고 이곳저곳에서 막 가져다 쓰면 좋습니다.