• ベストアンサー

Enterキーで順番にセルの移動する。

Excel2013 Enterキーを押すと隣りのセルに移動ではなく、次に入力したいセルにカーソルが移動するようにしたいです。 たとえば、 必要事項を入力する書類で、B2のセルに入力したら次はD5のセルに入力、次はA6に入力といった書類あり、Enterキーを押して次の入力セルに移動するようにしたい。また、書類の書式を崩されたくないのでシート保護して使いたいです。 Enterで進み、戻る時はUPキーか、↑キーなどで設定したいと考えてます。 どなたか、VBで教えてくださる方お願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.5

以下の要件で作ってみました。(当方、Excel2010です) ・入力順の制御をするセルの個数は制限しない。 ・制御するセル番地をプログラム内に入れない。 ・制御するセルを登録しやすくする。 ・結合セルも可とする。 ・基本的な移動順は上から下、左から右とする。(戻るときに必要) ・セルを移動するキー   Enterキー、4つの方向キー、Tabキー、Shife+Tabキー   セルを移動させたキーよりも移動後のセルで制御する   方向キーの右、下はEnterキー、Tabキーと同じ   方向キーの左、上はShift+Tabキー ・シートの保護・非保護には依存しないようにする。 ・入力順の制御のオンオフを可能にする。 ●最初に入力順の制御を行うシートで、開発タブ>挿入>フォームコントロールでチェックボックスを1つシート上に配置し、右クリック>コントトールの書式設定>コントロールタブ>リンクするセルを「$H$1」にして、チェックボックスはオフにしてください。マクロが「$H$1」になっているからです。後で修正してください。 入力用のマクロが動き出すと修正ができなくなるので、このチェックボックスのオン・オフでマクロを制御します。 ●下記のマクロをシートのコードウィンドウに貼り付け、最初の行の「AdrJump」の右に動かすセルを「,」で区切って順に記入します。結合セルの場合はその左上のセル番地になります。数の制限はありませんがほどほどに。この登録データで環状リストを作ります。 ●最初の時点は、編集した後、チェックボックスをオンにしてマクロを実行するとエラーが起きる可能性があります。VBE画面でマクロを中断し、「setEnableEvents」を実行してください。以降、エラーは起きないはずです。 ●今のマクロは添付図での入力用の設定になっています。 シートのコードウィンドウに貼り付けます。 '□□□ 入力セルを順に書く □□□ Const AdrJump As String = "C2,C4,C5,F5,D7,D8,D10" Dim Jmp1() As String  '飛び先のセル(今) Dim Jmp2() As String  '飛び先のセル(前) Dim DownUp As Integer '戻るか進むか(1:戻る、2:進む) Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Range("H1") = False Then Exit Sub   Application.EnableEvents = False   Jmp1 = Split(getAdr(Target), ",")   If Jmp1(0) = "" Then     '前に進むか戻るかを判定     DownUp = 1 - (Range(Jmp2(0)).Row < Target.Row Or _            Range(Jmp2(0)).Column < Target.Column)          Jmp1 = Split(getAdr(Range(Jmp2(DownUp))), ",")     Range(Jmp2(DownUp)).Select: Jmp2 = Jmp1   Else     Jmp1 = Split(getAdr(Range(Jmp1(0))), ","): Jmp2 = Jmp1   End If   Application.EnableEvents = True End Sub '選択セル(結合セルも可)によってどこに移動するか候補を決める Function getAdr(Tgt As Range) As String   Dim wk() As String, i As Integer      wk = Split("," & AdrJump & ",", ",")   wk(0) = wk(UBound(wk) - 1) '環状リスト(最初)   wk(UBound(wk)) = wk(1)   '環状リスト(最後)      getAdr = ",,"   For i = 1 To UBound(wk) - 1     If Tgt.Range("A1").Address(0, 0) = wk(i) Then       getAdr = wk(i) & "," & wk(i - 1) & "," & wk(i + 1)       Exit For     End If   Next End Function '最初、編集時エラーが発生したらこのプロシージャを実行する Sub setEnableEvents()   Erase Jmp1   Erase Jmp2   Application.EnableEvents = True End Sub

akiyes
質問者

お礼

nishi6さん、ありがとうございます。 チェックボックスを図のように配置してやってみました。 上手く動きました! まさしく私が作りたかったものとそっくりの例でした。 ただ、私以上にExcel、パソコンそのものに不慣れな者たちが扱うので、チェックボックスではなくボタンもしくはシートが開いたら動くようにした方がいいかもしれないと思いました。 その場合はどのようにコードを編集したらよいですか? 重ね重ねすいません。ご教授お願いします。

akiyes
質問者

補足

お礼のフォームが無いので、補足入力フォームから重ねてお礼を申し上げます。 シート保護の設定で "ロックされたセル範囲の選択"にもチェックを入れて試したところ、ロックされてないセルへ瞬時に戻るので仮に関数などが設定されているセルを選択されても編集されずに利用できるので、このまま利用させていただきたいと思います。 nishi6さん、どうもありがとうございました。

