Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6330 / 13644 ツリー ←次へ | 前へ→

【45740】Enterだけで移動できる? じろう 07/1/13(土) 1:13 質問[未読]
【45742】Re:Enterだけで移動できる? Kein 07/1/13(土) 1:42 回答[未読]
【45743】Re:Enterだけで移動できる? じろう 07/1/13(土) 2:06 発言[未読]
【45744】Re:Enterだけで移動できる? Kein 07/1/13(土) 2:23 発言[未読]
【45745】Re:Enterだけで移動できる? じろう 07/1/13(土) 3:12 発言[未読]
【45746】Re:Enterだけで移動できる? じろう 07/1/13(土) 3:35 発言[未読]
【45747】Re:Enterだけで移動できる? じろう 07/1/13(土) 9:58 発言[未読]
【45751】Re:Enterだけで移動できる? Kein 07/1/13(土) 16:06 回答[未読]
【45757】Re:Enterだけで移動できる? じろう 07/1/13(土) 17:45 発言[未読]
【45771】Re:Enterだけで移動できる? じろう 07/1/14(日) 1:14 お礼[未読]
【45772】Re:Enterだけで移動できる? Kein 07/1/14(日) 1:26 発言[未読]
【45773】Re:Enterだけで移動できる? Kein 07/1/14(日) 1:33 発言[未読]
【45775】Re:Enterだけで移動できる? じろう 07/1/14(日) 2:29 発言[未読]
【45778】Re:Enterだけで移動できる? Kein 07/1/14(日) 2:56 発言[未読]
【45779】Re:Enterだけで移動できる? Kein 07/1/14(日) 2:59 発言[未読]
【45780】Re:Enterだけで移動できる? じろう 07/1/14(日) 3:42 お礼[未読]
【45782】Re:Enterだけで移動できる? じろう 07/1/14(日) 4:53 質問[未読]
【45795】Re:Enterだけで移動できる? Kein 07/1/14(日) 17:10 発言[未読]
【45813】Re:Enterだけで移動できる? じろう 07/1/15(月) 0:38 発言[未読]
【45814】Re:Enterだけで移動できる? じろう 07/1/15(月) 1:06 発言[未読]
【45823】Re:Enterだけで移動できる? Kein 07/1/15(月) 14:23 回答[未読]
【45843】Re:Enterだけで移動できる? じろう 07/1/16(火) 1:46 発言[未読]
【45844】Re:Enterだけで移動できる? Kein 07/1/16(火) 2:18 回答[未読]
【45853】Re:Enterだけで移動できる? じろう 07/1/16(火) 11:10 発言[未読]
【45859】Re:Enterだけで移動できる? ひげくま 07/1/16(火) 13:38 回答[未読]
【45860】Re:Enterだけで移動できる? ひげくま 07/1/16(火) 13:47 発言[未読]
【45861】Re:Enterだけで移動できる? じろう 07/1/16(火) 14:18 発言[未読]
【45862】Re:Enterだけで移動できる? ひげくま 07/1/16(火) 14:33 発言[未読]
【45864】Re:Enterだけで移動できる? じろう 07/1/16(火) 15:30 発言[未読]
【45863】Re:Enterだけで移動できる? りん 07/1/16(火) 15:26 発言[未読]
【45865】Re:Enterだけで移動できる? ひげくま 07/1/16(火) 15:57 発言[未読]
【45866】Re:Enterだけで移動できる? じろう 07/1/16(火) 16:47 発言[未読]
【45867】Re:Enterだけで移動できる? ひげくま 07/1/16(火) 17:03 発言[未読]
【45868】Re:Enterだけで移動できる? じろう 07/1/16(火) 17:04 発言[未読]
【45869】Re:Enterだけで移動できる? ひげくま 07/1/16(火) 17:20 発言[未読]
【45870】Re:Enterだけで移動できる? じろう 07/1/16(火) 18:07 発言[未読]
【45877】Re:Enterだけで移動できる? ひげくま 07/1/16(火) 21:02 発言[未読]
【45758】Re:Enterだけで移動できる? awu 07/1/13(土) 19:57 回答[未読]
【45759】Re:Enterだけで移動できる? awu 07/1/13(土) 20:27 回答[未読]
【45769】Re:Enterだけで移動できる? じろう 07/1/14(日) 0:36 発言[未読]
【45774】Re:Enterだけで移動できる? awu 07/1/14(日) 1:45 回答[未読]
【45776】Re:Enterだけで移動できる? じろう 07/1/14(日) 2:31 お礼[未読]

【45740】Enterだけで移動できる?
質問  じろう  - 07/1/13(土) 1:13 -

引用なし
パスワード
   他の掲示板で見つけたのですがEnterで移動させたいのですが
よろしくお願いします。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If InStr("DY14,DV54,DV56,DV58,DV60", Target.Cells(1).Address(0, 0)) > 0 Then
  Application.OnKey "{ENTER}", ActiveSheet.CodeName & ".JmpCell"
  Application.OnKey "~", ActiveSheet.CodeName & ".JmpCell"
Else
  Application.OnKey "{ENTER}"
  Application.OnKey "~"
End If
End Sub

Private Sub Worksheet_Deactivate()
  Application.OnKey "{ENTER}"
  Application.OnKey "~"
End Sub

Private Sub JmpCell()
Application.EnableEvents = False
Select Case Selection.Cells(1).Address(0, 0)
  Case "DY14"
    Range("DV54").Activate
  Case "DV54"
    Range("EG54").Activate
  Case "DV56"
    Range("EG56").Activate
  Case "DV58"
    Range("EG58").Activate
  Case "DV60"
    Range("EG60").Activate
End Select
Application.EnableEvents = True
End Sub


◎ ThisWorkbook のモジュールに記述。 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
  Application.OnKey "{ENTER}" 
  Application.OnKey "~" 
End Sub
ここまで参考コードです。

下記のコードのセルに移動するのは入力すれば移動してくれるのですが
セル入力しない場合でもEnterだけでも移動できるようにしたいと考えてます
上記の案はセルからセルですが下記のコードと組み合わせることできませんか。
あまり難しいコードは解りませんので投稿させていただきました。
よろしくお願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
  Select Case Target.Column
    Case 4
      Target.Offset(0, 2).Select
    Case 6
      Target.Offset(0, 2).Select
    Case 11: Target.Offset(1, -8).Activate
  End Select
End Sub

【45742】Re:Enterだけで移動できる?
回答  Kein  - 07/1/13(土) 1:42 -

引用なし
パスワード
   セル選択と入力イベントは削除して・・

Private Sub Worksheet_Activate()
  With Application
   .OnKey "{ENTER}", ActiveSheet.CodeName & ".JmpCell"
   .OnKey "~", ActiveSheet.CodeName & ".JmpCell"
  End With
End Sub

Private Sub Worksheet_Deactivate()
  With Application
   .OnKey "{ENTER}"
   .OnKey "~"
  End With
End Sub

Private Sub JmpCell()
  If TypeName(Selection) <> "Range" Then Exit Sub
  With ActiveCell
   Select Case .Column
     Case 4, 6: .Offset(, 2).Select
     Case 11: .Offset(1, -8).Select
     Case 129
      If .Row = 14 Then .Offset(40, -3).Select
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60: .Offset(, 11).Select
      End Select
   End Select
  End With
End Sub

◎ ThisWorkbook のモジュールに記述。 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
  With Application
   .OnKey "{ENTER}" 
   .OnKey "~"
  End With 
End Sub

ぐらいで良いと思います。
キーにマクロを割り当てるタイミングは、シートアクティブ時点でなくても
特定のセルをダブルクリックした時など、適宜変更すれば良いでしょう。

【45743】Re:Enterだけで移動できる?
発言  じろう  - 07/1/13(土) 2:06 -

引用なし
パスワード
   ▼Kein さん:
回答ありがとうございます。
試したのですがEnterで移動してくれません。
当然該当のセルに入力をすれば移動してくれますが
説明が悪かったのでしょうか
仮に入力しなくてもEnterで移動したいのですが。
よろしくお願いします。

