コンボボックスのリストに同項目をセットしない方法は?

Question 51.5 Previous Next
詳細は こちら 500連発第2弾の379番『コンボボックスのリストをセットする(1列型)』のテーマでご質問です。
1列のセルをすべてリストに項目を追加する際に、同じ項目があったら、その項目を追加しない。 ……というマクロはどうなりますか? 項目のダブりを防ぐ方法です。
VBA素人に知恵を与えてください。宜しくお願い致します。
Answer   Copyright (C) 2002.1.18 永井善王
500連発第2弾379番のワークシート 500連発第2弾379番のコンボボックス
379番のサンプルは、
左図のワークシートのB列の氏名を、
右図のコンボボックスのリストの項目にセットするためのマクロです。

コンボボックスのリストは、いくつかのデータの中から
唯一、望むデータを選択するためのものです。
よって、ダブったまま表示することは好ましくありませんが、基になるデータにダブリが含まれている場合がないとは言えませんね。

コンボボックスを初期化するときにダブリを取り除く方法 【A案】
コンボボックスのイニシャライズイベントマクロとして作成する方法から解説します。

詳細は こちら 500連発(第1弾)の237番に「選択範囲からユニークな値を使ってコンボボックスを表示する」と題するサンプルマクロがあります。
このマクロはアクティブシート上の選択範囲から、内容が重複しないようにコンボボックスを表示してくれます。 Sunago氏の作品のため、ここで、その内容を詳しく解説することができませんが、特徴として、ランダム(並べ替えてない)データでもユニーク(唯一)にしてくれます。 本をお持ちでしたら、ぜひ参考にされるとよいので、ご紹介しておきます。 お持ちでない場合、備置されている図書館もあるようです。

コンボボックスを初期化するときにダブリを取り除く方法 【B案】
基になるワークシートをソート(並べ替え)してよいか、または、新シートへコピー貼り付けしてからソートして、それを基データにするのであれば、379番のマクロを次のように、少しだけ改造すれば可能になります。
◆UserForm1のコード◆

Private Sub UserForm_Initialize()               'ユーザーフォームを初期化する
2   覚え = ""                                   '変数「覚え」をクリアする
10  For I = 0 To 7                              'Iが0から7まで(2行-2から9行-2まで)
12      If 覚え <> Worksheets("名簿").Cells(I + 2, 2).Value Then
                                                'もし名簿シートのB列セルの
                                                '値が変数「覚え」の値と等しくなければ
14          覚え = Worksheets("名簿").Cells(I + 2, 2).Value
                                                '名簿シートの値を変数にセット
20          ComboBox1.AddItem 覚え          'コンボボックスのリストに変数の値をセット
30      End If
40  Next                                        '繰り返す
End Sub
379番のマクロに追加した行は、2、12、14行。 部分修正した行は20行です。
ワークシートにある基データからダブリを取り除く方法
これについて、くわしい解説はしませんが、ワークシートから同じデータを取り除いてからコンボボックスのリストに追加する方法です。従って、379番のマクロの組み替えは不要です。
改造したサンプルブックのダウンロードは
ここをクリック(500-2-379.xls 61KB)
  ※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

関連ページ
 
リストボックスのリストでは同一名称のアイテムを機能させれないか? の「ユニークにする方法」

 

Excel VBA Macro