その他の回答 (4)

回答No.4

言い忘れたので追記。 さっきのは、シートに記載してください。 標準モジュールには Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long と入れてください。 さすがに、シートへのプログラムの書き方、 標準モジュールの出し方等が分からないことは無いと思いますので、 コレにて回答とさせてもらいます。

akiyes
質問者

お礼

satoron666さん、返事遅くなり申し訳ありません。 シート、標準モジュールにコピペして、ワークシートではB2,D5,A6セル以外シート保護をして試してみました。 "指定セルを選択してください。"のmsgBoxが出て次のD5セルに進めませんでしたが、シート保護を解除したら、ちゃんとエンターキーでB2→D5→A6と移動が出来ました。 エンターキーが押されたら一旦シート保護を解除するようなコードが必要でしょうか、何度もすいませんご教授お願いします。

回答No.3

http://www.happy2-island.com/excelsmile/smile04/capter00301.shtml 参考リンクです。 保護を掛けて、それ以外選択できない状態になっているという設定で 話を進めます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim RangeA As Range Dim RangeB As Range Dim RangeC As Range Set RangeA = Range("B2") Set RangeB = Range("D5") Set RangeC = Range("A6") If Target.Address <> Cells(RangeA.Row + 1, RangeA.Column).Address And _ Target.Address <> RangeA And Target.Address <> RangeB And Target.Address <> RangeC And _ Target.Address <> Cells(RangeB.Row + 1, RangeB.Column).Address And _ Target.Address <> Cells(RangeC.Row + 1, RangeC.Column).Address And _ Target.Address <> Cells(RangeA.Row - 1, RangeA.Column).Address And _ Target.Address <> Cells(RangeB.Row - 1, RangeB.Column).Address And _ Target.Address <> Cells(RangeC.Row - 1, RangeC.Column).Address Then MsgBox "指定セルを選択してください。" Application.EnableEvents = False Range("B2").Select Application.EnableEvents = True Exit Sub End If If GetAsyncKeyState(13) <> 0 Then 'Enter押されている場合 If Target.Address = Cells(RangeA.Row + 1, RangeA.Column).Address Then Application.EnableEvents = False RangeB.Select Application.EnableEvents = True Exit Sub End If If Target.Address = Cells(RangeB.Row + 1, RangeB.Column).Address Then Application.EnableEvents = False RangeC.Select Application.EnableEvents = True Exit Sub End If If Target.Address = Cells(RangeC.Row + 1, RangeC.Column).Address Then Application.EnableEvents = False RangeA.Select Application.EnableEvents = True Exit Sub End If ElseIf GetAsyncKeyState(33) <> 0 Or GetAsyncKeyState(38) Then '33はPgUp、38は上 If Target.Address = Cells(RangeA.Row - 1, RangeA.Column).Address Then Application.EnableEvents = False RangeC.Select Application.EnableEvents = True Exit Sub End If If Target.Address = Cells(RangeB.Row - 1, RangeB.Column).Address Then Application.EnableEvents = False RangeA.Select Application.EnableEvents = True Exit Sub End If If Target.Address = Cells(RangeC.Row - 1, RangeC.Column).Address Then Application.EnableEvents = False RangeB.Select Application.EnableEvents = True Exit Sub End If End If End Sub 範囲以外を選択した場合の設定等も一応行いました。 現状、Enterを押した際などはセル番地が変わってしまうため、 それを考慮してプログラムを組んでいます。 その為、セルの上下1セルは選択できるような仕組みになっていると プログラムは上手く動くかな?と思います。 当方2003ですが、しっかり稼動しました。 適当なプログラムで申し訳ないですが…稼動すればいいな~と思ってます。

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.2

http://msdn.microsoft.com/ja-jp/library/office/ff839775(v=office.15).aspx 上記の「イベント処理」を使用して 'B2だったらD5に移動 if Target.Column = 2 And Target.Row = 2 Then Range("D5").Select 'D5だったらA6に移動 Else if Target.Column = 4 And Target.Row = 5 Then Range("A6").Select Endif のようにするしかありません。 これは「一方通行」なので、スタートから順に、B2⇒D5⇒A6、のように、決まった順にしか移動させられません。 >Enterで進み、戻る時はUPキーか、↑キーなどで設定したいと考えてます。 そのような「贅沢な仕様」は実現できません(VBAでは、セル編集時に押したキーを判定する方法が用意されていない)ので、諦めましょう。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

B2、D5、A6のセルを選択。 右クリック-[セルの書式設定] 「保護」のタブ、ロックをoffに。 「ロックされていないセル範囲の選択」のみチェックし、シートを保護。 すると、Excelの標準の機能だけで質問文の希望の動作が出来ると思いますが。

akiyes
質問者

お礼