>セル選択と入力イベントは削除して・・
>
>Private Sub Worksheet_Activate()
>  With Application
>   .OnKey "{ENTER}", ActiveSheet.CodeName & ".JmpCell"
>   .OnKey "~", ActiveSheet.CodeName & ".JmpCell"
>  End With
>End Sub
>
>Private Sub Worksheet_Deactivate()
>  With Application
>   .OnKey "{ENTER}"
>   .OnKey "~"
>  End With
>End Sub
>
>Private Sub JmpCell()
>  If TypeName(Selection) <> "Range" Then Exit Sub
>  With ActiveCell
>   Select Case .Column
>     Case 4, 6: .Offset(, 2).Select
>     Case 11: .Offset(1, -8).Select
>     Case 129
>      If .Row = 14 Then .Offset(40, -3).Select
>     Case 126
>      Select Case .Row
>        Case 54, 56, 58, 60: .Offset(, 11).Select
>      End Select
>   End Select
>  End With
>End Sub
>
>◎ ThisWorkbook のモジュールに記述。 
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean) 
>  With Application
>   .OnKey "{ENTER}" 
>   .OnKey "~"
>  End With 
>End Sub
>
>ぐらいで良いと思います。
>キーにマクロを割り当てるタイミングは、シートアクティブ時点でなくても
>特定のセルをダブルクリックした時など、適宜変更すれば良いでしょう。

【45744】Re:Enterだけで移動できる?
発言  Kein  - 07/1/13(土) 2:23 -

引用なし
パスワード
   シートのアクティブイベントというのは「いったん他のシートに移動してから
当該シートに戻ったとき」をトリガーにしてます。だからシートモジュール
に入れただけでは、キーへの割り当てが出来ていないのです。
で、こちらで試してみた結果、JmpCellのコードは以下のように修正する必要が
あることが分かりました。

Private Sub JmpCell()
  If TypeName(Selection) <> "Range" Then Exit Sub
  With ActiveCell
   Select Case .Column
     Case 4, 6: .Offset(, 2).Select
     Case 11: .Offset(1, -8).Select
     Case 129
      If .Row = 14 Then
       .Offset(40, -3).Select
      Else
       .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60: .Offset(, 11).Select
       Case Else: .Offset(1).Select
      End Select
     Case Else: .Offset(1).Select
   End Select
  End With
End Sub

お手数ですが直しておいて下さい。

【45745】Re:Enterだけで移動できる?
発言  じろう  - 07/1/13(土) 3:12 -

引用なし
パスワード
   ▼Kein さん:
ありがとうございます。
私のやり方が悪いのでしょうかEnterキーで移動してくれません。
困った?

>シートのアクティブイベントというのは「いったん他のシートに移動してから
>当該シートに戻ったとき」をトリガーにしてます。だからシートモジュール
>に入れただけでは、キーへの割り当てが出来ていないのです。
>で、こちらで試してみた結果、JmpCellのコードは以下のように修正する必要が
>あることが分かりました。
>
>Private Sub JmpCell()
>  If TypeName(Selection) <> "Range" Then Exit Sub
>  With ActiveCell
>   Select Case .Column
>     Case 4, 6: .Offset(, 2).Select
>     Case 11: .Offset(1, -8).Select
>     Case 129
>      If .Row = 14 Then
>       .Offset(40, -3).Select
>      Else
>       .Offset(1).Select
>      End If
>     Case 126
>      Select Case .Row
>        Case 54, 56, 58, 60: .Offset(, 11).Select
>       Case Else: .Offset(1).Select
>      End Select
>     Case Else: .Offset(1).Select
>   End Select
>  End With
>End Sub
>
>お手数ですが直しておいて下さい。

【45746】Re:Enterだけで移動できる?
発言  じろう  - 07/1/13(土) 3:35 -

引用なし
パスワード
   ▼Kein さん:
追加報告です
まずCase4はCase3の間違いでした
C列とD列入力後E列は飛び越して
F列入力G列飛び越し
H.I.Jが結合セルで入力します
K.L.M.Nが結合セルで入力 完了後
C列に戻るです。
説明ややこしくてすみません。
よろしくお願いします。
現在のコードですとC列は下方向に改行してしまい
H.I.Jの結合セルでまた下方向へ行ってしまいます。

>シートのアクティブイベントというのは「いったん他のシートに移動してから
>当該シートに戻ったとき」をトリガーにしてます。だからシートモジュール
>に入れただけでは、キーへの割り当てが出来ていないのです。
>で、こちらで試してみた結果、JmpCellのコードは以下のように修正する必要が
>あることが分かりました。
>
>Private Sub JmpCell()
>  If TypeName(Selection) <> "Range" Then Exit Sub
>  With ActiveCell
>   Select Case .Column
>     Case 4, 6: .Offset(, 2).Select
>     Case 11: .Offset(1, -8).Select
>     Case 129
>      If .Row = 14 Then
>       .Offset(40, -3).Select
>      Else
>       .Offset(1).Select
>      End If
>     Case 126
>      Select Case .Row
>        Case 54, 56, 58, 60: .Offset(, 11).Select
>       Case Else: .Offset(1).Select
>      End Select
>     Case Else: .Offset(1).Select
>   End Select
>  End With
>End Sub
>
>お手数ですが直しておいて下さい。

【45747】Re:Enterだけで移動できる?
発言  じろう  - 07/1/13(土) 9:58 -

引用なし
パスワード
   ▼Kein さん:
>シートのアクティブイベントというのは「いったん他のシートに移動してから
>当該シートに戻ったとき」をトリガーにしてます。だからシートモジュール
>に入れただけでは、キーへの割り当てが出来ていないのです。
>で、こちらで試してみた結果、JmpCellのコードは以下のように修正する必要が
>あることが分かりました。
>
>Private Sub JmpCell()
>  If TypeName(Selection) <> "Range" Then Exit Sub
>  With ActiveCell
>   Select Case .Column
>     Case 4, 6: .Offset(, 2).Select
>     Case 11: .Offset(1, -8).Select
>     Case 129
>      If .Row = 14 Then
>       .Offset(40, -3).Select
>      Else
>       .Offset(1).Select
>      End If
>     Case 126
>      Select Case .Row
>        Case 54, 56, 58, 60: .Offset(, 11).Select
>       Case Else: .Offset(1).Select
>      End Select
>     Case Else: .Offset(1).Select
>   End Select
>  End With
>End Sub
>
>お手数ですが直しておいて下さい。

Keinさん報告です。
下記の様に修正したところ動作してくれました。
問題ありませんか?
Private Sub JmpCell()
  If TypeName(Selection) <> "Range" Then Exit Sub
  With ActiveCell
   Select Case .Column
     Case 3: .Offset(, 1).Select ’★追加
     Case 4, 6: .Offset(, 2).Select
     Case 8: .Offset(, 1).Select ’★追加
     Case 11: .Offset(1, -8).Select
     Case 129
      If .Row = 14 Then
       .Offset(40, -3).Select
      Else
       .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60: .Offset(, 11).Select
       Case Else: .Offset(1).Select
      End Select
     Case Else: .Offset(1).Select
   End Select
  End With
End Sub

同じbookにもう1sheetあるのですが下記コードです。
ちゃんと動いてくれません。
Private Sub JmpCell()
  If TypeName(Selection) <> "Range" Then Exit Sub
  With ActiveCell
   Select Case .Column
     Case 5: .Offset(, 2).Select ★ココ修正
     Case 22: .Offset(1, -21).Select ★ココ修正
     Case 129 ※ここから下のCase・Selectは何を意味してるのでしょうか?
      If .Row = 14 Then
       .Offset(40, -3).Select
      Else
       .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60: .Offset(, 11).Select
       Case Else: .Offset(1).Select
      End Select
     Case Else: .Offset(1).Select
   End Select
  End With
End Sub
他にも転用したいのでKeinさん申し訳ないのですが
教えていただけませんか。
何度も申し訳ないのですが
よろしくお願いします。

【45751】Re:Enterだけで移動できる?
回答  Kein  - 07/1/13(土) 16:06 -

引用なし
パスワード
   ▼じろう さん:
あー・・どうも。イベントの動作に関しては理解できたようですね。
で、今までは"特定の一枚のシート"でOnKeyを設定することを前提に
していましたが
>もう1sheetあるのですが
ということなら、全体の構成を変更する必要があります。
即ち

1 OnKeyを設定するマクロは、ThisWorkbookモジュールの Sheet_Activate
  イベントにする。解除するマクロも Sheet_Deactivate にする。
2 Private Sub JmpCell は、改造して標準モジュールへ移動

