• 締切済み

【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 よろしくお願いいたします。

みんなの回答

noname#262398
noname#262398
回答No.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)
回答No.1

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 ・・・

関連するQ&A