ID非公開さん
2022/1/16 23:04
1回答
vbaでvlookを組みましたが
vbaでvlookを組みましたが あまりにも時間がかかるのでDictionaryを勉強しています。ネットで調べて真似してモジュールを以下の通り作ってみたらなんとなく仕組みが分かってきたのですが、所謂関数でいうiferrorの時の設定はできるのでしょうか。 今の段階では、A列が検索値で、D列とE列を参照するための配列とし格納し(D列がキーE列がアイテム)、結果をB列に出すようにしてますが、該当しない場合は空白になります。この空白を『---』など指定の文字をいれたいです。 Sub 練習() Dim SearchArray As Variant Dim RefArray As Variant Dim keyval Dim ItemVal Dim MaxRow As Long Dim i As Long Dim n As Long Dim mydic As Object MaxRow = Cells(Rows.Count, 1).End(xlUp).Row '最終行の取得 SearchArray = Range(Cells(2, 1), Cells(MaxRow, 2)) 'B列配列格納 RefArray = Range(Cells(2, 4), Cells(MaxRow, 5)) '参照データとしてDとE列を格納 Set mydic = CreateObject("Scripting.Dictionary") For n = 1 To UBound(RefArray) '参照用の配列を要素数分ループ keyval = RefArray(n, 1) 'keyを格納 ItemVal = RefArray(n, 2) 'Itemを格納 If Not mydic.Exists(keyval) Then mydic.Add keyval, ItemVal End If Next n For n = 1 To UBound(SearchArray) keyval = SearchArray(n, 1) SearchArray(n, 2) = mydic(keyval) '検索値のKeyでItemを抽出 Next n Range(Cells(2, 1), Cells(MaxRow, 2)) = SearchArray Set mydic = Nothing End Sub
Visual Basic・36閲覧
ベストアンサー
For n = 1 To UBound(SearchArray) keyval = SearchArray(n, 1) SearchArray(n, 2) = mydic(keyval) '検索値のKeyでItemを抽出 Next n ↓ For n = 1 To UBound(SearchArray) keyval = SearchArray(n, 1) If mydic.Exists(keyval) Then SearchArray(n, 2) = mydic(keyval) '検索値のKeyでItemを抽出 Else SearchArray(n, 2) = "---" '該当しない場合 End If Next n
質問者からのお礼コメント
ここにIf構文をいれればよかったのですね! 上手くできました。 すぐに回答いただきありがとうございました。
お礼日時:1/16 23:36