Windows 10 Pro x64 + Excel2016 x86 VBA で CSVファイルを取り込んで uniq なデータを作成してみる

#目的
Excel単体でCAVファイルを取り込んだ後、コンボボックスにキーになりそうなデータを表
示するときに、SQLの GROUP BY ID のような処理を速度面含めてどうするか考えていたん
だけど、On Error Resume Next で Collection.Add するのが主流かな　という印象
(負けた気分)
[重複しない値を抽出する、または重複する値を削除する](https://support.office.com/ja-jp/article/%E9%87%8D%E8%A4%87%E3%81%97%E3%81%AA%E3%81%84%E5%80%A4%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%E9%87%8D%E8%A4%87%E3%81%99%E3%82%8B%E5%80%A4%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B-ccf664b0-81d6-449b-bbe1-8daaec1e83c2)
をVBAのコードで試してみたけど Range object を出力先にすることはNGのようです
※間違っているかもしれない
対象データは[郵便番号データダウンロード](http://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html)の全国一括(KEN_ALL.CSV)124,183行
から 47件の県コードをuniqで抽出する速度は UserForm_Initialize で動かしても
実用に耐えるレベルで動くかなと思います
※県名も一緒に着けると　辛いかな？ -> TODO
##サンプルコード
・CSV2Worksheet：CSVをワークシートに取込む
・GetRangeUniq：指定Range Objectから uniq キー抽出する(ちょっと違うなぁ・・)
共に対象ファイルやシーと名、対象Range Object は引数にする構成だけど
例として示すために、直接記述しています

```vb
Option Explicit

'=================================================================
' 機 能 : CSVを取り込んでワークシートに出力する
'=================================================================
Private Sub CSV2Worksheet()

    Dim vAry        As Variant
    Dim fName       As String
    Dim shtName     As String
    Dim strLine     As String
    Dim cntRow      As Long
    Dim staCol      As Long
    Dim endCol      As Long
    Dim fd          As Integer
    '
    '   普通引数にする・・・
    '
    fName = "C:\Dev\code\excelvb\KEN_ALL.CSV"
    shtName = "KEN_ALL"
    
    Call ChkSheet(shtName)
    cntRow = 0
    staCol = 1
    endCol = 15
    
    fd = FreeFile

    Open fName For Input As #fd

    With Worksheets(shtName)
        .Cells.Clear
        While Not EOF(fd)
            Line Input #fd, strLine
'
            strLine = Replace(strLine, """", "")
            vAry = Split(strLine, ",")
            cntRow = cntRow + 1
'
            .Range(.Cells(cntRow, staCol), .Cells(cntRow, endCol)).NumberFormatLocal = "@"
            '
            '   １項目目の左２桁は県コードなので別途記述する
            '
            .Cells(cntRow, staCol) = Left(vAry(0), 2)
            .Range(.Cells(cntRow, staCol + 1), .Cells(cntRow, endCol + 1)) = vAry
        Wend
    End With

    Close #fd

End Sub

'=================================================================
' 機 能 : 指定ワークシート名が存在しない場合追加する
'=================================================================
Private Sub ChkSheet(shtName As String)

    Dim sheet As Worksheet

    For Each sheet In Worksheets
        If sheet.Name = shtName Then
            Exit Sub
        End If
    Next
    
    Worksheets.Add
    ActiveSheet.Name = shtName
'
End Sub

'=================================================================
' 機 能 : Range で uniq　な値を抽出する
'       : 関数の内容を上位のコードで呼ぶよなぁ・・・
'       : TODO 県名も一緒に取得したい
'=================================================================
Sub GetRangeUniq()

    Dim tCol    As Collection
    Dim tRange  As Range
    Dim i       As Long
'
    Set tCol = New Collection
    With Worksheets("KEN_ALL")
        Set tRange = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
    End With

    Call GetUniqueItems(tRange, tCol)

    For i = 1 To tCol.Count
        Debug.Print tCol(i)
    Next
'
End Sub

'=================================================================
' 機 能 : Range,Cells の値を uniq で取得
'=================================================================
Sub GetUniqueItems(tgRange As Range, ByVal outCol As Collection)
'
    Dim rng As Range
'
    On Error Resume Next
    For Each rng In tgRange
        outCol.Add CStr(rng), CStr(rng)
    Next
'
    On Error GoTo 0
'
End Sub
```