こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

【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

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

投稿日時 - 2009-08-20 17:52:44

QNo.5222886

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

'* =追加した行
If IsArray(varData) Then '*
For Each c In varData
'(中略)
Next
Else '*
myDic.Add varData, Null '*
End If '*

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

投稿日時 - 2009-08-21 17:14:07

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

投稿日時 - 2009-08-21 06:38:37

あなたにオススメの質問