← コード一覧へ戻る
実務UserForm

リストボックスに重複データを登録しない

新しい候補を既存の全項目と比較し、同じ文字列を二重に追加しないようにします。

実行前に確認

  • この例は前後の半角空白を除き、大文字小文字を区別せず比較します。全角・半角などを同一視する厳密な正規化は別途設計します。
  • コードと公式仕様を照合した学習用の例です。Excel実機での実行確認は行っていません。

1サンプルコード

'【貼付先:UserForm1 のコードモジュール】
Option Explicit

Private Sub UserForm_Initialize()
    Me.ListBox1.AddItem "apple"
    Me.CommandButton1.Caption = "重複を避けて追加"
End Sub

Private Sub CommandButton1_Click()
    Dim candidate As String, i As Long
    candidate = Trim$(CStr(Me.TextBox1.Value))
    If Len(candidate) = 0 Then
        MsgBox "候補を入力してください。"
        Exit Sub
    End If
    For i = 0 To Me.ListBox1.ListCount - 1
        If StrComp(CStr(Me.ListBox1.List(i, 0)), candidate, vbTextCompare) = 0 Then
            MsgBox "すでに登録されています。"
            Exit Sub
        End If
    Next i
    Me.ListBox1.AddItem candidate
    Me.TextBox1.Value = ""
End Sub

図で見る既存候補と比較する

イメージ図

新しい候補を既存の全項目と比較し、同じ文字列を二重に追加しないようにします。

  1. 整形

    前後の空白をTrim

  2. 照合

    全行をStrCompで比較

  3. 分岐

    一致なら終了、未登録なら追加

各操作は、このガイドに指定されたフォームのコードで行います。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する5つの手順で、コードの使い方を確認できます
  1. 1

    Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[ユーザーフォーム]で、名前がUserForm1の空のフォームを用意します。各例は別々に試します。

  2. 2

    ツールボックスからListBox1、TextBox1、CommandButton1を各1個を置き、各コントロールの[(Name)]が記載どおりか確認します。

  3. 3

    UserForm1を右クリック→[コードの表示]を開き、掲載コード全体をフォームのコードモジュールへ貼り付けます。標準モジュールには貼り付けません。

  4. 4

    VBEでUserForm1を選び、F5でフォームを表示します。 「APPLE」を入力して追加し、次に「banana」を入力して追加します。

  5. 5

    「APPLE」は重複として追加されず、「banana」だけが新しい2行目になります。

使っている機能の公式ドキュメント(Microsoft Learn)