Excel2013 VBA でENTER後のセルの移動を右方向に設定しているのに,左斜め上のセルに移動してしまう。

ご教授いただければ幸いです。

Excel 2013 VBA にて,ワークシート上でデータ入力後のセルを右方向に設定しているのに,左斜め上を選択してしまいます。

状況は次の通りです。

     A   B   C  D 列があり,入力は B20,C20に入力し,次はB21,C21,次はB22,C22 ... というものです。A列に値がない時点で終了させます。

20    

21

22

23

24

コーディングの概要は次の通りです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    ...

    Application.MoveAfterReturnDirection = xlToRight   'セル右方向に移動

    Dim myRow As Integer : myRow = ActiveCell.Row
    Dim myCol As Integer : myCol = ActiveCell.Column

    if myCol=4 then  ......................................................................'C列の入力が終わり,D列を選択した時

        if Cells(myRow+1,1).Value ="" then ............................'次の入力行のA列には値がないので終了のメッセージ

            MsgBox "入力終了です。" 

        End If

        Cells(myRow+1,2).Select '....................................................'次の入力行のA列に値がある場合は,次の入力行のB列を選択

 ELSE

                                                '....................................................'B,C列が選択されている時 何もせず右に移動むさせる

    End If

上記のコーディングで,はじめの行は問題なくC列に入力後にD列に移動して次の行のB列に移動するのですが,ここに値を入れて

ENTERすると,一つ上の行のC列にセルが移動(戻ってしまう)してしまいます。

解決策をよろしくお願いいたします。

回答
回答

確かに、DとEが結合されてると変な動きになりますね。

ちょっとバグくさいですが、これを本気で追及する気にはなりません。

(個人的にはSelectionChangeなんてイベントは絶対に使いませんから興味がないと言うことです)

SlectionChangeと言うイベントは非常に扱いづらい代物で、例えば、コードの中で

 Cells(myRow + 1, 2).Select

これをやった途端にまたイベントが発生しているのにお気づきでしょうか?

多分、イベントハンドラを抜けた途端に、この再度イベントハンドラに飛んでるはずです。

最初、この辺りが原因かと思ったのですが、そうではないようで、そういう前提でいくつか対処を試してみましたが、空振りでした。

という事で対象療法のアドバイスをします。

①一番良いのはD,Eの結合を解除

②結合解除ができないなら、結合セルの前に一列ダミーの列を置き、幅を限りなく狭くして事実上見えなくする。

(非表示で済めが一番良いのですが、非表示にしてしまうと、選択されなくなるため、D列の判定に引っかからなくなる)

あまり良い方法ではありませんが、参考まで。

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

 
 

質問情報


最終更新日: 2021年10月06日 表示数 201 適用先: