ブックモジュールのOpenイベントで特定シートの表をdictionaryに登録し、
その登録したdictionaryをシートオブジェクトのChangeイベントで、VLOOKUP関数のようにしようしたいです。
しかし、Openイベントで特定シートの表をdictionaryに登録するまでは問題なくできたのですが、
そのdictionaryをいざChangeイベントの方で使用しようと思うと、どうしてもdictionaryの変数定義がされていない状態になってしまいました。
以下にサンプルコードを記載致します。
VBA
1'Openイベントのコードでございます。 2Private Sub Workbook_Open() 3 4Dim NAMEdictionary As Object 5Set NAMEdictionary = CreateObject("Scripting.Dictionary") 6 7Dim foundCd As Range 8Set foundCd = Cells.Find(what:="コード", lookat:=xlWhole) 9 10Dim i As Long 11For i = foundCd.Row + 1 To Cells(Rows.Count, foundCd.column).End(xlUp).Row 12' dictionaryにコードとそれに対応する名前を登録。 13 NAMEdictionary.Add Cells(i, foundCd.column).Value, Cells(i, foundCd.column + 1).Value 14Next i 15 16Debug.Print NAMEdictionary(6049) 17 18End Sub
VBA
1'Changeイベントのコードでございます。 2Private Sub Worksheet_Change(ByVal Target As Range) 3 4'下記の「NAMEdictionary」の部分でエラーが出てしまいます。 5Cells(Target.Row, Target.column + 1) = NAMEdictionary(Target.Value) 6 7End Sub
Excelだけを見ると、行いたいことはVLOOKUP関数を使った場合とほとんど同じなのですが、
VLOOKUP関数を使わない理由としては、関数ですと常にセットし置かねばならず、ファイルが重くなってしまうのと、実際どの行まで関数をセットし置くのかという問題があったからです。
最後に表の画像も掲載致しましたので、合わせて参考にして頂けますと幸いです。
回答1件
あなたの回答
tips
プレビュー