『範囲選択したセルを動かした時のシートイベントを知りたい』(TowNiow) セルを範囲選択した直後のActiveCellのアドレスは SelectionChangeイベントで取得できるのですが、 その状態でエンターキーやTabで選択されたセルを動かした場合には SelectionChangeイベントが発生しないためアドレスが取得できません。 この動作で発生するシートイベントはないでしょうか? 若しくは範囲セルを選択したままSelectionChangeイベントを 任意に発生させることは可能でしょうか? 宜しくご教示お願いします。 < 使用 Excel:Microsoft365、使用 OS:Windows10 > ---- 私の環境では発生しますけど。 Worksheet_SelectionChange (tkit) 2023/06/14(水) 11:40:51 ---- 同じく、こちらも...発生しますけど。 TowNiowsさんのマクロを提示してもらうのが一番良いのですが Selection Changeではワークシートにある選択範囲が変更されたときや、 指定した位置に選択範囲が移ったときなどにイベントを発生させることができます。 https://kabu-macro.com/detail.php?dir=word&dir2=a-z&uri=selectiion_change Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range Set rng = Range("A1:E10") If Not Application.Intersect(Target, rng) Is Nothing Then MsgBox ActiveCell.Address End If End Sub 上記マクロを対象のシートに設定後、もう一度 エンターキーや Tabキーを押してみてください。 ※A1 〜 E10 範囲でイベントが発生しませんか? (あみな) 2023/06/14(水) 11:43:50 ---- セル範囲を選択した状態でEnterやTabキーでカーソルが移動しても選択セル範囲の 移動がないのでSelectionChangeが発生しない。 例えばA1セルからC10セルを選択してカーソルがA1セルにあるときEnterやTabキーを押すとカーソルはA1セルの 右や下のセルに移動するが選択範囲はA1セルからC10セルのまま。 (ねむねむ) 2023/06/14(水) 11:49:38 ---- ああ...最初の選択セルを、ロックしたままの意ですか〜 (あみな) 2023/06/14(水) 11:55:43 ---- >セル範囲を選択した状態でEnterやTabキーでカーソルが移動しても選択セル範囲の >移動がないのでSelectionChangeが発生しない。 失礼しました。 再現方法が違っていましたね。 代替案は、Do Loop でActiveCellを監視するとか、 WinAPIでキー入力を監視するとか、ですかね。 (tkit) 2023/06/14(水) 12:12:00 ---- 検索で↓で参考になるかもです。 GetAsyncKeyState API VBA (あみな) 2023/06/14(水) 12:42:19 ---- そうしたイベントプロシージャはありませんが、 できたとして、それにはどんな作業(概要)をさせる予定なんでしょうか。 そもそもですけど、 選択範囲を固定したまま、そのなかのActiveCellを移動させる、 ということは、 ・限定した範囲に入力を予定しており、 ・マクロで各セルの入力値のチェックをしたい、 といったことでしょうか? それなら、発想を変えて、範囲が限定されるよう、 例えば「特定列のセルに来たら、次の行のA列に移動する」といったことを含めて SelectionChangeにさせたら良いのではないかと思います。はずしていたら御免なさいです。 (xyz) 2023/06/14(水) 12:45:43 ---- 皆さんコメントありがとうございます。 GetAsyncKeyState API VBAを検索してみます。 xyzさん> やりたいことは、範囲選択した中のドロップダウンリストを設定したセルがActivate?フォーカス?したら そのドロップダウンリストの表示幅を調整するってマクロです。 もともとはSelectionChangeイベントで単一のセルの選択に対して行っていたのですが、 幾つかのドロップダウンリストが隣接するセルなので、範囲選択する人もいるかなと思った次第です。 (自分が使用するには分かっていても自分以外が使用する可能性も考慮しています。) リストの幅調整はどこか別のセルの列幅を調整して入力規則を設定、が手順で 複数セルに対して複数の幅設定は出来ないみたいなので、 範囲選択した場合はそれぞれのセルがActivate?フォーカス?されたときに 実行しないとダメかなと思いました。 (TowNiow) 2023/06/14(水) 14:44:28 ---- 選択した範囲をFor Each でループして、 入力規則が設定されていたら、幅調整する、とか。 (tkit) 2023/06/14(水) 15:23:24 ---- tkitさん> それでは全ての入力規則のセルが最後に変更した幅になっちゃうんですよ。 なので範囲で選択しても、  ・入力規則ありか、なしかの判別  ・ありならリスト幅調整  ・セル入力する、または何もせずEnterかTabで次のセルへ移動 を繰り返す必要があるのです。 (TowNiow) 2023/06/14(水) 15:58:22 ---- ご返事ありがとうございました。 列幅調整だとすると、 その列の各セルがすべて収まるような列幅だと思うので、 tkitさんので問題ないのでは? 私ならChangeイベントプロシージャで対応するかな。 Target.EntireColumn.AutoFit のような。 (xyz) 2023/06/14(水) 16:41:26 ---- >リストの幅調整はどこか別のセルの列幅を調整して入力規則を設定、が手順で >複数セルに対して複数の幅設定は出来ないみたいなので、 ネット検索して↑のような事を紹介しているサイトを見て、試してみました。 バグのような動きなので、個人的には使いません。 基本は入力規則が設定されている列の幅で調整ではないでしょうか。 複数選択した入力規則の列幅の調整、で拘るのならば、 1.Worksheet_SelectionChangeイベント 2.モジュールレベル変数(Range型)に選択された入力規則設定セルを代入 3.選択された入力規則設定セルの内、最大幅に全て設定 4.Worksheet_SelectionChangeイベントの最初に変数がNothigでなければ、 規定の列幅にする。 くらいですかね。 >幾つかのドロップダウンリストが隣接するセルなので、 であれば、単独選択でTABキーで移動で十分で、範囲選択する意味が無いと 思います。 (tkit) 2023/06/15(木) 09:37:16 ---- >そのドロップダウンリストの表示幅を調整するってマクロです。 返事の「受け止め」が間違っていました。 ああ、入力する前に、入力規則の幅を変えるんですか。 じゃあ、Changeイベントは事後の話ですから、明後日の方向でしたね。 そもそもですけど、 「ドロップダウンリストの表示幅」はその列の幅に+αしたものでしょう? それ以外に表示幅が調整できるんですか? そんなに神経質に、セルの入力毎に、その都度調整する必要があるんですか。 入力する範囲は予め決まっているようですから、 予め、手作業で、その範囲の列幅を一度調整すれば済む話ではないんですか? 入力する前に表示幅が決められるなら、 一回ごとと言わず、事前にすべて調整すればよいだけでは? (xyz) 2023/06/15(木) 11:22:10 ---- >範囲選択する人もいるかなと思った次第です。 そういう人がいるのならなぜ選択するのか聞いてみてはどうですか。 (わからん) 2023/06/15(木) 11:44:33