プロが教える店舗&オフィスのセキュリティ対策術

vbaで教えていただきたいのでが、

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address(False, False)
'NO1
Case "F12" 'このセルが変更されたら---(1)
Range("H12").Select 'このセルに移動する---(2)
  Case Else
End Select
End Sub
エンターを押すと指定のセルに移動するようなプログラムを作りたいのですが
 変更しないと指定したセルに行きません。
 初心者すぎてどこを変更していいかわかりません。これではできないのでしょうか?
 ご教授お願いします。

A 回答 (5件)

「Worksheet_Change」イベントは「ワークシートのセルがユーザーまたは外部リンクにより変更されたときに発生します。

」なので変更されなければ動作しません。
「入力後にセルを移動する」にチェックを入れて(もちろんコードで「Application.MoveAfterReturn = True」にしてもOK)「Worksheet_SelectionChange」イベントを使ったほうが良いと思います。
    • good
    • 0

こんにちは。



失礼な聞こえ方になったらすみませんが、ものすごく古典的な質問です。
そういう私も、ずいぶん昔に、このサイトで同じように教わった者の一人です。
記憶をたどってみましたが、確か、こんなふうな書き方をしていたように思います。
Auto_Openに入れて設定してもよいけれども、これは全部に波及してしまいますから、個別のシートの設定が必要だと思います。

'標準モジュール (プロシージャ名は適当に)
Sub OnEnterKeyMoving()
If ActiveSheet.Name <> "Sheet1" Then Exit Sub
Select Case ActiveCell.Address(0, 0)
  Case "F12": Range("H12").Select
  Case Else: ActiveCell.Offset(1).Activate
End Select
End Sub

''該当するシートモジュールに貼り付ける
Private Sub Worksheet_Activate()
 Application.OnKey "{ENTER}", "OnEnterKeyMoving"
 Application.OnKey "~", "OnEnterKeyMoving"
End Sub

Private Sub Worksheet_Deactivate()
'設定解除
 Application.OnKey "{ENTER}"
 Application.OnKey "~"
End Sub
    • good
    • 0

#2の回答者です。


#2のコードには、どこか不具合があるようです。訂正を入れますのでお待ち下さい。
    • good
    • 0

訂正しました。



#2で書いたものは、すべて消してください。
ややこしいと思われるかもしれませんが、キーの設定を他に波及させないためです。
また、設定したシートは、若干、カーソルの動きが鈍く感じます。

'//シートモジュール
Private Sub Worksheet_Activate()
 SettingKeys True
End Sub

Private Sub Worksheet_Deactivate()
'設定解除
SettingKeys False
End Sub

Sub OnEnterKeyMoving()
'★設定はここでします。
 If Not ActiveSheet.Parent Is Me.Parent Then
  SettingKeys False
  Else
  Select Case ActiveCell.Address(0, 0)
   Case "F12": Range("H12").Select
   Case Else: ActiveCell.Offset(1).Activate
  End Select
 End If
End Sub
Sub SettingKeys(flg As Boolean)
If flg Then
 Application.OnKey "{ENTER}", Me.Name & ".OnEnterKeyMoving"
 Application.OnKey "~", "OnEnterKeyMoving"
'MsgBox "キーを設定しました"
Else
 Application.OnKey "{ENTER}"
 Application.OnKey "~"
 'MsgBox "キーを解除しました"
End If
End Sub
'-------------
'設定したシート名を入れる
'ThisWorkbook モジュール
Private Sub Workbook_Deactivate()
Worksheets("Sheet1").SettingKeys False
End Sub

Private Sub Workbook_Activate()
Worksheets("Sheet1").SettingKeys True
End Sub
    • good
    • 0

まむらつさんの要件にあっているか分からないのですが、とりあえず、ご参考ということで…。


下記のマクロは、Enterキーの押下により、セルF12→H12→H10→F10の順でアクティブセルを移動します。
とりあえず、マクロを該当シートのシートモジュールに張り付けてみて下さい。
その上で、セルF12、H12、H10、F10のいずれかを選択して、Enterキーを押下すると次のセルに移動します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin_Sub
If Target.Count > 1 Then Exit Sub
On Error GoTo 0
Dim myRng As Range
Set myRng = Range("F12,H12,H10,F10")
If Not Intersect(Target, myRng) Is Nothing Then
myRng.Select
Target.Activate
End If
Fin_Sub:
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!