重複排除して二次元配列を作る(Collection版)
単に重複排除の判定だけなら、わざわざ Dictionary を使わなくても Collection で充分です。
ただ、Collection の場合もちょっと注意が必要です。
Addメソッドの Key は文字列しか受け付けてくれません。
なので、前回のように KEY が数値の場合は、CStr 関数で変換するとか Text プロパティを使うとかする必要があります。
例えば、図のようなデータがシートにあり、A列がユニークな行について、A,B列のデータを二次元配列に入れる場合を考えてみます。
※.A列は数値です。
Sub Macro2() Dim dicA As Collection Dim rngU As Range Dim r As Range Dim i As Long Dim aryX() As String Set dicA = New Collection Set rngU = Worksheets("Sheet1").Range("A2:A8") On Error Resume Next For Each r In rngU Err.Clear ' ◆◇◆◇◆◇◆◇◆◇ dicA.Add Item:="", Key:=r.Value 'dicA.Add Item:="", Key:=r.Text ' OK ' ◆◇◆◇◆◇◆◇◆◇ If Err.Number = 0 Then i = i + 1 ReDim Preserve aryX(1 To 2, 1 To i) As String aryX(1, i) = r.Text aryX(2, i) = r.Offset(, 1).Text Debug.Print aryX(1, i), aryX(2, i), i End If Next r On Error GoTo 0 End Sub
これも、◆◇◆で印を付けた部分がNGです。
後ろにコメントアウトしたコードのようにすればOKです。
例によって、On Error Resume Next を使っているので、バグっても気づきにくいのが困りものです。
まぁ、こっちの方は結果を見れば一目瞭然なので、Dictionary の方より気づきやすいです。
※.Excel World の 2007年7月16日 17:26 の日記をコピーしています。
http://excel.sns.fc2.com/excel/