- 締切済み
【Excel】【VBA】重複しないリスト作成について
「データ」というシートのJ列データを元に、重複しないリストを 作成したいのですが、「データ」にレコードが1件しかないと > For Each c In varData で「型が一致しません」というエラーになってしまいます。 2件以上あると問題なく処理ができるのですが、1件のときに うまく回避させる方法はありますでしょうか。 'データシートのキーワードを重複しないリスト化してA列にコピー Dim sh2 As Worksheet Dim myDic As Object, myKey As Variant Dim c As Variant, varData As Variant Set sh2 = ThisWorkbook.Worksheets("Sheet1") Set myDic = CreateObject("Scripting.Dictionary") With ThisWorkbook.Worksheets("データ") varData = .Range("J3", .Range("J" & Rows.Count).End(xlUp)).Value End With For Each c In varData If Not c = Empty Then If Not myDic.Exists(c) Then myDic.Add c, Null End If End If Next myKey = myDic.Keys '出力 With sh2 .Range("A:A").ClearContents .Range("A4").Resize(myDic.Count) = Application.WorksheetFunction.Transpose(myKey) End With Set myDic = Nothing よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
'* =追加した行 If IsArray(varData) Then '* For Each c In varData '(中略) Next Else '* myDic.Add varData, Null '* End If '* myKey = myDic.Keys '出力 (以下同じ)
- nag0720
- ベストアンサー率58% (1093/1860)
c と varData は Range として定義したほうがいいでしょう。 ・・・ Dim c As Range, varData As Range ・・・ Set varData = .Range("J3", .Range("J" & Rows.Count).End(xlUp)) ・・・ If Not c.Value = Empty Then If Not myDic.Exists(c.Value) Then myDic.Add c.Value, Null ・・・