- ベストアンサー
エクセル2013VBAのChangeイベントでの問題解決方法
- エクセル2013でのVBAプログラムでChangeイベントを使用する際に、隣の列を選択している場合に問題が発生することがあります。この問題を解決するために、特定の入力範囲に対して条件分岐を行い、正しく処理を行うようにプログラムを修正することが必要です。
- 計画のファイルでは、A列に品物、B列には品物に対応する付属品が入力されています。しかし、隣の列を選択してコピー&ペーストを行った場合に、付属品が正しく表示されない問題があります。これは、Changeイベントが正しく発生しないためです。
- 上記の問題を解決するために、VBAプログラムを修正します。修正後のプログラムでは、Changeイベントが発生したセルが特定の入力範囲に含まれる場合にのみ処理を行い、それ以外の場合は処理をスキップします。これにより、隣の列を選択した場合には問題が発生せず、正しく付属品が表示されるようになります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>B列とC列をまとめて選択コピーして貼り付けると、付属Aと出るべきところが何も起こりません イベントプロシジャが想定している以外の使い方をしてると(イベントプロシジャの設計想定にヌケがあると)、こういう不具合が起こります。 private sub Worksheet_Change(byval Target as excel.range) dim h as range on error resume next for each h in application.intersect(target, range("C2:C25,G2:G25")) application.enableevents = false h.offset(1) = application.worksheetfunction.vlookup(h.value, worksheets("テーブル").range("B:C"), 2, false) application.enableevents = true next end sub >B列は入力規則のリストより、=INDIRECT(B2)などといれて、 >A列の入力規則に対して品物Aや品物B・・・などを選択します。選択するようにしています。 こんな具合に間違った事がご相談に書かれているので、ご相談で書かれてる内容のどれがホントでどれが間違いなのか、全て疑って解明してか無きゃならないのがとっても大変です。 >物Aを選んだら、その下の行に付属Aとか自動ででるようにしたいと思っています。 >(列は増やしたくありません) 入力欄C2:C25,G2:G25には入力規則で許可している「品物ABC」だけじゃなく、入力規則では許可していない「付属品ABA」もまたC2:C25,G2:G25の中に入力したいと、一種矛盾した説明になってます。でもまぁ、この部分はホントであると(付属品ABAも入力できるよう、入力規則を設定しているとの説明がヌケていると)解釈します。
お礼
「品物ABC」をリストから選べますが、「付属品ABA」も入力できるよう、入力規則を設定できています。 抜け、もれ、間違いありで余計なことを考えさせてすいません。 このコードでうまくいきました。一応色々な使い方を適当に試しましたが、問題は発生していません。 どうもありがとうございました。助かりました。