VBA dictionary機能について

Visual Basic47閲覧

ベストアンサー

0

ありがとうございます。 私が理解できていないと思いますが 以下のコードで再説明させてください。 dictionaryで辞書を作っていると思いますが end subまでいくとdictionaryも消えますよね? 毎回dictionaryを作るのは時間がかかるので これを何とか(例えば別ファイルを作るとか?) 次回からdictionaryを再作成せず引用できないかと いう質問でした。 ’dictionary作成 For i = 1 To 5  dic(ws1.Cells(i, 1) & ws1.Cells(i, 1)) = ws1.Cells(i, 2) Next i 'dictionaryから検索 For i = 1 To 10 ws.Cells(i, 2) = dic.Item(ws.Cells(i, 1) & ws.Cells(i, 1)) Next i End Sub

ThanksImg質問者からのお礼コメント

ありがとうございます!

お礼日時:10/26 23:27

その他の回答(1件)

0

シート1のA列のデーターをシート2のA列に重複なしで抽出するならアドバンスドフィルターを使うのが良いです。 ディクショナリと両方書いてみました。 Sub フィルター抽出() With Sheets("Sheet1") .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row).AdvancedFilter _ Action:=xlFilterCopy, _ CopyToRange:=Worksheets("Sheet2").Range("A1"), _ Unique:=True '(重複なし) End With End Sub Sub ディクショナリ() Dim dic As Object, i Set dic = CreateObject("Scripting.Dictionary") With Sheets("Sheet1") For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row dic(.Range("A" & i).Value) = .Range("A" & i) Next End With 'dic.keysは配列になっていますが 縦に書き込む為に縦横反転させて書き込みます。 Sheets("Sheet2").Range("A2").Resize(dic.Count) = Application.Transpose(dic.keys) Set dic = Nothing End Sub Sub 読み込み() Dim c As Variant, i ' データーをcに配列として読み込み With Sheets("Sheet2") c = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row) End With '最後の3ケを表示してみた。 For i = UBound(c) - 2 To UBound(c) MsgBox c(i, 1) Next End Sub