ということになります。で、現在仮に "Sheet1" と "Sheet2" のシートモジュール
にそれらのマクロを入れているとして、まずそれら全てのマクロを削除して下さい。
そして標準モジュールに以下のマクロを入れます。

Sub JmpCell2(Snm As String)
  If TypeName(Selection) <> "Range" Then Exit Sub
  With ActiveCell
   Select Case .Column
     Case 3
      If Snm = "Sheet1" Then
        .Offset(, 1).Select '★追加
      Else
        .Offset(1).Select
      End If
     Case 5
      If Snm = "Sheet2" Then
        .Offset(, 2).Select '★ココ修正
      Else
        .Offset(1).Select
      End If
     Case 4, 6
      .Offset(, 2).Select
     Case 8
      If Snm = "Sheet1" Then
        .Offset(, 1).Select '★追加
      Else
        .Offset(1).Select
      End If
     Case 11
      .Offset(1, -8).Select
     Case 22
      If Snm = "Sheet2" Then
        .Offset(1, -21).Select '★ココ修正
      Else
        .Offset(1).Select
      End If
     Case 129
      If .Row = 14 Then
        .Offset(40, -3).Select
      Else
        .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60: .Offset(, 11).Select
        Case Else: .Offset(1).Select
      End Select
     Case Else
      .Offset(1).Select
   End Select
  End With
End Sub

上のコードは、あなたがUPしたコードと比較してみれば分かると思いますが

1 Sheet1 の特定の列のみで動く部分
2 Sheet2 の特定の列のみで動く部分
3 Sheet1,Sheet2 共通の列で動く部分

で再構成しています。つまり変数 Snm はアクティブシートの名前になります。
いちおう、イベントマクロ以外でOnKeyの設定を解除できるようにするため、
以下のマクロも標準モジュールに入れておいて下さい。

Sub Release_KeyAction()
  With Application
   .OnKey "{ENTER}"
   .OnKey "~"
  End With
End Sub

次に ThisWorkbookモジュール に以下のマクロを入れます。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Dim PrcSet As String
 
  If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
   PrcSet = "'JmpCell2" & Chr(34) & Sh.Name & Chr(34) & "'"
   With Application
     .OnKey "{ENTER}", PrcSet
     .OnKey "~", PrcSet
   End With
  End If
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
  If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
   With Application
     .OnKey "{ENTER}"
     .OnKey "~"
   End With
  End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  With Application
   .OnKey "{ENTER}"
   .OnKey "~"
  End With
End Sub

もちろん Sheet_Activate, Sheet_Deactivate イベントマクロに共通する
>If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
というコードは JmpCell2 と同様に、そちらで正しくシート名を変更して下さい。

【45757】Re:Enterだけで移動できる?
発言  じろう  - 07/1/13(土) 17:45 -

引用なし
パスワード
   ▼Kein さん:
Keinさん忙しいところすみません。
いまはチョットすぐ試せないので
また夜でも報告します。
ありがとうございました。

>あー・・どうも。イベントの動作に関しては理解できたようですね。
>で、今までは"特定の一枚のシート"でOnKeyを設定することを前提に
>していましたが
>>もう1sheetあるのですが
>ということなら、全体の構成を変更する必要があります。
>即ち
>
> 1 OnKeyを設定するマクロは、ThisWorkbookモジュールの Sheet_Activate
>  イベントにする。解除するマクロも Sheet_Deactivate にする。
> 2 Private Sub JmpCell は、改造して標準モジュールへ移動
>
>ということになります。で、現在仮に "Sheet1" と "Sheet2" のシートモジュール
>にそれらのマクロを入れているとして、まずそれら全てのマクロを削除して下さい。
>そして標準モジュールに以下のマクロを入れます。
>
>Sub JmpCell2(Snm As String)
>  If TypeName(Selection) <> "Range" Then Exit Sub
>  With ActiveCell
>   Select Case .Column
>     Case 3
>      If Snm = "Sheet1" Then
>        .Offset(, 1).Select '★追加
>      Else
>        .Offset(1).Select
>      End If
>     Case 5
>      If Snm = "Sheet2" Then
>        .Offset(, 2).Select '★ココ修正
>      Else
>        .Offset(1).Select
>      End If
>     Case 4, 6
>      .Offset(, 2).Select
>     Case 8
>      If Snm = "Sheet1" Then
>        .Offset(, 1).Select '★追加
>      Else
>        .Offset(1).Select
>      End If
>     Case 11
>      .Offset(1, -8).Select
>     Case 22
>      If Snm = "Sheet2" Then
>        .Offset(1, -21).Select '★ココ修正
>      Else
>        .Offset(1).Select
>      End If
>     Case 129
>      If .Row = 14 Then
>        .Offset(40, -3).Select
>      Else
>        .Offset(1).Select
>      End If
>     Case 126
>      Select Case .Row
>        Case 54, 56, 58, 60: .Offset(, 11).Select
>        Case Else: .Offset(1).Select
>      End Select
>     Case Else
>      .Offset(1).Select
>   End Select
>  End With
>End Sub
>
>上のコードは、あなたがUPしたコードと比較してみれば分かると思いますが
>
>1 Sheet1 の特定の列のみで動く部分
>2 Sheet2 の特定の列のみで動く部分
>3 Sheet1,Sheet2 共通の列で動く部分
>
>で再構成しています。つまり変数 Snm はアクティブシートの名前になります。
>いちおう、イベントマクロ以外でOnKeyの設定を解除できるようにするため、
>以下のマクロも標準モジュールに入れておいて下さい。
>
>Sub Release_KeyAction()
>  With Application
>   .OnKey "{ENTER}"
>   .OnKey "~"
>  End With
>End Sub
>
>次に ThisWorkbookモジュール に以下のマクロを入れます。
>
>Private Sub Workbook_SheetActivate(ByVal Sh As Object)
>  Dim PrcSet As String
> 
>  If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
>   PrcSet = "'JmpCell2" & Chr(34) & Sh.Name & Chr(34) & "'"
>   With Application
>     .OnKey "{ENTER}", PrcSet
>     .OnKey "~", PrcSet
>   End With
>  End If
>End Sub
>
>Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
>  If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
>   With Application
>     .OnKey "{ENTER}"
>     .OnKey "~"
>   End With
>  End If
>End Sub
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
>  With Application
>   .OnKey "{ENTER}"
>   .OnKey "~"
>  End With
>End Sub
>
>もちろん Sheet_Activate, Sheet_Deactivate イベントマクロに共通する
>>If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
>というコードは JmpCell2 と同様に、そちらで正しくシート名を変更して下さい。

【45758】Re:Enterだけで移動できる?
回答  awu  - 07/1/13(土) 19:57 -

引用なし
パスワード
   > セル入力しない場合でもEnterだけでも移動できるようにしたいと考えてます
> 上記の案はセルからセルですが下記のコードと組み合わせることできませんか。

なんか、見たことあるコードだと思ったら・・・

こんな感じで如何でしょうか。

◎ 機能させるシートのモジュールに記述します。 Worksheet_Changeは消去します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If InStr("$D$,$F$,$K$", Left(Target.Cells(1).Address, 3)) > 0 Then
  Application.OnKey "{ENTER}", ActiveSheet.CodeName & ".JmpCell"
  Application.OnKey "~", ActiveSheet.CodeName & ".JmpCell"
Else
  Application.OnKey "{ENTER}"
  Application.OnKey "~"
End If
End Sub

Private Sub Worksheet_Deactivate()
  Application.OnKey "{ENTER}"
  Application.OnKey "~"
End Sub

Private Sub JmpCell()
Application.EnableEvents = False
Select Case Selection.Cells(1).Column
  Case 4, 6
    ActiveCell.Offset(, 2).Activate
  Case 11
    ActiveCell.Offset(1, -8).Activate
End Select
Application.EnableEvents = True
End Sub


◎ ThisWorkbook のモジュールに記述。 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
  Application.OnKey "{ENTER}" 
  Application.OnKey "~" 
End Sub

【45759】Re:Enterだけで移動できる?
回答  awu  - 07/1/13(土) 20:27 -

引用なし
パスワード
   ちょっと、機能の仕様により、どちらが使い易いかなのですが・・・

先程のコードですと、F列で<Enter>するとH列に移動しますが、そこで、そのまま
<Enter>すると何処にも移動せず、<Enter>以外で何処か移動させて本来の<Enter>
の移動方向になります。

