Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2010)
Enterで指定したセルに移動
投稿日時: 18/11/22 11:29:22
投稿者: ラングドシャ

お願いいたします。
ENTERで指定したセルへ移動したく、いろいろ検索し下記のコードを見つけたので
使わせていただきました。
 
Const AdrJump As String = "F7,F8,F9,F10,F11,T8,Z8,A16"
の通りの順にセルが移動するのですが、最後のA16へ移動したら
最初のF7へ戻ってしまいます。
A16の後は通常の移動に戻したいのですが、どのように記載を追加したら
よいでしょうか?よろしくお願いいたします。
 


Const AdrJump As String = "F7,F8,F9,F10,F11,T8,Z8"
Dim Jmp1() As String    '飛び先のセル(今)
Dim Jmp2() As String    '飛び先のセル(前)
Dim DownUp As Integer '戻るか進むか(1:戻る、2:進む)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("H1") = False Then Exit Sub

    Application.EnableEvents = False
    Jmp1 = Split(getAdr(Target), ",")
    If Jmp1(0) = "" Then
        '前に進むか戻るかを判定
         DownUp = 1 - (Range(Jmp2(0)).Row < Target.Row Or _
                     Range(Jmp2(0)).Column < Target.Column)
    
         Jmp1 = Split(getAdr(Range(Jmp2(DownUp))), ",")
        Range(Jmp2(DownUp)).Select: Jmp2 = Jmp1
    Else
        Jmp1 = Split(getAdr(Range(Jmp1(0))), ","): Jmp2 = Jmp1
    End If
    Application.EnableEvents = True
 End Sub


 '選択セル(結合セルも可)によってどこに移動するか候補を決める
Function getAdr(Tgt As Range) As String
    Dim wk() As String, i As Integer
  
     wk = Split("," & AdrJump & ",", ",")
    wk(0) = wk(UBound(wk) - 1) '環状リスト(最初)
     wk(UBound(wk)) = wk(1)     '環状リスト(最後)
   
     getAdr = ",,"
    For i = 1 To UBound(wk) - 1
        If Tgt.Range("A1").Address(0, 0) = wk(i) Then
            getAdr = wk(i) & "," & wk(i - 1) & "," & wk(i + 1)
            Exit For
        End If
    Next
 End Function


'最初、編集時エラーが発生したらこのプロシージャを実行する
Sub setEnableEvents()
    Erase Jmp1
    Erase Jmp2
    Application.EnableEvents = True
 End Sub

投稿日時: 18/11/22 11:32:54
投稿者: ラングドシャ

質問のコードはシートのコードに入力しています。
また、フォームのチェックボックスを作成し、H1へリンクさせTureの時に動作します。

投稿日時: 18/11/22 13:37:06
投稿者: ラングドシャ

Const AdrJump As String = "F7,F8,F9,F10,F11,T8,Z8,A16"
Dim Jmp1() As String '飛び先のセル(今)
Dim Jmp2() As String '飛び先のセル(前)
Dim DownUp As Integer '戻るか進むか(1:戻る、2:進む)
 
 
A16が抜けていました、申し訳ありません。
 
質問のコードはシートのコードに入力しています。
また、フォームのチェックボックスを作成し、H1へリンクさせTureの時に動作します。
 

回答
投稿日時: 18/11/22 14:20:25
投稿者: WinArrow
投稿者のウェブサイトに移動

>A16の後は通常の移動に戻したいのですが
 
通常とは、どのようなことですか?
それをマクロで実行するのでしょうか?
それとも手操作にするのでしょうか?

投稿日時: 18/11/22 15:32:29
投稿者: ラングドシャ

WinArrow様
 
ありがとうございます。説明が足りず申し訳ありません。
A16が選択されるとマクロを止めたいと考えておりました。
A16には必ず文字が入力されるので、
 
If Range("H1") = False Then Exit Sub
 
この部分を
 
If Range("H1") = False Or Range("a16") <> Empty Then Exit Sub
 
のようにして対応しようかと考えておりましたが、ほかに問題がでてきたので
少しやりたいことや問題をまとめてから再度質問いたします。
いったんここは閉じさせていただきます。