• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:カーソルの移動順をリセットしたい)

カーソルの移動順をリセットする方法

このQ&Aのポイント
  • エクセルで納品書を作成していますが、新規入力のコマンドボタンを押すと、カーソルが直前のセルに移動してしまいます。カーソルの移動順をリセットする方法を知りたいです。
  • 納品書作成時に新規入力のコマンドボタンを押すと、カーソルが直前のセルに移動してしまいます。カーソルの移動順をリセットする方法を教えてください。
  • エクセルの納品書作成で新規入力のコマンドボタンを押すと、カーソルが直前のセルに移動してしまいます。カーソルの移動順をリセットする方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.11

エクセルのバグまたは、制限事項と推測 します。 以下、再現手順と考察です。 ■前準備 ・セルの移動方向を「下」に設定 ・添付画像のシートを用意   (セルに埋まった数値たちは埋める必要はありません。    背景色、罫線も不要です。それぞれ、見やすさ、説明のしやすさのためのものです。) ・D6:E6、E7:F7を結合 ・添付のマクロを配置 ・D4:F8のロックを解除 ・シートを保護(ロックされていないセル範囲の選択のみ許可) ■再現 ・Buttom1を押下 ・D4セルが選択状態になる。 ・エンターキーを押していくと   1,2,3,4,5,1,2,3,4,5...と移動する。 ・D6に移動したのち、 ・Buttom1を押下 ・D4セルが選択状態になる。 ・エンターキーを押していくと   1,2',3',4',5',1,2,3,4,5,1,2,3,4,5,...と移動する。 ・F8に移動したのち、 ・Buttom1を押下 ・D4セルが選択状態になる。 ・エンターキーを押していくと   1,2'',3'',4'',5'',1,2,3,4,5,1,2,3,4,5,...と移動する。 ■考察 回避するには、どうやら、Buttom1を押下後 D4セルをマウスでクリックする必要があるようです。 この仮説が正しいようであれば、 私だったら、 ・結合セルを使わないレイアウトに変更する ・Buttom1を押下したときに、  移動したい範囲を移動したい順番で定義する  例えば   Range("D5,D6:E6,E7:F7,F8,D4").Select   Range("D4").Activate   といったコード ・入力をする画面をシートではなくformにする を考えます。

tdosj
質問者

お礼

ありがとうございます。 まさしくこれです。 結合セルが悪さをしているようですね。 納品書のレイアウト上どうしようもないので、解決策の2番目を試してみましたがうまく来ませんでした。 残るフォームを検討してみます。 しかし、とんちんかんなアドバイスには参りました。 こちらから回答者は選べないのでどうしようもありません。

すると、全ての回答が全文表示されます。

その他の回答 (10)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.10

エンターキーやタブを操作したときに フォーカルのあるセルがどのように動くかは、 周知のとおり、 オプションの詳細で設定した内容に依存します。 ただし、これはあくまで、予め複数セルの範囲を選択しない場合の話です。 今回の課題では、詳しい説明がないので定かではありませんが、 >内容を新規で入力するためのコマンドボタンを設置していて というボタンが押されたときに ・入力対象セルたちに対して ClearContentsを実行し ・入力対象セルたち.select を実行しているものと思います。 この後者に使っているコード これを明らかにすると原因究明ができるではないかと思います。 つまり、どのような順番でセル範囲を選択しているのかということです。 あるいは、入力対象セルたちの範囲名を動的に定義し 『入力対象セルたちの範囲名』.select を実行しているのかもしれません。

tdosj
質問者

補足

ありがとうございます。 >つまり、どのような順番でセル範囲を選択しているのかということです。 これは、マクロ等で意図的にセル又はセル範囲を選択しているかを聞かれているのかと思うのですが、新規入力するためのコマンドボタンを押した時に発送先名のセルをselectする以外はやっていません。 質問文が分かりずらいのかと思いましたので、おかしい時の挙動を下記に記します。 (1)商品名へカーソルを移動しエンター又はタブで型番へカーソルを移動させる。 (2)新規入力のコマンドボタンを押す。(カーソルは発送先名へ移動する) (3)エンター又はタブを押す。 (4)カーソルが(1)の型番へ移動してしまう。 先にも書きましたが、この(1)~(4)の間でマクロ等で意図的にセルをselectしているのは新規入力のコマンドボタンを押した時に発送先名をselectしている以外はありません。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.9