多分、場合によっては、この方が操作性が良いのかも知れませんが、H列で即本来設定の
<Enter>キーでのセル異動方向にしたい場合は、こんな感じになるかと思います。

Private Sub JmpCell()
Application.EnableEvents = False
Select Case Selection.Cells(1).Column
  Case 4, 6
    ActiveCell.Offset(, 2).Activate
    If ActiveCell.Column = 8 Then
      Application.OnKey "{ENTER}"
      Application.OnKey "~"
    End If
  Case 11
    ActiveCell.Offset(1, -8).Activate
End Select
Application.EnableEvents = True
End Sub

【45769】Re:Enterだけで移動できる?
発言  じろう  - 07/1/14(日) 0:36 -

引用なし
パスワード
   ▼awu さん:
別、掲示板のawuさんのコードを見て質問しました。
早速試してみたのですがC列をスタートし次にC列に戻って来たとき
次に進みません。いかがでしょうか?
ちなみに別掲示板はアクセスできないようですが?・・・

>ちょっと、機能の仕様により、どちらが使い易いかなのですが・・・
>
>先程のコードですと、F列で<Enter>するとH列に移動しますが、そこで、そのまま
><Enter>すると何処にも移動せず、<Enter>以外で何処か移動させて本来の<Enter>
>の移動方向になります。
>
>多分、場合によっては、この方が操作性が良いのかも知れませんが、H列で即本来設定の
><Enter>キーでのセル異動方向にしたい場合は、こんな感じになるかと思います。
>
>Private Sub JmpCell()
>Application.EnableEvents = False
>Select Case Selection.Cells(1).Column
>  Case 4, 6
>    ActiveCell.Offset(, 2).Activate
>    If ActiveCell.Column = 8 Then
>      Application.OnKey "{ENTER}"
>      Application.OnKey "~"
>    End If
>  Case 11
>    ActiveCell.Offset(1, -8).Activate
>End Select
>Application.EnableEvents = True
>End Sub

【45771】Re:Enterだけで移動できる?
お礼  じろう  - 07/1/14(日) 1:14 -

引用なし
パスワード
   Keinさん
報告遅くなりましてすみません
ありがとうございました。
申し分なしです

念のため聞いておきたいのですが
1sheetでの利用の場合
Sub JmpCell2(Snm As String)内のシート名統一と

ThisWorkbookモジュール
  If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
  上記の Or Sh.Name = "Sheet2" ←削除
でいいのでしょうか?

【45772】Re:Enterだけで移動できる?
発言  Kein  - 07/1/14(日) 1:26 -

引用なし
パスワード
   >1sheetでの利用の場合
は、最初の質問の条件となんら変わりませんよね ? それなら私の最初の回答と
次の Sub JmpCell() を修正した回答の組み合わせでオッケーなのでは ?
3度め(07/1/13(土) 16:06)の回答では
>>もう1sheetあるのですが
>ということなら、全体の構成を変更する必要があります。
と、レスしているのですから「もう1sheetがない」なら全体を変更する
必要はなくなる、ということでしょ・・?

【45773】Re:Enterだけで移動できる?
発言  Kein  - 07/1/14(日) 1:33 -

引用なし
パスワード
   それから jumpCell2 のコードですが、よく見ると少し冗長なところが
あるようなので、いちおう修正しておきます。
たいした問題ではなく、結果には何ら影響ありませんが。

Sub JmpCell2(Snm As String)
  If TypeName(Selection) <> "Range" Then Exit Sub
  With ActiveCell
   Select Case .Column
     Case 3, 8 '←8列目も全く同じ動作になるので集約できる
      If Snm = "Sheet1" Then
        .Offset(, 1).Select '★追加
      Else
        .Offset(1).Select
      End If
     Case 5
      If Snm = "Sheet2" Then
        .Offset(, 2).Select '★ココ修正
      Else
        .Offset(1).Select
      End If
     Case 4, 6
      .Offset(, 2).Select
     Case 11
      .Offset(1, -8).Select
     Case 22
      If Snm = "Sheet2" Then
        .Offset(1, -21).Select '★ココ修正
      Else
        .Offset(1).Select
      End If
     Case 129
      If .Row = 14 Then
        .Offset(40, -3).Select
      Else
        .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60: .Offset(, 11).Select
        Case Else: .Offset(1).Select
      End Select
     Case Else
      .Offset(1).Select
   End Select
  End With
End Sub

【45774】Re:Enterだけで移動できる?
回答  awu  - 07/1/14(日) 1:45 -

引用なし
パスワード
   > C列をスタートし次にC列に戻って来たとき 次に進みません。いかがでしょうか?

それは、じろう さんが、当初提示した Worksheet_Changeイベントのコードを
解析しただけでは、想定出来ない仕様だからです。
Case 4 (D列)から始まっていたからです。

たぶん、オプションの設定で「入力後に移動する」の「方向」を「右」にしていた
ものと推測します。

それで、<Enter>で所定の位置に移動すべき箇所は、その設定に左右されないように
しています。 今度は、C列も追加しました。

あと、H列からK列へは直接飛ばなくていいのですね。

それなら、こんな感じです。 あとは、解析して適当にいじってください。

Kein さん ごめんなさい。 横から口を挟んで。


◎ 機能させるシートのモジュールに記述します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If InStr("$C$,$D$,$F$,$K$", Left(Target.Cells(1).Address, 3)) > 0 Then
  Application.OnKey "{ENTER}", ActiveSheet.CodeName & ".JmpCell"
  Application.OnKey "~", ActiveSheet.CodeName & ".JmpCell"
Else
  Application.OnKey "{ENTER}"
  Application.OnKey "~"
End If
End Sub

Private Sub Worksheet_Deactivate()
  Application.OnKey "{ENTER}"
  Application.OnKey "~"
End Sub

Private Sub JmpCell()
Application.EnableEvents = False
Select Case Selection.Cells(1).Column
  Case 3
    ActiveCell.Offset(, 1).Activate
  Case 4, 6
    ActiveCell.Offset(, 2).Activate
    ' --- 以下は、H列で一旦止める場合不要 ---------
    If ActiveCell.Column = 8 Then
      Application.OnKey "{ENTER}"
      Application.OnKey "~"
    End If
    ' ---------------------------------------------
  Case 11
    ActiveCell.Offset(1, -8).Activate
End Select
Application.EnableEvents = True
End Sub


◎ ThisWorkbook のモジュールに記述。 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
  Application.OnKey "{ENTER}" 
  Application.OnKey "~" 
End Sub


> ちなみに別掲示板はアクセスできないようですが?・・・

そうですね。 停止にする直前に当方の書き込みが空欄になってしまって変だと思って
いました。 悪い人いるんですね。 うぅ〜ん・・・困ったもんですね。

【45775】Re:Enterだけで移動できる?
発言  じろう  - 07/1/14(日) 2:29 -

引用なし
パスワード
   ▼Kein さん:
またまた修正ありがとうございます。
1sheetの件ですが今後また何かのsheetを作成する場合簡単な修正で
できればなとのおもいでお聞きしました。
今回のシートは先にもお願いしたように2sheetあります。

>私の最初の回答と
>次の Sub JmpCell() を修正した回答の組み合わせでオッケーなのでは ?
下記の私が付け足したものということですか?

Private Sub Worksheet_Activate()
  With Application
   .OnKey "{ENTER}", ActiveSheet.CodeName & ".JmpCell"
   .OnKey "~", ActiveSheet.CodeName & ".JmpCell"
  End With
End Sub

Private Sub Worksheet_Deactivate()
  With Application
   .OnKey "{ENTER}"
   .OnKey "~"
  End With
End Sub
Private Sub JmpCell()
  If TypeName(Selection) <> "Range" Then Exit Sub
  With ActiveCell
   Select Case .Column
     Case 3: .Offset(, 1).Select '★追加
     Case 4, 6: .Offset(, 2).Select
     Case 8: .Offset(, 1).Select '★追加
     Case 9: .Offset(, 1).Select '★追加
     Case 10: .Offset(, 1).Select '★追加
     Case 11: .Offset(1, -8).Select
     Case 129
      If .Row = 14 Then
       .Offset(40, -3).Select
      Else
       .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60: .Offset(, 11).Select
       Case Else: .Offset(1).Select
      End Select
     Case Else: .Offset(1).Select
   End Select
  End With
