• 締切済み

マクロでセルの移動方向を変えるには

ひとつのシート内に表が3つあり、それぞれの表のセルの移動方向を変えたいのですが マクロを使えば可能でしょうか? 【表A】A1:B30 (セル移動「下」) 【表B】D1:P10 (セル移動「右」) 【表C】d2:K30 (セル移動しない) ([エクセルのオプショ]-[編集設定]でセルの移動方向は「下」に設定しています) よろしくお願いします。

みんなの回答

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.7

NO4です。 >移動方向は変わりません。。。。  ⇒データ入力後の振る舞いとしていますので空入力の場合はイベント発動がない為、オプション設定に従います。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.6

基本の移動方向は下なので,表Aの範囲については何もせず標準の(表B,Cを除いた他のセル範囲と同じ)ままで良い道理です。 また表Cのセル範囲が表Bの範囲とダブっているのは,単なる誤記としててきとーに直します。 手順: シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Worksheet_SelectionChange(byval Target as excel.range)  application.moveafterreturn = true  application.moveafterreturndirection = xldown  if not application.intersect(activecell, range("D1:P10")) is nothig then  application.moveafterreturndirection = xltoright  end if  if not application.intersect(activecell, range("D20:K30")) is nothing then  application.moveafterreturn = false  end if end sub ファイルメニューからエクセルシートに戻り,所定のセル範囲を選ぶと(そこに移動すると)所定の移動動作に切り替わる。 #なお,言わずもがなですが所定のセル範囲を離脱した瞬間に,移動方向は下へと復帰します。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.5

#2です。 ThisWorkbookのコード欄に次のコードを記述してください。 シート名は適当なものに変えてください。 Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name = "Sheet1" Then Application.MoveAfterReturn = True Application.MoveAfterReturnDirection = xlDown ElseIf Sh.Name = "Sheet2" Then Application.MoveAfterReturn = True Application.MoveAfterReturnDirection = xlToRight ElseIf Sh.Name = "Sheet3" Then Application.MoveAfterReturn = False End If End Sub シートを保護するときに、「ロックされたセル範囲の選択」のチェックをはずしておけば、 ロックされていない範囲の中だけでセルが移動します。 このマクロが実行されると、Excelのセル移動の設定が変わり、このファイルを閉じた後でも、Excelのセル移動の設定はそのままです。 そのため、別のエクセルファイルを開いたときにもその設定になっています。 これを防ぐにため、ファイルを閉じるときにセル移動の設定が規定値になるように、次のコードも記述しておいてください。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.MoveAfterReturn = True Application.MoveAfterReturnDirection = xlDown End Sub なお、#4のコードは、セルの内容が変わったときに実行されるコードなので、Enterキーだけでは実行されませんので。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

一例です。 該当シートタブ上で右クリック→コードの表示→以下のコードを貼り付けでお試しください。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:B30")) Is Nothing Then If Intersect(Target, Range("D2:K30")) Is Nothing Then If Intersect(Target, Range("D1:P10")) Is Nothing Then Exit Sub Else Target.Offset(0, 1).Select End If Else Target.Offset(0).Select End If End If End Sub

ARISUNOSIRO
質問者

お礼

細かく教えていただいてありがとうございます。 早速ご指導のとおり貼り付けてみましたが、移動方向は変わりません。。。。 (全て下方向へ移動します)

  • chonami
  • ベストアンサー率43% (448/1036)
回答No.3

縦移動はEnter、横移動はTabを使えばわざわざマクロにしなくてもいいのでは…とも思いますが。 ちなみに表Bの場合、 D1→E1→…P1とTabで移動してP1入力後Enterを押すとD2に移動できます。 表CはCtrlを押しながらEnterを押すと移動しません。 表が重なって配置されてますし目視で判断する方がかえってやりやすくないです?

ARISUNOSIRO
質問者

お礼

ありがとうございます。 [Enter][Tab]を使い分けることなく、Enterキーのみで操作したいと考えています。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

セルを選択したときに、 Application.MoveAfterReturn と Application.MoveAfterReturnDirection をマクロで設定すれば移動方向が変わります。 それぞれの表の指定範囲以外のときは、セルの移動はどうしたいんでしょうか? それが分かれば具体的なコードを提示できるんですが・・・

ARISUNOSIRO
質問者

お礼

早々にありがとうございます

ARISUNOSIRO
質問者

補足

表1・2・3以外はセルにロックをかけ、保護しています。 入力用のシートなので、入力するセル(表)以外はセルを選択できないようにしています

  • oct1290
  • ベストアンサー率35% (75/213)
回答No.1

マクロでセルの移動方向を変えるにはですので 入力決定後なのか任意なのか? 任意なら 右 ActiveCell.Offset(0, 1).Select        左 ActiveCell.Offset(1, 0).Select 自動したいセルが飛ぶなら  Range("A1").Select です

ARISUNOSIRO
質問者

お礼

ありがとうございます