【VBA】 유저 폼의 콤보 박스의 리스트에 중복을 생략해 값을 추가한다

사용자 폼의 콤보 상자



이전에 콤보 상자에 값을 추가하는 기사을 썼습니다.
이번에는 중복을 생략하면서 값을 추가합니다.
예를 들면 같은 날짜가 있는 데이터 등을 콤보 박스의 리스트로 하고 싶을 때에 사용합니다.

아래의 콤보 박스에 등록일의 데이터를 중복을 생략하고 추가합니다.
   
등록 날짜 데이터를 콤보 상자 목록과 일치시키고 일치하면 목록을 선택합니다.
중복이 없으면 아무 것도 선택되지 않습니다.
아무것도 선택되지 않았다면
중복되어 있지 않다는 것으로 추가하는 코드입니다.
Private Sub UserForm_Initialize()
    Dim DateCol As Long'IDの列番号を格納する変数
    DateCol = WorksheetFunction.Match("登録日", Master.Rows(1), 0)'Match関数で列数格納
    Dim LastRow As Long '最終行を格納する変数
    LastRow = Master.Cells(Rows.Count, DateCol).End(xlUp).Row'最終行格納
    Dim ChkDate As String'登録日を格納する変数
    Dim i As Long
    For i = 2 To LastRow
        ChkDate = Master.Cells(i, DateCol).Value
        cmbDate.ListIndex = -1'コンボボックスのリストインデックスを未選択にして初期化
    'コンボボックスのリスト項目を1つずつ確認して重複してたらその項目を選択して確認終了
        Dim c As Long
        For c = 0 To cmbDate.ListCount - 1'コンボボックスのリストをすべて繰り返し
            If cmbDate.List(c) = ChkDate Then'リストの項目が変数に入れた値と一緒だったら
                cmbDate.ListIndex = c'その項目を選択しておく
                Exit For'ループ終わり
            End If
        Next c
       'コンボボックスのリストで選択された項目が何もなかったら
        If cmbDate.ListIndex = -1 Then
            cmbDate.AddItem ChkDate'コンボボックスのリストに追加する
        End If
    Next i
    cmbDate.ListIndex = -1 'コンボボックスのリストインデックスを未選択にして初期化
End Sub

실행 결과

중복을 생략하고 배열에 저장하고 나서 목록에 저장하는 등, 방법은 더 많이 있을까 생각합니다만 와타시는 이렇게 하고 있습니다.

와타시 흐름 조건



For문이 겹치는 경우는 반드시 Next의 뒤에 카운트 변수 붙입니다.
다음 i, 다음 c
원래 이번에는 카운트 변수를 i 라든지 c 라든지하고 있습니다만 많이 있다고 이해하기 어렵기 때문에
Dim DateCount As Long을 사용하는 경우도 많습니다

좋은 웹페이지 즐겨찾기