End Sub

◎ ThisWorkbook のモジュールに記述。 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
  With Application
   .OnKey "{ENTER}" 
   .OnKey "~"
  End With 
End Sub

【45776】Re:Enterだけで移動できる?
お礼  じろう  - 07/1/14(日) 2:31 -

引用なし
パスワード
   ▼awu さん:
うまくいきました。
ありがとうございました。
あちらも早く再開してくれるといいですね!
また、お願いします。

>> C列をスタートし次にC列に戻って来たとき 次に進みません。いかがでしょうか?
>
>それは、じろう さんが、当初提示した Worksheet_Changeイベントのコードを
>解析しただけでは、想定出来ない仕様だからです。
>Case 4 (D列)から始まっていたからです。
>
>たぶん、オプションの設定で「入力後に移動する」の「方向」を「右」にしていた
>ものと推測します。
>
>それで、<Enter>で所定の位置に移動すべき箇所は、その設定に左右されないように
>しています。 今度は、C列も追加しました。
>
>あと、H列からK列へは直接飛ばなくていいのですね。
>
>それなら、こんな感じです。 あとは、解析して適当にいじってください。
>
>Kein さん ごめんなさい。 横から口を挟んで。
>
>
>◎ 機能させるシートのモジュールに記述します。
>
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>If InStr("$C$,$D$,$F$,$K$", Left(Target.Cells(1).Address, 3)) > 0 Then
>  Application.OnKey "{ENTER}", ActiveSheet.CodeName & ".JmpCell"
>  Application.OnKey "~", ActiveSheet.CodeName & ".JmpCell"
>Else
>  Application.OnKey "{ENTER}"
>  Application.OnKey "~"
>End If
>End Sub
>
>Private Sub Worksheet_Deactivate()
>  Application.OnKey "{ENTER}"
>  Application.OnKey "~"
>End Sub
>
>Private Sub JmpCell()
>Application.EnableEvents = False
>Select Case Selection.Cells(1).Column
>  Case 3
>    ActiveCell.Offset(, 1).Activate
>  Case 4, 6
>    ActiveCell.Offset(, 2).Activate
>    ' --- 以下は、H列で一旦止める場合不要 ---------
>    If ActiveCell.Column = 8 Then
>      Application.OnKey "{ENTER}"
>      Application.OnKey "~"
>    End If
>    ' ---------------------------------------------
>  Case 11
>    ActiveCell.Offset(1, -8).Activate
>End Select
>Application.EnableEvents = True
>End Sub
>
>
>◎ ThisWorkbook のモジュールに記述。 
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean) 
>  Application.OnKey "{ENTER}" 
>  Application.OnKey "~" 
>End Sub
>
>
>> ちなみに別掲示板はアクセスできないようですが?・・・
>
>そうですね。 停止にする直前に当方の書き込みが空欄になってしまって変だと思って
>いました。 悪い人いるんですね。 うぅ〜ん・・・困ったもんですね。

【45778】Re:Enterだけで移動できる?
発言  Kein  - 07/1/14(日) 2:56 -

引用なし
パスワード
   >今後また何かのsheetを作成する場合簡単な修正でできれば
そーいうことなら話は別です。でも JumpCell2 のコードを見て分かるように、
シート2枚分の判定を織り込むだけでもあれだけ長くなるのですから、
仮に5枚のシート毎に動作を振り分けようとすると、複雑すぎて何が何やら
分からなくなるでしょう。そんなときは無理に一つのプロシージャにまとめよう
とせず「各シート毎に動作を規定した独立したプロシージャを割り当てる」という
方向で作成したら良いと思います。その場合、キーにプロシージャを割り当てる
イベントマクロは・・

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Dim Snm As String, PrcSet As String
 
  Snm = Sh.Name
  Select Case Snm
   Case "Sheet1": PrcSet = "JmpCell_S1"
   Case "Sheet3": PrcSet = "JumpCell_S3"
   Case "Sheet5": PrcSet = "JumpCell_S5"
   Case "Sheet10": PrcSet = "JumpCell_S10"
   Case "Sheet12": PrcSet = "JumpCell_S12"
   Case Else: Exit Sub
  End Select
  With Application
   .OnKey "{ENTER}", PrcSet
   .OnKey "~", PrcSet
  End With
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
  Select Case Sh.Name
   Case "Sheet1", "Sheet3", "Sheet5", "Sheet10", "Sheet12"
     With Application
      .OnKey "{ENTER}", PrcSet
      .OnKey "~", PrcSet
     End With
  End Select
End Sub

などとして、標準モジュールに JumpCell_S? のプロシージャを5つ作ります。

【45779】Re:Enterだけで移動できる?
発言  Kein  - 07/1/14(日) 2:59 -

引用なし
パスワード
   間違えました。Deactvateイベントの方は

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
  Select Case Sh.Name
   Case "Sheet1", "Sheet3", "Sheet5", "Sheet10", "Sheet12"
     With Application
      .OnKey "{ENTER}"
      .OnKey "~"
     End With
  End Select
End Sub

と、割り当てを開放するコードにします。すいません。

【45780】Re:Enterだけで移動できる?
お礼  じろう  - 07/1/14(日) 3:42 -

引用なし
パスワード
   ▼Kein さん:
なるほど!これならsheetの数毎にいくらでも
追加したり、消したりシート数に合わせればいいんですね
貴重なコードありがとうございました。
ながながお付き合い下さいまして本当に
助かりました。また、教えて下さい。
感謝です。(^^)/~~~

>間違えました。Deactvateイベントの方は
>
>Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
>  Select Case Sh.Name
>   Case "Sheet1", "Sheet3", "Sheet5", "Sheet10", "Sheet12"
>     With Application
>      .OnKey "{ENTER}"
>      .OnKey "~"
>     End With
>  End Select
>End Sub
>
>と、割り当てを開放するコードにします。すいません。

【45782】Re:Enterだけで移動できる?
質問  じろう  - 07/1/14(日) 4:53 -

引用なし
パスワード
   ▼Kein さん:
ちょっと不具合がでるのですが
内容はsheet1[支払入力]で作業後
Sheet2[発注先]で作業のちさらに
Sheet1[支払入力]で作業しようとすると
Enterで下移動しか出来なくなってしまうのですが
なにか原因わかりますか?
よろしくお願いします。

>それから jumpCell2 のコードですが、よく見ると少し冗長なところが
>あるようなので、いちおう修正しておきます。
>たいした問題ではなく、結果には何ら影響ありませんが。
>
>Sub JmpCell2(Snm As String)
>  If TypeName(Selection) <> "Range" Then Exit Sub
>  With ActiveCell
>   Select Case .Column
>     Case 3, 8 '←8列目も全く同じ動作になるので集約できる
>      If Snm = "Sheet1" Then
>        .Offset(, 1).Select '★追加
>      Else
>        .Offset(1).Select
>      End If
>     Case 5
>      If Snm = "Sheet2" Then
>        .Offset(, 2).Select '★ココ修正
>      Else
>        .Offset(1).Select
>      End If
>     Case 4, 6
>      .Offset(, 2).Select
>     Case 11
>      .Offset(1, -8).Select
>     Case 22
>      If Snm = "Sheet2" Then
>        .Offset(1, -21).Select '★ココ修正
>      Else
>        .Offset(1).Select
>      End If
>     Case 129
>      If .Row = 14 Then
>        .Offset(40, -3).Select
>      Else
>        .Offset(1).Select
>      End If
>     Case 126
>      Select Case .Row
>        Case 54, 56, 58, 60: .Offset(, 11).Select
>        Case Else: .Offset(1).Select
>      End Select
>     Case Else
>      .Offset(1).Select
>   End Select
>  End With
>End Sub

【45795】Re:Enterだけで移動できる?
発言  Kein  - 07/1/14(日) 17:10 -

引用なし
パスワード
   こちらで再度テストしてみましたが、問題なく動作してますよ。
ThisWorkbookモジュールのイベントマクロと、標準モジュールの
JumpCell2 の3つのマクロについて、シート名が正しいかどうか
よくチェックしてみて下さい。シート名を変更した際、スペース
などが混入してしまうと、別のシートとして扱われます。
そのような点にも注意が必要です。

