[[20131022174227]] 『特定の列だけセルが右へ移動する』(比良) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定の列だけセルが右へ移動する』(比良)

 通常はエンターキーを押すと,セルが下へ移動しますが

  A列からE列でエンターキーを押した場合だけ,セルが右へ移動する
  そして,E列でエンターキーを押した場合は,セルがA列の次の行に移る
  たとえば,E1セルでエンターキーを押すと,セルがA2セルに移動する

 という設定を,マクロで行いたいのですが,どうなりますでしょうか。
 ご教示願います。


 オプション設定でエンターキーを押した後にセルを移動する、を下から右に変更して
 編集したいA列の始点からE列の最後までを選択
 これで臨むことは出来ますが、ダメですかね?

 マクロの場合、間違ったから戻したいってことができなくなっちゃいますけど・・・
(稲葉) 2013/10/23(水) 08:41

 Tabキーとの併用でもご希望の事ができますが、それを踏まえてマクロ希望と言う事ですか?

( コナミ) 2013/10/23(水) 08:58


 ありがとうございます。

 Private Sub auto open などを利用して,ファイルを開くと自動的に設定される

 というふうにしたいのですが。
 よろしくお願いします。

(比良) 2013/10/23(水) 11:32


 案1
 エンターキーにイベントを入れる方法

 '//ThisWorkbookモジュールに追加
Private Sub Workbook_Open()
    With ThisWorkbook.Worksheets(SN)
        .OnSheetActivate = "'SetKey 1'"
        .OnSheetDeactivate = "'SetKey  0'"
    End With
End Sub

 '//標準モジュールに追加
Public Const SN = "Sheet1" '//対象のシート名を記述
Sub SetEnter()
    Dim r As Long
    Dim c As Long
    If ActiveSheet.Name <> SN Then Exit Sub
    Application.EnableEvents = False
    Select Case True
        Case Not Intersect(ActiveCell, Range("A1:D100")) Is Nothing
            r = 0: c = 1
        Case Not Intersect(ActiveCell, Range("E1:E100")) Is Nothing
            r = 1: c = -4
        Case Else
            r = 1: c = 0
    End Select
    ActiveCell.Offset(r, c).Select
    Application.EnableEvents = True
End Sub
Sub SetKey(n As Long)
    Dim M As String
    M = "SetEnter"
    Application.EnableEvents = False
    With Application
        Select Case n
            Case 1
                .OnKey "{Enter}", M
                .OnKey "~", M
            Case 0
                .OnKey "{Enter}"
                .OnKey "~"
        End Select
    End With
    Application.EnableEvents = True
End Sub

 案2
 シートモジュールにselectionchangeイベントを入れる方法
 但し、F列が使えなくなる
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim App As Object
    Set App = Application
    App.EnableEvents = False
    Select Case True
        Case Not Intersect(Target, Range("A1:E100")) Is Nothing
            App.MoveAfterReturnDirection = xlToRight
        Case Not Intersect(Target, Range("F1:F100")) Is Nothing
            Cells(Target.Row + 1, "A").Select
        Case Else
            App.MoveAfterReturnDirection = xlDown
    End Select
    App.EnableEvents = True
End Sub
(稲葉) 2013/10/23(水) 11:37

 どうもありがとうございます。
 いろいろ試してみましたが,以下の理由で,ほかの案はありませんか?

 ※このマクロを使いたいファイルには,別のマクロが多数,設定されております。
  それで,上記両案とも,単体ではうまく動きますが,別のマクロも並存するところでは,うまく動かないのです。
  ほかのマクロが多数ありまして,どのマクロが影響しているのか,よく分かりませんが。

 ※案1
  別のマクロの影響かと思いますが,E列でエンターキーを押すと,セルがA列の次の行に移らず,C列の次の行に移ってしまいます。
  単体で試すと,ちゃんとA列の次の行に移ります。

 ※案2
  右クリックして,コピー貼り付けが機能しません。
  あと,F列にも入力したいです。
  あと,別のマクロの動きがおかしくなりました。

 すみませんが,何かいい案がありましたら,お教え願います。

(比良) 2013/11/06(水) 15:25


 F列が選択できなくなってもOKなら

 シートモジュールへ

 Private Sub Worksheet_Deactivate()
     Application.MoveAfterReturnDirection = xlDown
 End Sub

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     Application.EnableEvents = False
     If Not Intersect(Target, Columns("f")) Is Nothing Then
         Target(2, -4).Activate
     ElseIf Not Intersect(Target, Columns("a:e")) Is Nothing Then
         Application.MoveAfterReturnDirection = xlToRight
     Else
         Application.MoveAfterReturnDirection = xlDown
     End If
     Application.EnableEvents = True
 End Sub
(seiya) 2013/11/06(水) 15:51

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.