Excel VBA質問箱 IV

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

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


9194 / 13646 ツリー ←次へ | 前へ→

【28800】Enterキーで指定したセルへ移動 BONO 05/9/14(水) 23:30 質問[未読]
【28802】Re:Enterキーで指定したセルへ移動 [名前なし] 05/9/15(木) 0:56 発言[未読]
【28832】Re:Enterキーで指定したセルへ移動 BONO 05/9/15(木) 20:36 お礼[未読]

【28800】Enterキーで指定したセルへ移動
質問  BONO  - 05/9/14(水) 23:30 -

引用なし
パスワード
   初めまして。

2002年7月の過去ログ【11530】を拝見しました。
その中で、ぴかるさんという方が私が求めていたものを書いていたので参考にさせていただきました。ありがとうございます。

そこでさらなる疑問が湧いて来ましたので質問させていただきます。


※※↓過去ログ【11530】引用 セル番号修正 ※※

Sub AUTO_OPEN()
  Application.OnKey "{ENTER}", "セル移動"
  Application.OnKey "~", "セル移動"  
  Range("B2").Select
 
End Sub
Sub AUTO_CLOSE()

  Application.OnKey "{ENTER}"    'ENTERを押したらマクロを実行
  Application.OnKey "~", "セル移動" 'テンキーのENTERを押したらマクロを実行

End Sub

Sub セル移動() 

  If ActiveCell.Address = "$B$2" Then
   Range("B4").Select
  ElseIf ActiveCell.Address = "$B$4" Then
   Range("D2").Select
  ElseIf ActiveCell.Address = "$D$2" Then
   Range("D4").Select

  End If
  
End Sub


-----------------------------------------------------------------------

私は、B2→B4→D2→D4→・・・というように、エンターを押した際にセルを移動させたいと思っております。しかし、これが結構な数です。BX4くらいまで行きます。


疑問1
全くの初心者なので、色々と調べて試してみました。
『Sub セル移動()』をモジュールの部分に記述したら、動作しました。
しかし、なぜ、モジュールに記述しなければならないのでしょうか?
同じ所に記述したら、動作しませんでした。なんかエラーが出ました。


疑問2
『ActiveCell.Address = "$B$2" Then 』のように、$をなぜ常に付けなければならないのでしょうか?試しに、外したら動作しませんでした。

疑問3
このセル指定に、変数は使えないのでしょうか?
使えるとしたら、上記の場合では、どのように記述すればいいのでしょうか?
Dimステートメント?を使ってみたり、Cells なんかもやってみましたが、上手くいきません。


大変申し訳ないのですが、VBAは、全くと言っていいほど初心者です。
私なりに、色々と調べてここまでたどり着きましたが、上記の3点がどうしても分かりませんでした。
どうぞ、皆さん、よろしくお願いいたします。

【28802】Re:Enterキーで指定したセルへ移動
発言  [名前なし]  - 05/9/15(木) 0:56 -

引用なし
パスワード
   ▼BONO さん:
>Sub セル移動() 
>
>  If ActiveCell.Address = "$B$2" Then
>   Range("B4").Select
>  ElseIf ActiveCell.Address = "$B$4" Then
>   Range("D2").Select
>  ElseIf ActiveCell.Address = "$D$2" Then
>   Range("D4").Select
>
>  End If
>  
>End Sub
>
>
>-----------------------------------------------------------------------
>
>私は、B2→B4→D2→D4→・・・というように、エンターを押した際にセルを移動させたいと思っております。しかし、これが結構な数です。BX4くらいまで行きます。

Sub セル移動()
  With ActiveCell
    .Offset(-(.Row * 2 - 6), .Row - 2).Select
  End With
End Sub

に変えてみてください。

2行目の時:-(.Row * 2 - 6)→ -(2 * 2 - 6)→ -(4 - 6)→ -(-2)→ 2
     :.Row - 2 → 2 - 2 → 0
      .Offset(-(.Row * 2 - 6), .Row - 2).Select
     →.Offset(2, 0).Select

4行目の時:-(.Row * 2 - 6)→ -(4 * 2 - 6)→ -(8 - 6)→ -(2)→ -2
     :.Row - 2 → 4 - 2 → 2
      .Offset(-(.Row * 2 - 6), .Row - 2).Select
     →.Offset(-2, 2).Select


>同じ所に記述したら、動作しませんでした。なんかエラーが出ました。

同じ所ってどこですか?エラーってなんですか?


>『ActiveCell.Address = "$B$2" Then 』のように、$をなぜ常に付けなければならないのでしょうか?試しに、外したら動作しませんでした。

  MsgBox ActiveCell.Address
  MsgBox ActiveCell.Address(False, False)
  MsgBox ActiveCell.Address(True, False)
  MsgBox ActiveCell.Address(False, True)

を実行してみればわかるかと。


>このセル指定に、変数は使えないのでしょうか?
Dim Before As String
Dim After As String

Before = "$B$2"
After = "B4"

  If ActiveCell.Address = Before Then
   Range(After).Select

てなこと?

【28832】Re:Enterキーで指定したセルへ移動
お礼  BONO  - 05/9/15(木) 20:36 -

引用なし
パスワード
   名前なし さん 返事どうもありがとうございました。
問題解決しました。
offset を上手く活用すればいいんですね!
まだまだ、初心者ですが、自分で色々と調べてやってみて、
そして、教えていただき、少しずつ分かって来ました。

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