• ベストアンサー

ExcelでEnterを押したあとの移動先について

A5:H(仮に)500の表があります。 現在、(例)A6→B6→C…と横方向に入力し、H6を入力したあとEnterの押打でA7にもどり、次行のA7→B7→C…の順に入力しています。 もどる操作はAlt+F11で貼り付けた下記のVBAがやっています。 これまでは、表A5:H500の空行(データが入ってない最下行)をアクティブにしたあと、例の順にデータを入れていくだけだったのですが、形式を変えたため入力箇所が増え、A2とA3を入力してから空行に入力する手順になりました。 希望は、A3を入力してEnterを押打したあと、次に入力するセル=表の最下行のA列のセルに移動していたいのですが、それにはどうのようなVBAがよいのでしょうか。 (以下は、考えるヒントになればと思い書き加えます。) この表はVLOOKUPで使われるデータが入っており、A5以下のA列はひとつだけ"あ"が入り、残りは空欄です。 検索値は都合で"あ"という文字にしました。 1行(1レコード)入力して印刷、また1行入力して印刷、また…の繰りかえしで、たいてい入力済みの最下行のA列が"あ"になっています。 この"あ"が新規で入れる行(データが入ってない最下行)のひとつ前にあることが多いので、A3を入力してEnterを押打したら"あ"の下に移動することを希望しますが、無理なら"あ"に移動したあと手動の矢印キーで↓を押しますので、よいお知恵をよろしくお願いします。 (下記の「H列からA列にもどるVBA」もこのサイト内を検索して見つけてきたものです。) ------‐H列からA列にもどるVBA------‐ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 9 Then Cells(Target.Row + 1, 1).Select End If End Sub

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 本当に、おっしゃるように作ってみましたが・・・・・・ ただ、なんとなく、しっくりとしていませんね。私の言葉でいうと、これはロジカルではないのです。理由は、Range("A2:B2")の2行目の下、3行目・4行目の処置が分りませんし、C2:H2 の扱いが分りません。 取り付け方は、 シートモジュール(お使いのワークシートの下のシート名のタブを右クリックして、コードの表示で以下を貼り付けます。閉じるときは、Alt + Q です。) 以下のマクロは、シートを一旦、「非アクティブ(別のシートを選択して)」にして、ふたたび、「アクティブ(シートを選択する)」にすると、イベント・マクロが設定されます。このマクロは、値を入れなくてもEnter キーを入れた時にのみに反応します。 '-------------------------------------------------- Private Sub Worksheet_Activate() 'シートをアクティブにすると設定されます。  Application.OnKey "{Enter}", Me.Name & ".JumpingMacro"  Application.OnKey "~", Me.Name & ".JumpingMacro"   End Sub Private Sub Worksheet_DeActivate() '解除  Application.OnKey "{Enter}"  Application.OnKey "~" End Sub Sub JumpingMacro()   If Not Intersect(ActiveCell, Range("A2:B2")) Is Nothing Then      Cells(65536, 1).End(xlUp).Offset(1).Select   ElseIf Not Intersect(ActiveCell, Range("A5:H500")) Is Nothing And _      ActiveCell.Column = 8 Then      Cells(ActiveCell.Row + 1, 1).Select   Else    ActiveCell.Offset(, 1).Select   End If End Sub

situmon10hanako
質問者

お礼

ご回答の一部を下記のように変えて希望の形になりました。 A2=伝票番号 B2=日付 B2は同じ日が続くこともあり、入力せずEnterだけでA列最終セルに移動できて手間が省けました。 H列からA列にもどったとき、いまの入力行をもう一度Enterでチェックしたいので、次行でなく同じ行にもどるようにしました。 VBAはここまでですが、操作は1行入力してチェック後に印刷を行い、A2セルにもどるようになっています。 Sub JumpingMacro() If Not Intersect(ActiveCell, Range("$B$2")) Is Nothing Then Cells(65536, 1).End(xlUp).Offset(1).Select ElseIf Not Intersect(ActiveCell, Range("A5:H65536")) Is Nothing And _ ActiveCell.Column = 8 Then Cells(ActiveCell.Row, 1).Select Else ActiveCell.Offset(, 1).Select End If End Sub Wendy02さんだけでなく本人も作り方(組み方?)からしてスマートでないと感じています。 (ご回答は希望と合ったものを教えていただけたので◎です。) これでいっぱいいっぱいなのです…。 今回もありがとうございました。

situmon10hanako
質問者

補足

Wendy02さん、長いだけで伝わらない文面から足りないものをさがして考えてくださりありがとうございます。 >Range("A2:B2")の2行目の下、3行目・4行目の処置が分りませんし、C2:H2 の扱いが分りません。 説明不足でした。 3・4行目とC2:H2は使っていません。空きの行です。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

