前提・実現したいこと
いつもお世話になっております。
VBA初心者ですが宜しくお願い致します。
Vlookup関数の代替として、Dictionaryを使用しております。
そこで質問なのですが、1つのKeyに対して複数のItemを持たせることは可能でしょうか?
それとも、Dictionaryとは別の方法が良いのでしょうか?
お手数お掛けしますが、ご確認お願い致します。
検索結果の出力先 : Book_bのSheet_cのAQ列とAR列
検索値 : Book_bのSheet_cのJ列
検索範囲 : Book_dのSheet_eのC~H列
列番号 : 5と6(E列とF列)
検索方法 : 完全一致
該当のソースコード
下記のコードはDictionaryを使用し、1つのKeyに対して1つのItemを持たせております。
Dim d As String Dim e As Worksheet Dim b As String Dim c As Worksheet Dim hsaisho As Long Dim isaigo As Long Dim dic_bpl As Dictionary Dim buff As Variant Dim name_b As Long Dim name_c As Long d = Application.GetOpenFilename(",*.xlsx") If d <> "False" Then With Workbooks.Open(d) Set e = .Worksheets("Sheet1") End With Else MsgBox "キャンセルしました" Exit Sub End If b = Application.GetOpenFilename(",*.XLSX") If b <> "False" Then With Workbooks.Open(b) Set c = .Worksheets("Sheet1") End With Else MsgBox "キャンセルしました" Exit Sub End If Set dic_bpl = New Dictionary Cells(1, 43) = "BPL" isaigo = e.Cells(Rows.Count, 3).End(xlUp).row hsaisho = c.Cells(Rows.Count, 43).End(xlUp).row + 1 hsaigo = c.Cells(Rows.Count, 8).End(xlUp).row For name_c = 1 To isaigo If dic_bpl.Exists(e.Cells(name_c, 3).Value) = False Then dic_bpl.Add Key:=CStr(e.Cells(name_c, 3).Value), Item:=e.Cells(name_c, 6).Value End If Next name_c buff = c.Range(c.Cells(1, 1), c.Cells(hsaigo, 43)).Value For name_b = hsaisho To hsaigo buff(name_b, 43) = WorksheetFunction.RoundUp(c.Cells(name_b, 11).Value / dic_bpl.Item(CStr(buff(name_b, 10))), 0) Next name_b c.Range(c.Cells(1, 1), c.Cells(hsaigo, 43)) = buff
試したこと
・set Dictionary名 = nothing にしてから set Dictionary名 = new Dictionary
回答1件
あなたの回答
tips
プレビュー