【45813】Re:Enterだけで移動できる?
発言  じろう  - 07/1/15(月) 0:38 -

引用なし
パスワード
   ▼Kein さん:
>こちらで再度テストしてみましたが、問題なく動作してますよ。
>ThisWorkbookモジュールのイベントマクロと、標準モジュールの
>JumpCell2 の3つのマクロについて、シート名が正しいかどうか
>よくチェックしてみて下さい。シート名を変更した際、スペース
>などが混入してしまうと、別のシートとして扱われます。
>そのような点にも注意が必要です。

返事ありがとうございます。
やはり新規bookを立ち上げ実行したのですが
Enterで下に改行してしまいます。
Sheet1またはSheet2どちらかの作業が終了し次のSheetで作業
連続して作業した場合です。
すみませんもう一度確認お願いします。

【45814】Re:Enterだけで移動できる?
発言  じろう  - 07/1/15(月) 1:06 -

引用なし
パスワード
   ▼Kein さん:
>こちらで再度テストしてみましたが、問題なく動作してますよ。
>ThisWorkbookモジュールのイベントマクロと、標準モジュールの
>JumpCell2 の3つのマクロについて、シート名が正しいかどうか
>よくチェックしてみて下さい。シート名を変更した際、スペース
>などが混入してしまうと、別のシートとして扱われます。
>そのような点にも注意が必要です。

上記のことを考慮して新規bookで試してみたのですが
やはりsheet交互に実行するとEnterで下改行してしまいます。

【45823】Re:Enterだけで移動できる?
回答  Kein  - 07/1/15(月) 14:23 -

引用なし
パスワード
   では JmpCell2 を以下のコードと差し替え

Sub JmpCell3()
  Dim Snm As String

  If TypeName(Selection) <> "Range" Then Exit Sub
  Snm = ActiveSheet.Name
  With ActiveCell
   Select Case .Column
     Case 3, 8
      If Snm = "Sheet1" Then
        .Offset(, 1).Select
      Else
        .Offset(1).Select
      End If
     Case 5
      If Snm = "Sheet2" Then
        .Offset(, 2).Select
      Else
        .Offset(1).Select
      End If
     Case 4, 6
      If Snm = "Sheet1" Or Snm = "Sheet2" Then
       .Offset(, 2).Select
      Else
        .Offset(1).Select
      End If
     Case 11
      If Snm = "Sheet1" Or Snm = "Sheet2" Then
        .Offset(1, -8).Select
      Else
       .Offset(1).Select
      End If
     Case 22
      If Snm = "Sheet2" Then
        .Offset(1, -21).Select
      Else
        .Offset(1).Select
      End If
     Case 129
      If .Row = 14 Then
       If Snm = "Sheet1" Or Snm = "Sheet2" Then
         .Offset(40, -3).Select
        Else
         .Offset(1).Select
        End If
      Else
        .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60
         If Snm = "Sheet1" Or Snm = "Sheet2" Then
          .Offset(, 11).Select
         Else
           .Offset(1).Select
         End If
        Case Else: .Offset(1).Select
      End Select
     Case Else
      .Offset(1).Select
   End Select
  End With
End Sub

ThisWorkbookモジュールの Workbook_SheetActivate と SheetDeactivate は
消して

Private Sub Workbook_Open()
  With Application
   .OnKey "{ENTER}", "JumpCell3"
   .OnKey "~", "JumpCell3"
  End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  With Application
   .OnKey "{ENTER}"
   .OnKey "~"
  End With
  ThisWorkbook.Save
End Sub 

を入れ、いったんブックを閉じてから再度開いて、テストしてみて下さい。

【45843】Re:Enterだけで移動できる?
発言  じろう  - 07/1/16(火) 1:46 -

引用なし
パスワード
   ▼Kein さん:
再アップありがとうございます。
残念なんですが症状は変わりません。
まずSheet1ですがC列すたーとでI列まで行きその後はI列で
下改行を繰り返しになります。
それからSheet2ですがA.B.C列が下改行D列でH迄行き下改行
なってしまいます。やはりシート毎設定した方がいいのですかね
解らなくなりました。(-_-;)

>では JmpCell2 を以下のコードと差し替え
>
>Sub JmpCell3()
>  Dim Snm As String
>
>  If TypeName(Selection) <> "Range" Then Exit Sub
>  Snm = ActiveSheet.Name
>  With ActiveCell
>   Select Case .Column
>     Case 3, 8
>      If Snm = "Sheet1" Then
>        .Offset(, 1).Select
>      Else
>        .Offset(1).Select
>      End If
>     Case 5
>      If Snm = "Sheet2" Then
>        .Offset(, 2).Select
>      Else
>        .Offset(1).Select
>      End If
>     Case 4, 6
>      If Snm = "Sheet1" Or Snm = "Sheet2" Then
>       .Offset(, 2).Select
>      Else
>        .Offset(1).Select
>      End If
>     Case 11
>      If Snm = "Sheet1" Or Snm = "Sheet2" Then
>        .Offset(1, -8).Select
>      Else
>       .Offset(1).Select
>      End If
>     Case 22
>      If Snm = "Sheet2" Then
>        .Offset(1, -21).Select
>      Else
>        .Offset(1).Select
>      End If
>     Case 129
>      If .Row = 14 Then
>       If Snm = "Sheet1" Or Snm = "Sheet2" Then
>         .Offset(40, -3).Select
>        Else
>         .Offset(1).Select
>        End If
>      Else
>        .Offset(1).Select
>      End If
>     Case 126
>      Select Case .Row
>        Case 54, 56, 58, 60
>         If Snm = "Sheet1" Or Snm = "Sheet2" Then
>          .Offset(, 11).Select
>         Else
>           .Offset(1).Select
>         End If
>        Case Else: .Offset(1).Select
>      End Select
>     Case Else
>      .Offset(1).Select
>   End Select
>  End With
>End Sub
>
>ThisWorkbookモジュールの Workbook_SheetActivate と SheetDeactivate は
>消して
>
>Private Sub Workbook_Open()
>  With Application
>   .OnKey "{ENTER}", "JumpCell3"
>   .OnKey "~", "JumpCell3"
>  End With
>End Sub
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
>  With Application
>   .OnKey "{ENTER}"
>   .OnKey "~"
>  End With
>  ThisWorkbook.Save
>End Sub 
>
>を入れ、いったんブックを閉じてから再度開いて、テストしてみて下さい。

【45844】Re:Enterだけで移動できる?
回答  Kein  - 07/1/16(火) 2:18 -

引用なし
パスワード
   I列というと Select Case の中で Case 9 を作ってなければ設定できない、
ということは分かりますか ? 不満を言うだけでなく、コードの中身をよく調べて
改造すれば、自分のやりたいことが直ぐに実現できるはずです。長いコードでは
あるけど、難しいところは一つもないからです。
希望どうりの動作をするコードを提示してもらうまで、おんぶにだっこで甘えよう
としてはいけません。

【45853】Re:Enterだけで移動できる?
発言  じろう  - 07/1/16(火) 11:10 -

引用なし
パスワード
    ▼Kein さん:
わかりやすくするために下記のように修正してみました
Sub JumpCell3()
  Dim Snm As String

  If TypeName(Selection) <> "Range" Then Exit Sub
  Snm = ActiveSheet.Name
  With ActiveCell
   Select Case .Column
     Case 3, 8, 9, 10
      If Snm = "Sheet1" Then
        .Offset(, 1).Select
      Else
        .Offset(1).Select
      End If
     Case 4, 6
      If Snm = "Sheet1" Then
       .Offset(, 2).Select
      Else
        .Offset(1).Select
      End If
     Case 11
      If Snm = "Sheet1" Then
        .Offset(1, -8).Select
      Else
       .Offset(1).Select
      End If
     Case 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
      If Snm = "Sheet2" Then
        .Offset(, 1).Select
      Else
        .Offset(1).Select
      End If
     Case 4, 20
      If Snm = "Sheet2" Then
        .Offset(, 2).Select
      Else
        .Offset(1).Select
      End If
     Case 22
      If Snm = "Sheet2" Then
        .Offset(1, -21).Select
      Else
        .Offset(1).Select
      End If
     Case 129
      If .Row = 14 Then
       If Snm = "Sheet1" Or Snm = "Sheet2" Then
         .Offset(40, -3).Select
        Else
         .Offset(1).Select
        End If
      Else
        .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60
         If Snm = "Sheet1" Or Snm = "Sheet2" Then
          .Offset(, 11).Select
         Else
           .Offset(1).Select
         End If
        Case Else: .Offset(1).Select
      End Select
     Case Else
      .Offset(1).Select
   End Select
  End With
