![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.3ベストアンサー
- 回答日時:
横レス失礼します。
>「Enterを押すは書けない」のような内容しか出てこなかったんです。
内容によっては、書けないことはないのですが、コーディングが難しいです。一応、ご希望どおり動くと思いますのでアップしますね。ちょっと長いですが、とりあえず、コピー&ペーストして動かして見てください。
【手順】
1. EXCELシート選択タブで対象シートを選択し、右クリック
2. [コードの表示]クリック
3. Visual Basic Editor起動(以下VBE)
4. 開いたウインドウに下記VBAコードをコピー&ペースト
5. VBEを閉じる
【ロジック】
1. Worksheet_SelectionChange イベントで Target が E4:E44 の範囲にある場合、ScrollArea プロパティを操作し、Enter後にB列にカーソルが移動するようにする。
2. 1.でカーソルがB列に移動すると、もう一度 Worksheet_SelectionChange イベントが発生するので、今度は ScrollArea を解除
3. Worksheet_Change イベントで変更のあったセルが E4:E44の範囲にあり、かつ値が空でなければ、Target.Offset で D列にジャンプ
【カスタマイズ】
Targetが指定のセル範囲にあるか、いちいち判定式を書くのが面倒でしたので、関数化してあります。シートの作りが変更された場合、この関数に渡すセル範囲とOFFSETで移動する量を調整して下さい。
【VBAコード:場所=シートモジュール】(次行から終わりまで)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'カーソルの移動方向を制御している場合はこんな感じ
If InArea(Target, Range("B4:E44")) Then
Application.MoveAfterReturnDirection = xlToRight
End If
'メイン部分
If InArea(Target, Range("E4:E44")) Then
Me.ScrollArea = "B:E"
Else
Me.ScrollArea = ""
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrorHandler
If InArea(Target, Range("E4:E44")) And Target.Value <> "" Then
Target.Offset(1, -1).Select
End If
ErrorHandler:
Exit Sub
End Sub
'【関数】セルが指定範囲に含まれるか
Private Function InArea(TargetCell As Range, rArea As Range) As Boolean
InArea = False
On Error GoTo ErrorHandler
If TargetCell.Count > 1 Then Exit Function
Set s = Intersect(TargetCell, rArea)
If Not s Is Nothing Then InArea = True
ExitHandler:
Set s = Nothing
Exit Function
ErrorHandler:
InArea = False
Resume ExitHandler
End Function
KenKen_SPさん
手順から丁寧に教えて頂きありがとうございます。
思い通りの動きになりますぅ!。
VBAは最近始めたもので、こんなに難しくなるとは思いませんでした。自分では絶対無理でした。入力時の手間が省けて助かります。
入力後の横移動ですが、こんな感じで入れておりました。
(こっちは検索すると複数 出るんですよね)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect _
(Target, Range("B4:D44")) Is Nothing Then
Target.Offset(0, 1).Activate
End If
End Sub
No.4
- 回答日時:
matsu_junです。
私がやろうとしていた以上のことをKenKen_SPさんがお書きになりましたので、正直脱帽です。今更拙作を披露することができなくなってしまいました。(実はまだ構想だけで作っていなかったのですが)
私も「SelectionChange」で処理しようとしていたのですが、「ScrollArea」は思いつかなかったです。
というわけでKenKen_SPさまの回答に乗っかっちゃいまして、蛇足となりますがご利用のブックのプロジェクト「ThisWorkbook」に、以下のコードを挿入しておくと、開いている別のブックを編集したい時や、一度このブックを閉じた時に、Enterを押した時のカーソルの移動が下方向に戻ります。
Microsoft Visual Basic の左側、プロジェクトウィンドウから「ThisWorkbook」をダブルクリックして後、右側のエディタ部に書き込んでいただければ幸いです。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.MoveAfterReturnDirection = xlDown
End Sub
Private Sub Workbook_Deactivate()
Application.MoveAfterReturnDirection = xlDown
End Sub
また、KenKen_SPさんのコードを汚して申し訳ないですが、
'カーソルの移動方向を制御している場合はこんな感じ
If InArea(Target, Range("B4:E44")) Then
Application.MoveAfterReturnDirection = xlToRight
End If
上の部分を
If InArea(Target, Range("B4:E44")) Then
Application.MoveAfterReturnDirection = xlToRight
Else
Application.MoveAfterReturnDirection = xlDown
End If
このように追記するくらいですか。これでB4:E44からカーソルが外れたら、Enterを押した時のカーソルの移動が下方向に戻ります。
matsu_junさん
ありがとうございます。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.MoveAfterReturnDirection = xlDown
End Sub
は書いていたのですが「複数のブックを開くとちょっと困るかな?」と思ってはいました。
まだ始めたばかりで、そんな発想すら浮かばなかったし、もう少し簡単な処理で済むものと漠然したイメージだけだったんです。こんなになるとは予想外でした。
matsu_junさん、KenKen_SPさん、ありがとうございました。
No.2
- 回答日時:
kkmさん初めまして。
おはようございます。matsu_junです。確か前回の質問の際は、ツール(T)-オプション(O)から「編集タブ」内の「入力方向」を変更することで解決されたと記憶しております。
その際私は見ていただけでアドバイスできませんでしたが(というより知りませんでしたが)、今回の場合はマクロを使って実現はできます。ただしそれなりの制限と追加説明が必要になります。
制限事項)
1) これまで、これからの物を含む全てのブックで実現するのは難しそうです。
ある特定のブック(1つとは限らなくても)について、ということであれば容易です。
2) 質問のような動作を行うセル群は、「セルの結合」されていてはいけません。
(不可能ではないのですが、少々マクロの作成が面倒になりますので・・・)
上の2つの制限事項に問題が無ければマクロを作れますので、以下の補足要求にご回答ください。
補足要求)
1) 前回セルを横に移動させるとしましたが、右移動ですか? 左移動ですか?
簡単な例で示してくれるとうれしいです。(例:D列でEnterを押すとE列へ移動する)
2) 斜め下移動させたいセル範囲は固定されていますか?それともしょっちゅう変わるのですか?
ハッキリしているのならそのセル範囲を教えてください。「E列全部」とかでもOKです
3) そもそもカーソルの横移動はシート全体に摘要したいのですか?
それともこれも斜め移動したい範囲と同じで、他は下移動でよいのですか?
4) ある特定のシートだけで実装したいのですか?それともあるブックについて全てのシートで
実装したいのですか?特定のシートの場合はシート名を教えてください。
以上、ご回答いただければ作成いたします。
この回答への補足
matsu_junさん、初めまして。
宜しくお願いします。
制限事項は単独シートで使用し、セルの結合はありません。
1)右移動です。
2)B列から入力してD列の入力後E列に移動します。
E列が空白のままEnterなら1行下のB列へ、入力後Enterなら1行下のD列に移動したい。
E4が空白ならB5、入力があれがD5です。
質問と少し変わりますが大丈夫でしょうか?
3)横移動はB4:D44を範囲指定してます。
4)シート名「入力」のシートのみです。
色々と検索したのですが、「Enterを押すは書けない」のような内容しか出てこなかったんです。
申し訳ありません、宜しくお願いします。
No.1
- 回答日時:
入力後に右横に移動するのは、
Worksheet_Change(ByVal Target As Excel.Range)
で行っているのかと思いますが、
入力しないで、[ENTER]キーのみの時は、関知してくれないので無理ではないかと思います。
右横移動も含めて、Application.OnKey で、
ENTERキーイベントを拾って、セルの入力チェック後、カーソル移動となるのではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Excel(エクセル) エクセルについて質問です。 8 2022/05/31 16:00
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- Excel(エクセル) Excel ヘルプの[ロック解除]、<c0>、</c0> の意味は何ですか? 1 2023/02/20 16:58
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Excel(エクセル) MSさん、シッカリしてよ~んッ! 3 2023/01/30 13:15
- その他(ブラウザ) 自分のデフォルトゲートウェイをアドレスバーに入力し、Enterキーを押します。(一般的なデフォルトゲ 4 2022/05/30 22:43
- Windows 10 エクスプローラで希望の場所が表示できない 2 2023/06/29 15:19
- その他(ブラウザ) ・再投稿です 自分のデフォルトゲートウェイをアドレスバーに入力し、Enterキーを押します。(一般的 1 2022/05/30 23:16
- マウス・キーボード win7 文字変換選択確定をテンキーでさせない 3 2023/03/05 16:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel で3行目、6行目、9行目...
-
Excelのサイズが小さくなりません
-
エクセルの表組み、セルの固定...
-
Excel、空白でもEnterを押...
-
Excelのフィルハンドルで…「連...
-
嫌ってるのに真似してきたりマ...
-
onedriveの中身を削除したらパ...
-
拡張子.dどういう意味
-
クラリスワークスのファイルを...
-
Winmerge ファイルの中身は同じ...
-
mrl→midファイルへ
-
★Win2000のドライブ文字変更★
-
macのdmgファイル(動画)をMP4...
-
I-O DATA LANDISK のディレク...
-
インデックス属性って何ですか?
-
ファイルが移動できません。
-
セキリュティ カタログとは?
-
Windows10 フォルダ内の自動並...
-
mac ファイルの詳細情報を編集...
-
iMovieとgifファイルの読み込み...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの切り取りと貼り付け...
-
Excel で3行目、6行目、9行目...
-
excel vba 非表示のシートに入...
-
【エクセル】異なったシートの...
-
VBAで長さ0の文字列をNullに変...
-
Excelのサイズが小さくなりません
-
エクセル セル内の文字列を他...
-
エクセルで、コピー貼り付けが...
-
EXCEL VBAでコピーす...
-
縦書きを横書きに変換したい
-
エクセル ブック全体 セル結...
-
EXCELでシートのデータを別のシ...
-
エクセル計算式の複写について
-
エクセルの表組み、セルの固定...
-
windowsではできるハイパーリン...
-
エクセルの範囲指定を規則的に...
-
Excelのフィルハンドルで…「連...
-
ウインド枠の固定
-
1ヶ月の平均値は?
-
結合セルに結合していないセル...
おすすめ情報