いつもお世話になっております。
changeイベントを勉強し始めたばかりで拙い質問とかもしれませんが、よろしくお願いいたします。
changeイベントを使うことで、vlookupでできるような、あるIDを打ち込まれたらそのIDを参照して名前などの値を出力することを考えています。
changeイベントですと別ブックを参照する際に、効率的な方法はございますでしょうか。
データリストはchangeイベントが発火するブックには無く、別ブックにまとめられて管理されています。
changeイベントが発火するブックと同一のブックにデータリストがあるという状況でしたら、今の私であってもvlookupのように入力したIDに従ったデータを引っ張ることができます。
しかしデータリストが別ブックにあるとなりますと、changeイベントが発火するたびに別ブックのデータリストを開いて、閉じてというのを繰り返す必要が出てきてしまい、動作が重くなってしまうということが起きました。
changeイベントを使い、vlookupを使わない理由は、関数ですと常にセットし置かねばならず、ファイルが重くなってしまうのと、実際どの行まで関数をセットし置くのかという問題があったからです。
以下に私が書いたサンプルコードを載せさて頂きます。
このサンプルコードは別ブックのデータリストを開いて、閉じてというコードでは無く、同一ブックにデータリストがあるとした時のコードとなりますが、
私の行いたいことが伝わりましたら幸いです。
VBA
1Private Sub Worksheet_Change(ByVal Target As Range) 2 3Dim foundId As Range 4Dim foundName As Range 5Dim foundAddress As Range 6'sheet17がデータリストになります。 7Set foundId = Sheet17.Cells.Find(what:="id", lookat:=xlWhole) 8Set foundName = Sheet17.Cells.Find(what:="name", lookat:=xlWhole) 9Set foundAddress = Sheet17.Cells.Find(what:="address", lookat:=xlWhole) 10 11'targetがA列でさらにデータ型が数値だった時 12If (VarType(Target.Value) = 5 And Target.column = 1) Then 13 Dim foundInputId As Range 14 Set foundInputId = Sheet17.Cells.Find(what:=Target.Value, lookat:=xlWhole) 15 Target.Offset(, 1).Value = Sheet17.Cells(foundInputId.Row, foundName.column).Value 16 Target.Offset(, 1).Value = Sheet17.Cells(foundInputId.Row, foundAddress.column).Value 17End If 18 19End Sub
上記のコードではsheet17がデータリストですが、このsheet17のデータリストが別ブックにある場合にどうしたらよいかということになります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/31 12:14
2021/03/31 13:22 編集
2021/03/31 13:47 編集
2021/03/31 14:18