End Sub

結果ですがsheet1はOK
しかしsheet2はC.D.F.H.J.K列が下に改行してしまいます。
     Case 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
      If Snm = "Sheet2" Then
        .Offset(, 1).Select
      Else
        .Offset(1).Select
      End If
上記コードにて1つ右へ行くはずでは、?
この辺がどうもわかりません
解説お願いします。

>I列というと Select Case の中で Case 9 を作ってなければ設定できない、
>ということは分かりますか ? 不満を言うだけでなく、コードの中身をよく調べて
>改造すれば、自分のやりたいことが直ぐに実現できるはずです。長いコードでは
>あるけど、難しいところは一つもないからです。
>希望どうりの動作をするコードを提示してもらうまで、おんぶにだっこで甘えよう
>としてはいけません。

提示して貰うまで待っていたのではなく色々きっはったを試みたのですが
どうしても下へ改行してしまう理由がわからないため再質問となりました。
KeinさんEnterで下へというコード(指令)は上記コードでは、見あたらないの
ですが?

【45859】Re:Enterだけで移動できる?
回答  ひげくま  - 07/1/16(火) 13:38 -

引用なし
パスワード
   ▼じろう さん:
こんにちは。
横から失礼します。

 Select Case .Column
 Case 3, 8, 9, 10
  '処理(1)
 Case 4, 6
  '処理(2)
 Case 11
  '処理(3)
 Case 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
  '処理(4)
 :
 :
 End Select

というようになっていますが、.Column=3 (C列) の場合は、処理(1)を実行した後に End Select までジャンプしてしまい、処理(4)は実行されませんよ。

【45860】Re:Enterだけで移動できる?
発言  ひげくま  - 07/1/16(火) 13:47 -

引用なし
パスワード
   追記です。
F8 でステップイン実行すると、今回のような場合は、確認できますよ。

【45861】Re:Enterだけで移動できる?
発言  じろう  - 07/1/16(火) 14:18 -

引用なし
パスワード
   ▼ひげくま さん:
>追記です。
>F8 でステップイン実行すると、今回のような場合は、確認できますよ。

ありがとうございます。F8で確認しました確かに飛んでしまいます。
申し訳ないですが対処方法はありますか。
今過去データを調べているのですが・・・

【45862】Re:Enterだけで移動できる?
発言  ひげくま  - 07/1/16(火) 14:33 -

引用なし
パスワード
   ▼じろう さん:
>申し訳ないですが対処方法はありますか。

今どういう状況で困っていて、それをどうしたいのでしょうか?
これらを文章で明確に出来れば、それをそのままコーディングするだけだと思うのですが。

【45863】Re:Enterだけで移動できる?
発言  りん E-MAIL  - 07/1/16(火) 15:26 -

引用なし
パスワード
   じろう さん、こんにちわ。

Select Caseの分岐はヒットすると該当の処理をして分岐終了なので、

>   Select Case .Column
>     Case 3 , 8 , 9 , 10
>     Case 4 , 6
>     Case 11
>     Case 1, 2, 3 , 5, 6 , 7, 8 , 9 , 10 , 11 , 12, 13, 14, 15, 16, 17, 18, 19
>     Case 4, 20
>     Case 22
>     Case 129
>     Case 126
>     Case Else

>   End Select

下線部が重複、そのうち太字の部分は通りません。
どういう分岐にしたいのか、もう一度整理してみてはいかがですか?

【45864】Re:Enterだけで移動できる?
発言  じろう  - 07/1/16(火) 15:30 -

引用なし
パスワード
   ▼ひげくま さん:
>▼じろう さん:
>>申し訳ないですが対処方法はありますか。
>
>今どういう状況で困っていて、それをどうしたいのでしょうか?
>これらを文章で明確に出来れば、それをそのままコーディングするだけだと思うのですが。
ありがとうございます。状況を説明しますと
sheet1,2においてEnterでセルに入力してもしなくても規則的に1つ右一つ飛び越し
2つ右あるいは1行改行で元に戻ると言う作業を実施したくスレッドを立ち上げた
のですがどうしても動きがうまく動作してくれずいまの状況です。
Keinさんに試行錯誤いただいたのですが私のPC上では動作が安定しません。

sheet1はCスタートで
Enterで1ヶ右→2ヶ右→2ヶ右→1ヶ右→K列が最終[一部結合セルがあるためKです]次にsheet2で
A列スタートで
E列まで1つづつEで2ヶ右→Tまで1つづつTで2つ右→Vで折り返し改行A列への
作業をしたかったのですが
[45823]にてKeinさんにコードを作成いただきテストしているのですが
下改行してしまったりしていまして、動作が・・・
こんな説明で解りますか。よろしくお願いします。
今下記のコードでsheet1はOK予定通り動いてくれています
但しsheet2が
A.B列は右C.D列は下改行E列右OK F列下改行H.I.J.K下Lからは希望通り動作しま
す。
Sub JumpCell3()
  Dim Snm As String

  If TypeName(Selection) <> "Range" Then Exit Sub
  Snm = ActiveSheet.Name
  With ActiveCell
   Select Case .Column
     Case 3, 8, 9, 10
      If Snm = "Sheet1" Then
        .Offset(, 1).Select
      Else
        .Offset(1).Select
      End If
     Case 4, 6
      If Snm = "Sheet1" Then
       .Offset(, 2).Select
      Else
        .Offset(1).Select
      End If
     Case 11
      If Snm = "Sheet1" Then
        .Offset(1, -8).Select
      Else
       .Offset(1).Select
      End If
     Case 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
      If Snm = "Sheet2" Then
        .Offset(, 1).Select
      Else
        .Offset(1).Select
      End If
     Case 4, 20
      If Snm = "Sheet2" Then
        .Offset(, 2).Select
      Else
        .Offset(1).Select
      End If
     Case 22
      If Snm = "Sheet2" Then
        .Offset(1, -21).Select
      Else
        .Offset(1).Select
      End If
     Case 129
      If .Row = 14 Then
       If Snm = "Sheet1" Or Snm = "Sheet2" Then
         .Offset(40, -3).Select
        Else
         .Offset(1).Select
        End If
      Else
        .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60
         If Snm = "Sheet1" Or Snm = "Sheet2" Then
          .Offset(, 11).Select
         Else
           .Offset(1).Select
         End If
        Case Else: .Offset(1).Select
      End Select
     Case Else
      .Offset(1).Select
   End Select
  End With
 
End Sub

【45865】Re:Enterだけで移動できる?
発言  ひげくま  - 07/1/16(火) 15:57 -

引用なし
パスワード
   ▼じろう さん:
>ありがとうございます。F8で確認しました確かに飛んでしまいます。

Select Case 構文では、「飛んでしまう」のが異常な動作なのではなく、「飛ぶ」のが当たり前なのです。
そういうコードを書いているのです。

なので、たとえば

 x = 1
 Select Case x
 Case 1
  y = 10
 Case 1
  y = 20
 Case 1
  y = 30
 End Select

のように Case 1 をたくさん書いても、最初の Case 1 の y = 10 しか実行されずに、y の値は 10 になります。

これは理解していますか?

【45866】Re:Enterだけで移動できる?
発言  じろう  - 07/1/16(火) 16:47 -

引用なし
パスワード
   ▼ひげくま さん:
下記解説ありがとうございます。
↓を踏まえ下記のようにしてみたのですが
どうしてもsheet2のK[11]が右へ行かず下改行してしまいます。
下記の説明ですと
     Case 11
      If Snm = "Sheet1" Then
が重複してしまうのでまずいと思うのですがいかがですか?