早速、お返事ありがとうございます。 実際の書類は複雑になっていて、不規則に入力セルが配置されてるので、保護をすると思ったようにEnterキーで移動してくれません。 それで、VBならと思い質問させて頂きました。 ありがとうございます。

関連するQ&A

  • Excelで、Enterキーでセルの移動ができない

    Enterキーで下のセルに移動をすることができなくなり、 逆に、Altを押さなくてもセル内で改行がされるようになりました。 また、セルを選択しただけでは入力できず、 入力するためにはダブルクリックしなければならなくなりました。 これはこれで便利な時もありそうですが、やっぱり今はEnterでセル移動がしたいです… 特に設定を変えたつもりはないのですが、 元に戻す方法を教えてください。 Microsoft Excel 2003 を使っています。 宜しくお願いします。

  • 入力後enterを押すと、非保護の別セルへ移動したい。(エクセル)

    エクセル2000での質問です。 入力用シートと印刷用シートを作りました。 入力シートは、数個の入力欄のセルのロックのチェックボックスを外してシート保護しました。 tabキーで次の入力セルに選択セルが移動するようになりました。 入力欄(セル)に文字や数値を入力後、enterを押すと、次の入力欄に移動するにはどうすればよいのでしょうか? 今は、enterを押すと、保護されている使用しない下のセルに移動します。 週個の入力欄(セルは)隣接しておらず、シート上にまばらに配置してあります。 教えてください。よろしくお願いします。

  • セルの移動

    セルの移動ですが、セルの書式設定でロックのチェックを外してシート保護をかけた場合ですが、結合したセルがある場合結合したセルの数だけEnterキーを押さなければ次のセルに移動しません。結合した場合でも1回のキー操作で移動する方法はありますか?教えて下さい。

  • セルの自動移動

    エクセルで、入力後次のセルに移動するにはEnter等を押す必要があります。 シートに入力フォームを予め作っています。 1つのセルには1文字しか入力しないのですが、1文字を入力したら(Enter等を押さずに)自動的に次のセル(指定したセル)に移動することはできませんか? 例: セルB1に「1」を入力(1キーを押す)と次に入力したいB2へカーソルが移動

  • 矢印キーでのセルの移動について

    Excel2003を使っています。 1~2行目のみセルをロックし、 ツール>保護>シートの保護、で「ロックされていないセル範囲の選択」にのみチェックを入れております。 この時、矢印キーでカーソルが巧く動かないのですが、何故でしょうか。 具体的には、新規Bookで上記設定にした場合、矢印キーでカーソルは一切動きません。 ここでセルA10に何か書き込むと、矢印の↓キーでA3~A11→B3~B11→A3、の順にループします。 この設定は解除できるのでしょうか?(↓キーなら、ひたすら下へカーソルが移動するように)

  • Enterキーの挙動

    Windows7 Pro SP1 Excel2010 SP2 Enterキーですが、デフォルトで下のセルに移動するようになっています。 例えば、J8セル入力後、Enterキーを押すと、I9やH9に移動することがあります。移動するセルは毎回ほぼ同じセルでマウスのカーソルでI9等に合わせています。 編集済みのbookにより挙動は変わりますが、Excel2010って学習能力があるのでしょうか。 はじめのころは楽でいいなと思っていたのですが、bookが変わり、Enterを押すと、とんでもないところに移動してしまう時があるので、少々困惑しています。

  • エクセルのEnterキーでのセルの移動

    エクセルのEnterキーでセルを下に移動する時、同じファイルで同じように入力しているのに、Enterキー1回で下の行に移動する場合と、2回で移動する場合があるのです。いろいろやってみたのですが、どうしてなのかわからなくて悩んでいます。どなたかご存知の方いらしたら教えてください。

  • 任意のセルの移動をENTERキーでしたい

    現在、エクセルで入力フォームを作成してます が、任意のセルへENTERキーで移動したい のです。 たとえば、B4にデータ入力後、ENTERで B6に移動する場合、下記のマクロを作ったの ですが、うまく移動しません。 どうしてでしょうか? ENTERキーがエクセルのフォームしか使用 できないのですか? Sub B4からB6へのセル移動() If keyascii = vbKeyReturn Then Worksheets("受付入力").Range("B6").Select End If End Sub

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

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

  • テンキーのEnterキーの機能

    仕事でExcel97を使用しています。OSはWin95で、富士通のノートパソコンに購入時に付いてきたテンキーを付けて使用しています。 今までテンキーのEnterを押すと、カーソルが自動的に下のセルに移動していたのですが、何故だか急にカーソルが移動しなくなってしまいました。 キーボードのEnterを押すと、今まで通り下のカーソルに移動してくれます。 パソコンにはテンキーを制御するソフト等は入っていないようなのですが、何かの拍子にどこかのキーを触って、設定が変わってしまったのでしょうか? 再びテンキーのEnterを押せばカーソルが下のセルに移動してくれるようにするにはどうしたら良いのでしょうか? アドバイスをお願いします。m(__)m

専門家に質問してみよう