> これは、もしカーソルが次に移動するのがどこなのかを覚えている箇所がありそれをリセットできれば、上記は無視できると思います。 他にも原因になることがあります。なので、ここを追求しないと駄目なのではないですか。その動作がイベントの最優先順位にあるかもしれませんし、これを放置したままどのように解決しようと考えてるのでしょう? > これはVBAがどうとかいう問題(Application.MoveAfterReturn等をしていなければ)ではなく、エクセルの基本的な動きです。 VBAでカーソルをどこにでも自由に移動させることができます。 どちらにしても、どのようなコードが存在するのか不明ですので、これ以上考えようがありませんし、エクセルのカーソル移動の講釈を聞きたいわけでもありません。

tdosj
質問者

補足

ありがとうございました。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.8

ちなみに 新規入力のコマンドボタンのコードに Application.EnableEvents = False を追加したらどうなりますか。

tdosj
質問者

補足

ありがとうございます。 こちらでまとめて回答させていただきます。 >Application.MoveAfterReturn = True >Application.MoveAfterReturnDirection = xlDown >にしたいわけではなく >> エンター又はタブを押すと上記の入力順にカーソルが移動します。 >にしたいわけですよね。 これはそのとおりです。 >> エンター又はタブを押すと、新規入力のコマンドボタンを押す直前の型番のセルにカーソルが移動 >を改善しないと駄目なんじゃないですか。 これは、もしカーソルが次に移動するのがどこなのかを覚えている箇所がありそれをリセットできれば、上記は無視できると思います。 年のため追記しておきます。 入力項目の配置についてですが、発送先名にカーソルがあればあとはエンター又はタブを押せば質問に書いている順番でカーソルが移動する配置です。 これはVBAがどうとかいう問題(Application.MoveAfterReturn等をしていなければ)ではなく、エクセルの基本的な動きです。 分かっていただけると思いますが、カーソルの移動方向が右の場合、例えばA1~E2を選択した時、カーソルは全てのセルを移動するように左上から右下に向かって進みます。 >Application.EnableEvents = False 何も変化ありません。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.7

> 本来の目的はカーソルの移動順をリセットする方法 というのが Application.MoveAfterReturn = True Application.MoveAfterReturnDirection = xlDown にしたいわけではなく > エンター又はタブを押すと上記の入力順にカーソルが移動します。 にしたいわけですよね。 でしたら > エンター又はタブを押すと、新規入力のコマンドボタンを押す直前の型番のセルにカーソルが移動 を改善しないと駄目なんじゃないですか。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.6

> 失礼しました、コマンドボタンを押した時の処理については単に入力漏れで、カーソルを発送先名を入力するセルに移動しています。 どちらにしても、他のコードや設定が殆ど不明なので、VBAとしてはカレントプロジェクトでSelectやActivateを検索してそれらしいものが無いか探してみたらいかがでしょう。 また、他のシートや他のブックでNo.4のコードを実行して違いが出るかどうかも試してみてもいいかもしれません。

tdosj
質問者

補足

ありがとうございます。 何故カーソルが型番のセルへ移動するのかも知りたいところなのですが、本来の目的はカーソルの移動順をリセットする方法が知りたいのです。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.5

No.4の補足です。 あと Worksheet_SelectionChange のようなイベントなどや何か他のコードでカーソル移動をしていないか確認してみてはいかがですか。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.4

> ボタンは入力するセルの内容をクリアしているだけです。 でしたら、 > このボタンを押すと入力項目の内容がクリアされカーソルは発送先名に移動する のように発送先名に移動する方がおかしいですよね。 凄く単純なコードをボタンに設定してテストしてみましたがそのようにはなりませんでした カーソルはRange("A2").SelectがあるのでA2に移動しますがなければ型番のセルにとどまります。 Sub Test() Worksheets("Sheet2").Unprotect '今設定されている入力規則を削除しておく Range("G2:G17").Validation.Delete Range("H2:H17").Validation.Delete '入力規則を設定 Range("G2:G17").Validation.Add Type:=xlValidateList, Formula1:="A,B,C" Range("H2:H17").Validation.Add Type:=xlValidateList, Formula1:="1,2,3" ' Range("A2:J17").ClearContents Range("A2").Select Sheets("Sheet2").Protect End Sub

