重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

「データ」というシートの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

よろしくお願いいたします。

A 回答 (2件)

'* =追加した行


If IsArray(varData) Then '*
For Each c In varData
'(中略)
Next
Else '*
myDic.Add varData, Null '*
End If '*

myKey = myDic.Keys
'出力
(以下同じ)
    • good
    • 0

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
・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!