※ ChatGPTを利用し、要約された質問です(原文:Enterキーの移動方向を指定したい。)
ExcelのEntekii移動をコントロールするマクロの解読方法
2013/02/28 16:59
このQ&Aのポイント
ExcelでEntekii(エンターキー)を押してのセル移動を制御するためのマクロが提供されましたが、マクロの記述が初歩的すぎて解読できない状況です。エンターキーを押すと右に移動し、一段下に移動する動作を特定の範囲で行いたいです。
マクロを組んだワークブックを閉じると、セル移動の設定が不正に変わる現象が発生しました。対処法として、ワークブックを閉じる時に実行するマクロ(WorkBook_BeforeClose関数)を使用しましたが、問題のワークブック以外にも影響が及び、セル移動の設定が正常になりませんでした。
B2からN28までの範囲でエンターキーを押してのセル移動を制御したいです。また、特定の範囲ではエンターキーを押すと右に移動し、一段下に移動するような動作を行いたいです。さらに、マクロを組んだワークブックを閉じる際にセル移動の設定が正常に戻るようにしたいです。
いつもお世話になります。
ブック内の特定したシートで下記の図のように、
B2からN28の範囲内で
B2からN2まではEnterキーを押すと右に移動し、N28まで行きEnterキーを押すと一段下のB3に移動し、
また、B3からN3は右に移動し、N3からB列の4へという具合に「Enterキーを押しての移動」をコントロールしたいのですが、とあるサイトから、下記のようなマクロンの記述を見つけてきて、応用しようと試行錯誤したのですが、どうもマクロに関して初歩すぎるので、うまく解読できませんでした。
お忙しいところを恐縮ですが、どなたかご教授頂けないでしょうか。
よろしく、お願い致します。
1: Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
2:
3: xrArea01 = "B5" '右方向へ行くRange範囲1
4: xrArea02 = "G28" '右方向へ行くRange範囲2
5: xbArea01 = "H5" '下方向へ行くRange範囲1
6: xbArea02 = "H28" '下方向へ行くRange範囲2
7: retCell = "B" '一段下に戻るセル'通常は下移動
8:
9: Application.MoveAfterReturn = True
10: Application.MoveAfterReturnDirection = xlDown
11:
12: 'xx:xxの範囲ではエンターキーを押して右移動
13: If Not Application.Intersect(ActiveCell, Range(xrArea01 & ":" & xrArea02)) Is Nothing Then
14: Application.MoveAfterReturnDirection = xlToRight
15: End If
16:
17: 'xx:xxは一段下のB列に移動
18: If Not Application.Intersect(ActiveCell, Range(xbArea01 & ":" & xbArea02)) Is Nothing Then
19: yy = ActiveCell.Row
20: Range(retCell & (yy + 1)).Select
21: End If
22:
23: End Sub
尚、上記の説明中に
「私の環境だけかもしれませんが、マクロを組んだワークブックを閉じる→他ワークブックを開くとセル移動の設定が「下」ではなく「右」になっていました。
対処法として、ワークブックを閉じる時に実行するマクロ(Workbook_BeforeClose関数)を使いました。
同じ現象になった方は下記マクロを使ってみてくださいね。
1: Private Sub Workbook_BeforeClose(Cancel As Boolean)
2: Application.MoveAfterReturn = True
3: Application.MoveAfterReturnDirection = xlDown
4: End Sub
と注記がありましたが、閉じてからどころか、問題のワークブック以外に同時に開いていたワークブックでも、「Enterキーを押した後にセルを移動する方向」が、勝手に右に変わっていました。
この注記では、ワークブックを閉じる時に実行するものですが、「同時に開いているワークブック」にも干渉しないようにすることは出来ないのでしょうか?
B2とC2、D2とE2、F2とG2、H2とI2、J2とK2、L2とM2はセルを結合しております。
そして、B3とC3・・・・・・以下28行目まで同じようにセルを結合しております。
質問の原文を閉じる
質問の原文を表示する
お礼
早速のご指導ありがとうございます。 アイディア次第で、シンプルな方法でも効果的なやり方が有るものなのですね! 下記の記述に教えて頂いた方法を併用しようと思います。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("B2:N28")) Is Nothing Then Application.MoveAfterReturnDirection = xlToRight Else Application.MoveAfterReturnDirection = xlDown End If End Sub