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

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

カーソルの移動順をリセットしたい

エクセルで納品書を作成しています。 エンター又はタブを押したときのカーソルの移動方向は右で、下記の入力項目のみセルの書式設定でロックを解除しシートの保護をしています。 入力項目の入力順は ・発送先名 ・発送先敬称 ・発送元名 ・商品名 ・型番 ・数量 ・備考 で、商品名から備考までは16行あるので繰り返しです。 商品名と型番にはマクロで入力規則(リスト)を設定しています。 内容を新規で入力するためのコマンドボタンを設置していて、このボタンを押すと入力項目の内容がクリアされカーソルは発送先名に移動するので、エンター又はタブを押すと上記の入力順にカーソルが移動します。 ですが、商品名から型番へカーソルを進め、カーソルが型番にある状態で新規入力のコマンドボタンを押すと、カーソルは発送先名に移動しますがエンター又はタブを押すと、新規入力のコマンドボタンを押す直前の型番のセルにカーソルが移動してしまいます。 何故直前のセルにカーソルが移動するのかも不明で理由があれば知りたいのですが、タイトルのとおりカーソルの移動順をリセットする方法があれば教えて頂きたいです。

  • tdosj
  • お礼率22% (35/153)

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答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% (454/690)
回答No.10

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

tdosj
質問者

補足

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

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.9

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

tdosj
質問者

補足

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

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.8

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

tdosj
質問者

補足

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

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.7

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

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.6

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

tdosj
質問者

補足

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

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.5

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

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答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/17068)
回答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/557)
回答No.2

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

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.1

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

tdosj
質問者

補足

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

関連するQ&A

  • VBでのカーソル移動

    こんばんは。 教えてください。 入力可能なセルが2個だけのエクセルの表があります。 C6には「年」、E6「日付」が入ります。 それ以外のセルに触ると「ここは入力できません」と 表示が出て、C6にカーソルが戻ります。 VBにて作成してあります。 ここで、追加で、 C6のセルに入力後、「enter」を押すとE6にカーソルが移動 E6のセルに入力後、「enter」を押すとC6にカーソルが移動 が出来るようにしたいのですが、どのように記入したらいいか 分かりません。 どなたか教えてください。

  • エクセル2003のカーソルの移動について

    エクセル2003で一部のセルを保護しました。入力できる(保護していない)セルのみ順にカーソルを移動たいのですが、どうすればよいでしょうか?

  • マクロでのカーソル移動

    ブック内の全シートを対象としたマクロで、たとえば (A1)セルに入力後Enterで(C1)セルにカーソルを移動させるにはどのように記述したらよいでしょうか。よろしくお願いします。

  • カーソルを移動させない

    エクセルで、あるソフトを作りました。 利用者の入力箇所は一箇所だけです。 普通、入力してエンターを押すと、カーソルは下なり横なりに移動しますね。これを移動させない方法はあるのでしょうか。 「オプション」で、「編集」-「入力後にセルを移動する」のチェックをはずしても、それはこのパソコンだけの設定でしょう?他のパソコンでも移動できない方法を教えていただけないでしょうか。 もちろんシートの保護はしてありますから、移動しても不具合はないのですが、入力しなおすたびに、カーソルを元に戻さなければならないと言う「邪魔臭さ」だけの話です。

  • 簡単なカーソルの移動できますか

    カーソルの簡単な移動に関して教えてください。 仮に”A1”に入力後”C1”に入力その後”A3”に入力する過程が各シート毎にあるとします。 毎回同じセルに入力のために”ennter”を押しながらカーソルを移動しています。 何か、セルに入力後、カーソルが次のセルに移動する手っ取り早い方法はありますか? 少しでも仕事を簡素化しようと考えているため、皆さんの力をお借りしたいのです。

  • エクセルのカーソル移動について

    連続したデータを入力している際、Enterキーを押すと、 カーソルが次のデータの先頭のセルへ、移動するようにすることは可能でしょうか? 右に移動とか、下に移動は理解しています。 横に長いシートでの入力しているので、一番最後に来たときにEnterキーで、A列に飛んでくれるような設定が出来ればと思い、質問させていただいております。 宜しくお願い致します。

  • Microsoft excel 2003 のカーソルの移動について

    入力後のカーソル移動方向の選択に、 ツール → オプション → 編集タブ → 方向の選択 で行なっているのですが、これだとどのセルを開いても選択した方向にカーソルが動きます。 開いたセルごとにカーソルの動く方向を変えたいのですが、方法・設定のしかたはありませんか?

  • Excelのカーソル移動について

    お世話になります。 Excel2010を使用しています。 表を作成し、カーソルは右に移動するように設定しています。 表はA~F列まであります。A列はNo.で既に入力しています。B列から入力をしてE列で Enterを押すと下の段のB列にカーソルが来るように設定する方法を教えて下さい。 (F列は備考欄で必要に応じて入力します) よろしくお願いいたします。

  • カーソルの移動制限

    ウィンドウズXPでエクセル2003を使用し切手受払帳を作成しています。A1は頭文字(半角カタカナ)、B1は取引先名、C1とD1はセルを結合し日付、E1は10円、F1は20円と続きN1ハガキまでタイトルを入力しています。A2,B2と入力しC2に数字を入力しした後Enterを押すと自動的にE2にカーソルを移動するようにしたいのです。D2には日と入力しています。またE2~N2まで入力すると自動的にA3にカーソルが移動するようにもしたい。さらに画面下の行(例えば20行~40行)を書式→行→表示しないで表示させないようにしたいので、カーソルを移動させたい範囲のセルのロックをはずし、ツ-ル→保護→シートの保護でカーソルの移動を制限する方法は使用できないのです。わかりにくい説明で申し訳ありませんが教えてください。

  • エクセル縦書きでのカーソル移動方向の変更

    Excel2002です 文字配置の方向を縦書きにして、Alt + Enterでセル内改行をすると カーソルが左に移動しますが、これを右に移動させる事は 出来ないでしょうか? 左から右に向かって文字を入力していきたいという事です 横方向の場合、Alt + Enterでセル内改行をすると下に改行するのを 上に改行したいということと同意になるのかもしれませんが・・・ 過去ログ他いろいろ検索したのですが、見つけられませんでした 現在、カット&ペーストで文字順をいれかえてます(^^ゞ

専門家に質問してみよう