例えばSheet1のChangeイベントに(Selection_Changeではなく) B2でENTERでデータを入れると、A列最下行の次行に飛ぶ。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Range("A65536").End(xlUp).Offset(1, 0).Select End If End Sub

situmon10hanako
質問者

お礼

imogasiさんのご回答のように飛びたかったのです。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 もうちょっと、分りやすく、きちんと条件がまとまらないのでしょうか? 私は、前回、別なところでもそうだったのですが、どうも頭が悪いせいなのでしょうか、あらゆることを想定して考えてしまいますので、こちらが勝手に決めてマクロを書くことが出来ません。一度、作ってみたけれども、何か複雑そうなので掲示はやめました。  B列でEnter を押せば、A列のデータの最終セルに飛ぶ   (以上の条件は、B2:B500 )  H列でEnter を押せば、A列の同じ行に飛ぶ   (以上の条件は、A5:H500) となのですか?何か、ひじょうにやこしい注文ですね。なぜ、統一できないのでしょうか?それから、たぶん、Worksheet_SelectionChange では、うまくいかないはずです。

situmon10hanako
質問者

補足

早速のご回答ありがとうございます。 Wendy02さんにように表現すればわかりやすいですね。 B列でEnterを押せばA列のデータの最終セルに飛ぶ  (以上の条件は、A2:B2 ) H列でEnterを押せばA列の同じ行に飛ぶ  (以上の条件は、A5:H500) 希望は上記になります。

noname#187541
noname#187541
回答No.1

こんばんは。 A列の最終セルはEndプロパティを使えば解ります。 Range("A65536").End(xlUp) で取得できます。 で、このセルの一つ下をアクティブにすればいいでしょう。 Range("A65536").End(xlUp).Offset(1).Select これでどうでしょうか。

situmon10hanako
質問者

お礼

M-SOFTさん、ご回答ありがとうございます。 後の回答で希望に合うものがありました。 ありがとうございました。

situmon10hanako
質問者

補足

早速のご回答ありがとうございます。 訂正があります。 形式を変えたため入力箇所が増え、A2とA3を入力してから空行に入力する手順の「A3」は「B2」が正しいです。すみません。 以下、すべて「A3」は「B2」の間違いです。 さて、上記はどこに入れたらよいのでしょう。(実はVBAの知識がないのです。) こんな感じでつけたし↓動かしてみたのですが、これだとオシイ!のです。 B2を入力したあとH2までEnterを押打しないとA列の最終行まで行かないのです。 どこをどうしていいのかよくわからないのです。 B2を入力したあとすぐA列の最終行まで移動できて、尚且つ、A5:H500のなかではH列を入力後にEnterを押打するといま入力した行のA列にもどりたいのです。 そんなものは無理でしょうか…。 --------つけたしたあとのVBA-------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 9 Then Cells(Target.Row + 1, 1).Select Range("A65536").End(xlUp).Offset(1).Select End If End Sub

