- ベストアンサー
マクロでのカーソル移動
標準モジュールにて、sub auto_open()で始まるマクロで、Enterキーで次々に(IF文、ElseIF文)カーソル移動の方法を教えていただきました。 このマクロの終了後はカーソルが最後の指定場所で止まったままです。 これを、このマクロの終了後続けてEnterキーを押せば普段どうりに一つ下のセルに移動させるように出来ますでしょうか。よろしくお願いいたします。(QNo.3558251関連)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Application.OnKey "{RETURN}", Null Application.OnKey "{ENTER}", Null をすれば、自作のENTER_OnKeyルーチンへ飛ぶのを止めます。 ちなみに、 ---標準モジュール ここから--- Dim nextCell As Range 'Enter時の移動先 'Enter時に呼ばれるルーチン Sub ENTER_OnKey() nextCell.Select End Sub 'Enterチェック開始 Public Sub startEnterNext(cell As Range) Set nextCell = cell Application.OnKey "{RETURN}", "ENTER_OnKey" Application.OnKey "{ENTER}", "ENTER_OnKey" 'テンキーのEnterキー End Sub 'Enterチェック終了 Public Sub stopEnterNext() Application.OnKey "{RETURN}", Null Application.OnKey "{ENTER}", Null End Sub ---標準モジュール ここまで--- ---シートでのモジュール ここから--- '現在のカーソルからEnter時のカーソル移動を設定 Private Sub setEnterNext(Target As Range) Select Case Target.Address(0, 0) Case "A1": startEnterNext Range("C1") Case "C1": startEnterNext Range("C3") Case "C3": startEnterNext Range("E3") '必要に応じて追加 Case Else: stopEnterNext '上記以外のCellではEnterチェックしない End Select End Sub '開始 Private Sub Worksheet_Activate() setEnterNext ActiveCell End Sub '終了 Private Sub Worksheet_Deactivate() stopEnterNext End Sub 'Cell移動時 Private Sub Worksheet_SelectionChange(ByVal Target As Range) setEnterNext Target End Sub ---シートでのモジュール ここまで--- とすれば、シート毎にEnterの動作を指定できます。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
前質問に負数回答があったのに、何回も同じ質問を繰り返している。多分この質問の内容が、質問者には荷が重過ぎる(回答理解もそう)、もう少し勉強してから、考えるべきということではないかな。 ーー それに前質問も見たが、質問の意味が良く取れなかった。具体的に質問を書かないからそうなる。 ーー <どのシートにも同じ位置セルに入力を順次していく野田が、不規則なカーソル移動の手間を省きたい>と、質問の意味を解釈して ーー 的外れかもしれないが、また意に満たない点があるかもしれないが、 どのシートでもよいが、A1セルをクリックして、値を入力しEnterキーを押すと、計画した(決めた)次のセルに次々移動してくれる仕組みを下記に考えた。 下記はThisWorkbookのイベントの方です。 Sheet1などの方ではない。それによりどのシートでも1セットのプログラムで同じことができる。 Public i Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) i = i + 1 'MsgBox i p = Array("$A$1", "$C$2", "$E$3", "$G$4", "$A$1") 'MsgBox Target.Address & "=" & p(i) If Target.Address = p(i - 1) Then Range(p(i)).Select If i = UBound(p) Then i = 0 End If End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" Then MsgBox "A1から開始" i = 0 End If End Sub --- これは p = Array("$A$1", "$C$2", "$E$3", "$G$4", "$A$1") の番地の書き方によって A1->C2->E3->G4 と入力後移動し、最後にA1に戻る。 どんなに不規則な指定でも可。データ入力原書のレイアウトの項目順序との整合性は、入力能率上必要だが。 ーー 別シートの入力に行くときは、A1セルを最初に(もっと言うなら Arrayの最初に指定した番地を)クリックしてください。 A1は If Target.Address = "$A$1" Then と呼応しているので注意のこと。 ーー sub auto_open()とは関係ない。そこに入れる必要は無いし、入れられない。
お礼
ありがとうございました。
お礼
前回に続き本当にありがとうございました。ご親切にご教授くださり大変助かつています。