tdosj
質問者

補足

ありがとうございます。 失礼しました、コマンドボタンを押した時の処理については単に入力漏れで、カーソルを発送先名を入力するセルに移動しています。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

・普通はユーザーフォーム(ただし、VBAを使う可能性大)に、入力用のテキストボックスを並べて、その並べ順を、入力帳票の項目設定順序と合すとか、タブオーダーを設定するとかの方法を使うかと思う。 ・WEBで「エクセル 入力セル 移動設定」で照会しても、カーソルのMoveAfterRetunに関するものや、名前定義を利用する方法が説明される。 ・入力規則にこの順序設定があればよいが。???。 ーー ーー そこでVBAを使っても、コード行数も少なくて出来るので 、参考に記してみる。 質問を我流に解釈して、入力帳票を見ながら入力するとして、入力帳票の設計項目の、上から、左から、に従い、入力セルを選択するカーソルを自動で動かしたい、と解釈した。 VBAでユーザーフォrムを設計する他の方法以外に下記の思い付きを挙げてみる。 取り急ぎなので、終了、訂正、クリアなどの機能を組み込む、必要があるが、略。アイデアだけ。 ーー Sheet1とSheet2を使う。Sheet1がデータ入力シート。Sheet2がその入力データを整理したシート。 Sheet1は言わば、入力テンプレートのような役割。受付ガイダンスの役割。入力原書に似せて左隣セルに項目見出しでもあればよい。 項目樹陰序列は、シートへの入力順とした。任意指定に改良はできるが略。 Sheet1の使わないセル範囲として、G1:H3に、「次に行くセル」の対応表として G列  H列 $B$3 $E$5 $E$5 $C$6 $C$6 $B$3 を設定する。G列の入力後はH列で指定した番地セルにカーソルが飛ぶ。原書の最終項目入力後は最初の$B$3に戻る。 ーー Sheet1のシートモジュールにおいて、_Change(イベントとして Private Sub Worksheet_Change(ByVal Target As Range) Static i Set r = Range("G1:G9").Find(Target.Address) s = Range("H" & r.Row) '------- Select Case Target.Address Case "$B$3" Worksheets("Sheet2").Cells(i + 1, "A") = Target.Value Case "$E$5" Worksheets("Sheet2").Cells(i + 1, "B") = Target.Value Case "$C$6" Worksheets("Sheet2").Cells(i + 1, "C") = Target.Value i = i + 1 End Select '---- Range(s).Select End Sub ーーー この例では、 Sheet1のB3セルを選択してデータを1項目入力して、エンタキーを押すと、E5 セルに移動する。1入力シートの入力で、B3ーー>E5ーー>C6ーー>B3と自動でカーソル位置が変わる。 簡単な常識的確認をして、データを打ち込むに注力するだけでよい。 ーー 結果は、 Sheet2は、A1:C2に、2回分で A列 B列 C列 セルは 11 12 13 21 22 23 のように出来上がる。 === 別案として https://www.tipsfound.com/excel/01003 指定のセルへ移動する Enter キーで指定した順番通りに移動する方法を紹介します。 Ctrl キーを押しながら移動させたい [セル] をクリックしていきます ・・ のような仕組みを、VBA化できるかも。

すると、全ての回答が全文表示されます。
  • cicibo
  • ベストアンサー率34% (190/558)
回答No.2

>カーソルの移動順をリセットする方法 「ファイル」タブ 「オプション」 「Excelのオプション」の「詳細設定」 「Enterキーを押した後にセルを移動する」 の箇所を確認されてみてください。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.1

入力規則(リスト)やボタンがどのようなコードで動作しているのか不明なので考えようが無いと思いますよ。

tdosj
質問者

補足

ありがとうございます。 コードを載せることはできないのですが、入力規則で行っていることと言えば「vba varidetion」で検索すると出てくるよくあるコードですし、ボタンは入力するセルの内容をクリアしているだけです。 別段、カーソルの移動順を制御するようなことはしていないですが、何故か型番にカーソルがある場合だけに起きる現象です。

すると、全ての回答が全文表示されます。

関連するQ&A