関連するQ&A

  • 列の同文字を続けて下行へ移動

    表-1A列に同文字"あ"があれば続けてその行を下行へ移動したいのですが表-2のようにA列に"あ"でまとめた行、次に"い"でまとめた行に入れ替えたいのですがVBAコードをお教え願います。

  • VBAの修正 Enterを押した後のセル移動について

    以前、下記でお世話になった者です。 その節はありがとうございました。 「質問:ExcelでEnterを押したあとの移動先について06-03-07 23:03」 http://oshiete1.goo.ne.jp/qa2014068.html 「質問:No.2014068のつづきです。VBAで困ってます。06/03/09 22:06」 http://oshiete1.goo.ne.jp/qa2018448.html 当時のもので快調に使用できていましたが、社内システムの入れ替えでデータが増えたため、VBA(または関数)の修正をして使い勝手をよくしたいのです。 データシート名:[データ]に下記のコードが入っています。 シートのデータ範囲はA4:J65536で、I列に製品コードが入っています。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 11 Then Cells(ActiveCell.Row, 1).Select End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Range("A65536").End(xlUp).Offset(, 0).Select End If End Sub このコードのおかげで「B2でEnterを押すとA列の「あ」が入っているセルに移動」できました。 これを「B2で製品コードを入力してEnterを押すと、データ範囲のI列を検索して該当レコードの行頭にセルが移動する」に変えたいのです。 ただし、I列の製品コードは1レコードにつき1コード(一品一様)ではありますが、現時点ですべてのコードづけが終わっていないためにB2で入力したものが無い確率の方が高いのです。 この場合は「あ」にセルが移動するようにしたいのですが、どのようにしたらよいのでしょうか。 ご回答よろしくお願いします。

  • テーブルでEnterしても次の行の冒頭に移動しない

    エクセル2007挿入からデータ範囲をテーブルに設定すると Enterキーを押すと次の行の1列目に移動する、と 何かで読んだのですが 真下のセルにしか移動しません。 次の行のA列に移動するにはどうしたらいいですか? 別にテーブルでなくても次の行のA列に移動できれば何でもいいです ちなみにテーブル範囲はA~AL列 列によっては関数や入力規則が設定されている。 あまり入力されない(空白)列もある。 一番多いのはA~P列まで入力して次の行に移動するパターン。 途中列でEnterしても最終列まで行ってEnterしても下のセルにしか 移動できませんでした。

  • Excel 条件に従いセル移動するには

    よろしくお願いいたします。 A列には入力したくない行に"a"が入力してあるとします。 B列に上の行から数値を入力していくのですが、数値を入力してEnterを押すと次のA列に"a"が入力されていない行のB列セルに移動するVBAを教えてください。

  • VBA入力なしのエンターでのセル移動

    VBA初心者です。 エクセル2010使用してるのですが チェンジイベントで入力時エンターで以下のように動きますが 入力なしのエンターでC5セルに移動させるには どのような方法があるのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$H$5" Range("C8").Select End Select End Sub よろしくお願いいたします。

  • Excelでenterを押した後任意のセルに移動

    Excel VBAの初心者です、宜しくお願いいたします。 VBAで集計表を作成しているのですがExcelのオプションから設定してシートの保護で入力可能なセルを選びVBAを実行するとシートは保護されていますとメッセージが出て使えません。 A1を入力後EnterでA3へ移動、次にEnterでA6へとセルを移動させたいのです、VBAでの構文はどの様に作ればよいのかご伝授頂きたく宜しくお願いいたします。 Excel 2002、3、7を使用しています。  

  • たとえば、A1~H21までの表の中で、H1からA2に移動させるには?

    A1~H21まで表の中で、H1にデータを入力後、ENTERキーなどで、A2にデータ入力させるには、どのよう にすればいいのですか? 通常、H1でデータ入力後、ENTERキー押すと、右の セルに移動するのですが。 VBAとかでしないといけないのですか?

  • エクセルのセルをENTERで指定箇所に移動させる

    ということをしたいと思っています。といっても、そんなにややこしい移動でなく、 A1B1,A2B2,A3B3というように、 右に一度進んだら斜め下に行く、という作業を繰り返したいだけです。 つまり、B列の入力をした後は必ずA列に戻って次の行から入力できる状態にしたいのです。 なお、移動にはENTERを使いたいと思っています。 CTRLで入力するセルに順番と名前をつけてやる方法を自分で見つけてやってみたのですが、 これだと、一度でもこの範囲内からはずれてしまうと、また一からの入力になってしまいますし、 理想はこのA列B列のどこから入力を開始しても、B列入力の後は次の行のA列に移動する、ということなのですが、、、。 入力しないセルをロックして保護する、という方法もやってみたのですが、私が何か間違っているのでしょうか、C列をロックしてもうまくいきませんでした。 なぜこのようなことをしたいかというと、誰でも使いやすいフォーマットを作っておきたいため、 このようにセル移動するシートを作成したいのです。 どなたかもしいい案があればどうぞお願いいたします。

  • エクセルVBAの書き方で教えてください。

    エクセルで、 「A列にデータを入力した日付をB列に自動で入れる」 (A列のデータを消したときは、B列のデータも消える)ということをするのに、 他の質問を参考にして、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then   '対象の列が1列目(A列)なら If Target.Value <> "" Then   '入力された値がブランクでなければ Target.Offset(0, 1).Value = Date   '0行ずれた(同じ行)の1列右隣に日付を入れる Else       'そうでなければ(Deleteキーで消されたら) Target.Offset(0, 1).Value = ""   '同行右隣をブランクすなわち""として消す End If      '入力された値の処理終り End If      '1列目(A列)の処理終り、従ってB列以降はチェックしない End Sub と、入力して、うまく動きました。 ところが、「A列に入力」→「B列に自動で日付」だけでなく、 「D列に入力」→「E列に自動で日付」 「H列に入力」→「I列に自動で日付」と、1つのエクセルシートの中で いくつかの同じ条件のことを繰り返そうと思うとうまくいきません。 この場合、どのようにVBAを記入したら良いのか、教えてください。 よろしくお願いします。

  • エクセル2010 セルの移動設定について

    エクセル2010を使用しています。 入力するセルを2列(A,B)に限定し、A1入力後→Enter→B1に移動→Enter→A2に移動と、 右移動、左下移動のVBAまたは、設定を教えてください。

専門家に質問してみよう