本コンテンツは、たぶん2005年頃に書きました。約15年前です。多くの方が、ここに書いた方法を参考にしてくれていますが、重複しないリストを作るのは、ほかにもたくさんの方法があります。Office TANAKAサイトをリニューアルしたついでに、ほかの方法も書きました。そちらもご覧ください。重要なことは「どの方法がいいか」ではなく「選択肢を広く持つ」ことです。理想は、すべての方法を自在に書けるようになってくださいな。
ここでは下図のようなリストを例にします。セル範囲A2:A8に名前が入力されていますが、よく見ると(よく見なくても)同じ名前が重複しています。このリストから重複しないリストを作成します。力技も含めていろいろな方法が考えられますが、ここではScripting Runtimeオブジェクトライブラリ内のDictionaryオブジェクトを使います。Scripting RuntimeオブジェクトライブラリはOffice 2000以降のOfficeをインストールすると自動的に組み込まれます。

Dictionaryオブジェクトは本来「連想配列」を作成するために使うオブジェクトです。連想配列とは、たとえば次のような配列です。
| キー | 値 | 
|---|---|
| 東京都 | 新宿区 | 
| 神奈川県 | 横浜市 | 
| 千葉県 | 千葉市 | 
| 埼玉県 | さいたま市 | 
| 茨城県 | 水戸市 | 
「キー」と「値」がセットになっていて、「神奈川県」というキーで「横浜市」という値を検索できるような仕組みです。Dictionaryオブジェクトでは、こうした連想配列にデータ(キーと値のセット)を追加したり、検索したり、任意のキーがすでに存在しているかどうかを調べことなどができます。なお、連想配列では同じキーを登録できません。
Dictionaryオブジェクトを使って重複しないリストを作成するには、次のように考えます。

流れはこんな感じです。さて登録するデータですが、連想配列では「キー」と「値」の二つが必要です。今回のケースでは「名前」データしかありません。「名前」を「キー」にするとして、「値」には何を登録したらいいのでしょう。
何でもいいんです。ここで重要なことは重複しない「キー」の集まりを作ることです。「値」はすべて空欄でもいいですし「キー」と同じ「名前」を登録してもかまいません。コードにすると次のようになります。
Sub Sample1()
    Dim Dic, i As Long, buf As String
    Set Dic = CreateObject("Scripting.Dictionary")
    For i = 2 To 8                      ''セルA2からセルA8までを処理する
        buf = Cells(i, 1).Value         ''セルの値を変数bufに格納する
        If Not Dic.Exists(buf) Then     ''まだ登録されていなかったら…
            Dic.Add buf, buf            ''セルの値を連想配列に登録する
        End If
    Next i
    MsgBox Dic.Count
    Set Dic = Nothing
End Sub

Existsメソッドは、指定したキーが、連想配列内に存在していたときTrueを返し、存在しないときはFalseを返します。先に例として紹介した「県庁所在地」の連想配列でしたら、Exists("千葉県")はTrueで、Exists("静岡県")はFalseとなります。Addメソッドは、連想配列に新しい「キー」と「値」のセットを追加します。最後のCountプロパティは、連想配列内のデータ組数を返します。
せっかく重複しないリストを作成しても、ただ個数を確認するだけでは実用的とは言えませんね。作成したリストを別のセルに出力するには次のようにします。
Sub Sample2()
    Dim Dic, i As Long, buf As String, Keys
    Set Dic = CreateObject("Scripting.Dictionary")
    For i = 2 To 8
        buf = Cells(i, 1).Value
        If Not Dic.Exists(buf) Then
            Dic.Add buf, buf
        End If
    Next i
    ''出力
    Keys = Dic.Keys
    For i = 0 To Dic.Count - 1
        Cells(i + 2, 2) = Keys(i)
    Next i
    Set Dic = Nothing
End Sub
さてさて、実はもう少し手抜きの方法がありますのでお教えします。
上の流れは「これから登録しようとするデータがすでに登録されているかどうか」をExistsメソッドで確認しました。連想配列では同じキーを重複して登録できないからです。では、同じキーを登録しようとしたらどうなるのでしょう。エラーになります。ということは「登録してみてエラーになったら無視(何もしない)」という手が使えそうです。
Sub Sample3()
    Dim Dic, i As Long, buf As String, Keys
    Set Dic = CreateObject("Scripting.Dictionary")
    On Error Resume Next
    For i = 2 To 8
        buf = Cells(i, 1).Value
        Dic.Add buf, buf
    Next i
    ''出力
    Keys = Dic.Keys
    For i = 0 To Dic.Count - 1
        Cells(i + 2, 2) = Keys(i)
    Next i
    Set Dic = Nothing
End Sub