前提・実現したいこと
VBA初心者です。初めて当サイトを利用します。
至らない部分もあるかと思いますが、お助けいただければ幸いです。
Vlookupの代替として、Dictionaryを使用したいです。
セル参照回数を減らす為に配列へ格納し、配列から一括入力する際にエラーが出てしまいます。
実行時エラー'1004
アプリケーション定義またはオブジェクト定義のエラー
検索結果の出力先 : Book_bのSheet_cのAQ列
検索値 : Book_bのSheet_cのJ列
検索範囲 : Book_dのSheet_eのC~H列 '検索値はC列です
列番号 : 6
検索方法 : 完全一致
補足
・配列からの一括入力時、途中までは正しく入力されます。
・エラーで止まった検索値は、検索範囲に含まれている値です。
発生している問題・エラーメッセージ
格納した配列からの一括入力時にエラー
c.Range(c.Cells(1, 1), c.Cells(hsaigo, 43)) = buff
実行時エラー'1004
アプリケーション定義またはオブジェクト定義のエラー
該当のソースコード
Dim b , d As String
Dim c , e As Worksheet
Dim hsaisho, isaigo As Long
Dim dir As Dictionary
Dim buff As Variant
Dim name_b, name_c As Long
d = Application.GetOpenFilename(",*.xlsx") d = Mid(d, InStrRev(d, "\") + 1) If b <> "False" Then Workbooks.Open d Set e = Workbooks(d).Worksheets("Sheet1") Else MsgBox "キャンセルしました" End If b = Application.GetOpenFilename(",*.XLSX") b = Mid(b, InStrRev(b, "\") + 1) If b <> "False" Then Workbooks.Open b Set c = Workbooks(b).Worksheets("Sheet1") Else MsgBox "キャンセルしました" End If Set dir = New Dictionary 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 MsgBox isaigo MsgBox hsaigo For name_c = 4 To isaigo If dir.Exists(e.Cells(name_c, 3).Value) = False Then dir.Add Key:=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)) For name_b = hsaisho To hsaigo buff(name_b, 43) = dir.Item(CStr(buff(name_b, 10))) Next name_b '▼配列からまとめて入力 c.Range(c.Cells(1, 1), c.Cells(hsaigo, 43)) = buff
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/06 04:10