Sub JumpCell3()
  Dim Snm As String

  If TypeName(Selection) <> "Range" Then Exit Sub
  Snm = ActiveSheet.Name
  With ActiveCell
   Select Case .Column
     Case 3, 8, 9, 10
      If Snm = "Sheet1" Or Snm = "Sheet2" Then
        .Offset(, 1).Select
      Else
        .Offset(1).Select
      End If
     Case 4, 6
      If Snm = "Sheet1" Or Snm = "Sheet2" Then
       .Offset(, 2).Select
      Else
        .Offset(1).Select
      End If
     Case 11
      If Snm = "Sheet1" Then
        .Offset(1, -8).Select
      Else
       .Offset(1).Select
      End If
     Case 1, 2, 5, 6, 7, 12, 13, 14, 15, 16, 17, 18, 19
      If Snm = "Sheet2" Then
        .Offset(, 1).Select
      Else
        .Offset(1).Select
      End If
     Case 20
      If Snm = "Sheet2" Then
        .Offset(, 2).Select
      Else
        .Offset(1).Select
      End If
     Case 22
      If Snm = "Sheet2" Then
        .Offset(1, -21).Select
      Else
        .Offset(1).Select
      End If
     Case 129
      If .Row = 14 Then
       If Snm = "Sheet1" Or Snm = "Sheet2" Then
         .Offset(40, -3).Select
        Else
         .Offset(1).Select
        End If
      Else
        .Offset(1).Select
      End If
     Case 126
      Select Case .Row
        Case 54, 56, 58, 60
         If Snm = "Sheet1" Or Snm = "Sheet2" Then
          .Offset(, 11).Select
         Else
           .Offset(1).Select
         End If
        Case Else: .Offset(1).Select
      End Select
     Case Else
      .Offset(1).Select
   End Select
  End With
 
End Sub
>>ありがとうございます。F8で確認しました確かに飛んでしまいます。
>
>Select Case 構文では、「飛んでしまう」のが異常な動作なのではなく、「飛ぶ」のが当たり前なのです。
>そういうコードを書いているのです。
>
>なので、たとえば
>
> x = 1
> Select Case x
> Case 1
>  y = 10
> Case 1
>  y = 20
> Case 1
>  y = 30
> End Select
>
>のように Case 1 をたくさん書いても、最初の Case 1 の y = 10 しか実行されずに、y の値は 10 になります。
>
>これは理解していますか?

【45867】Re:Enterだけで移動できる?
発言  ひげくま  - 07/1/16(火) 17:03 -

引用なし
パスワード
   ▼じろう さん:
> どうしてもsheet2のK[11]が右へ行かず下改行してしまいます。

F8 でプログラムがどこをどう走っているのかを確認してください。
そして、意図しない分岐が無いかどうか調べてください。
意図しない分岐を見つけたら、なぜそのように分岐するのかを分析してください。

ここまでやって、それでも解らない場合に、何をどうやって調べて、どこがどうおかしいのかを明記して、質問したほうが良いと思いますよ。

>下記の説明ですと
>     Case 11
>      If Snm = "Sheet1" Then
>が重複してしまうのでまずいと思うのですがいかがですか?

何と何が重複しているのか解りません。

>     Case 11
>      If Snm = "Sheet1" Then
>        .Offset(1, -8).Select
>      Else
>       .Offset(1).Select ※
>      End If

※のところは通っていると思います。

.Offset(1).Select では、下のセルが選択されて当たり前ですよ。
.Offset(, 1).Select にしないと、右のセルは選択されませんよ。

この2つの違いは理解していますか?
.Offset(x, y).Select の意味は理解しているんですよね?

【45868】Re:Enterだけで移動できる?
発言  じろう  - 07/1/16(火) 17:04 -

引用なし
パスワード
   追伸6[F]をとばすのはSheet1だけでSheet2は6は飛ばしたくないんです。
ようするに6と11はSheet1と2で動きが違うと言うことお言いたいのです。

【45869】Re:Enterだけで移動できる?
発言  ひげくま  - 07/1/16(火) 17:20 -

引用なし
パスワード
   ▼じろう さん:
>追伸6[F]をとばすのはSheet1だけでSheet2は6は飛ばしたくないんです。
>ようするに6と11はSheet1と2で動きが違うと言うことお言いたいのです。

失礼ですが、じろうさんはおいくつですか?

Sheet1とSheet2で別の動作をさせるために、

 If Snm = "Sheet2" Then
   .Offset(1, -21).Select
 Else
   .Offset(1).Select
 End If

というように、If Else 構文で場合わけをしているんですよね?

Select Case 構文にしろ、If Else 構文にしろ、理解していますか?

いっそのこと、

 If Snm = "Sheet1" Then
  Select Case .Column
  Case 1
   'Sheet1 A列の処理
  Case 2
   'Sheet1 B列の処理
  Case 3
   'Sheet1 C列の処理
  Case 4
   'Sheet1 D列の処理
  :
  :
  Case Else
   'Sheet1 上記で指定しなかった列の処理
  End Select
 End If

 If Snm = "Sheet2" Then
  Select Case .Column
  Case 1
   'Sheet2 A列の処理
  Case 2
   'Sheet2 B列の処理
  Case 3
   'Sheet2 C列の処理
  Case 4
   'Sheet2 D列の処理
  :
  :
  Case Else
   'Sheet2 上記で指定しなかった列の処理
  End Select
 End If

と書いたほうが解りやすかったりしませんか?

【45870】Re:Enterだけで移動できる?
発言  じろう  - 07/1/16(火) 18:07 -

引用なし
パスワード
   ▼ひげくま さん:
返事ありがとうございます。

Keinさんのコードをみてわかるように
sheet1・sheet2で共通の動きをするものは
同じCaseにまとめてあります。
ひげくまさんの言うとおりかも知れませんが
Keinさんの意図があるものと思います。
例えばコード自体短くできる等・・

>>追伸6[F]をとばすのはSheet1だけでSheet2は6は飛ばしたくないんです。
>>ようするに6と11はSheet1と2で動きが違うと言うことお言いたいのです。
>
>失礼ですが、じろうさんはおいくつですか?
掲示板で初めて聞かれましたが何か必要ですか?
理解していないとか?

>
>Sheet1とSheet2で別の動作をさせるために、
>
> If Snm = "Sheet2" Then
>   .Offset(1, -21).Select
> Else
>   .Offset(1).Select
> End If
>
>というように、If Else 構文で場合わけをしているんですよね?
>
>Select Case 構文にしろ、If Else 構文にしろ、理解していますか?
>
>いっそのこと、
>
> If Snm = "Sheet1" Then
>  Select Case .Column
>  Case 1
>   'Sheet1 A列の処理
>  Case 2
>   'Sheet1 B列の処理
>  Case 3
>   'Sheet1 C列の処理
>  Case 4
>   'Sheet1 D列の処理
>  :
>  :
>  Case Else
>   'Sheet1 上記で指定しなかった列の処理
>  End Select
> End If
>
> If Snm = "Sheet2" Then
>  Select Case .Column
>  Case 1
>   'Sheet2 A列の処理
>  Case 2
>   'Sheet2 B列の処理
>  Case 3
>   'Sheet2 C列の処理
>  Case 4
>   'Sheet2 D列の処理
>  :
>  :
>  Case Else
>   'Sheet2 上記で指定しなかった列の処理
>  End Select
> End If
>
>と書いたほうが解りやすかったりしませんか?
上記参考に少し考えます。

【45877】Re:Enterだけで移動できる?
発言  ひげくま  - 07/1/16(火) 21:02 -

引用なし
パスワード
   ▼じろう さん:
>Keinさんのコードをみてわかるように
>sheet1・sheet2で共通の動きをするものは
>同じCaseにまとめてあります。
>ひげくまさんの言うとおりかも知れませんが
>Keinさんの意図があるものと思います。
>例えばコード自体短くできる等・・

確かにコードは短くなりますが、そのために理解できなくなるのもどうかと思いまして。
それに、Caseの中で、IfでSheet1と2を分ける部分が多いようなので、それだったら、SheetごとにSelect Caseを書いたほうが、思考をまとめやすいかと思いまして。

>>>追伸6[F]をとばすのはSheet1だけでSheet2は6は飛ばしたくないんです。
>>>ようするに6と11はSheet1と2で動きが違うと言うことお言いたいのです。
>>
>>失礼ですが、じろうさんはおいくつですか?
>掲示板で初めて聞かれましたが何か必要ですか?
>理解していないとか?

受ける印象として、あまり理解しようともせずに簡単に聞きすぎているような気がしましたし、文章も少し子供っぽいかなと思ったもので。
お気を悪くされたのでしたら、申し訳ありません。
このスレへのコメントは今後控えさせていただきます。

6330 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free