• ベストアンサー

EXCELでENTERキーでセルの移動マクロ

こんにちは。 EXCELでENTERキーでセルの移動マクロを使いたいのですが、下記のマクロで改良を教えてもらいたいと思います。 まず、最初は必ず、セルB5にフォーカスしたいということ。そうして、できればOFFSETを使わないで、rangeかcellを使いたいのですが、お願いします。 Sub セル移動() Range("B5").Select Select Case ActiveCell.Column Case 1 ActiveCell.Offset(1, 1).Activate Case 2 ActiveCell.Offset(2, 2).Activate Case 3 ActiveCell.Offset(1, 1).Activate Case 4 ActiveCell.Offset(1, 1).Activate End Select End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

根本的に 質問例はSUB ENDのプログラムになってます。 すなわち人間がF5等押すとか、メニューの実行をクリックして実行するか、他のルーチンから飛んでくるか、しないと働きません。それでよいのですか? 私はイベントプロシージュアーで組まないと、質問にふさわしくなく、便利でないと思います。 ーーーー さてワークシートのイベントですが、 >ENTERキーでセルの移動 したいのでしょうが、エンターキー押し下げをきっかけにするイベントにするイベントは、現状(E2002)設けられていないように 思います。 Changeイベントで代用するとしても、ENTERでなく、TABや矢印キー でセルを移動しても、コピー貼り付けしても、発動します。 その辺考えましたか。 毎回質問のルーチンを実行するために、別のコマンドボタン等をおすのは、便利性という意味から、意味がない。 >できればOFFSETを使わないで、rangeかcellを使いたいのですが も質問で使っていながら、こう表現するのは、理由を帰すべきと思う。 結局何がしたいのか、質問に良く表現されてない。 ーーー 今B5ならC2に 今C2ならd5のように飛び飛びに、自動でカーソルを移動して ほしいということかな。 私が過去に載せた回答と似たものを上げてみます。 Private Sub Worksheet_Change(ByVal Target As Range) f = Array("$B$5", "$C$2", "$D$5", "$F$2") t = Array("$C$2", "$D$5", "$F$2", "$B$5") For i = 0 To UBound(f) If Target.Address = f(i) Then Range(t(i)).Select End If Next End Sub B5->C2ー>D5->F2ー>B5を繰り返します。 2つのArrayの中は、Fからtに飛ぶ仕組みで、その組み合わせで作れば増やしたり、どこへでも飛ばせる。 これとて使えるかどうか。 カーソルが動く、そしてデータが入れられる。 そこで何をするか? またB5に戻って、データの一揃いが揃ったとき 誰が(人手かプログラムか)そのデータで何をどうするのじか? 書いてないが、そこと関連しないと、この質問の回答は生かせないと 思う。 思い付いたニーズをとりあえず、質問に出した感じがした。

tabtab9
質問者

お礼

ありがとうございました。 結構、いろいろな方法があります。 私も、質問をしたあと、自分でもサイトを探しました。 皆さんの技法を織り交ぜながら、ENTERでセル移動のマクロができました。ありがとうございました。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

5 のWendy02です。 #5の回答の内容、ご質問を良く読んでいなかったので、リンク先は用が立ちませんね。 良くご質問を読むと、何をされたいのか、あまりはっきりしていませんでした。スミマセン。 最初にセルB5をSelect した後の順序立てが見えてきませんでした。 ActiveCell.Offset(2, 2).Activate   ↓ ActiveCell.Offset(1, 1).Activate   ↓ no destination...(どこに行くの?)

tabtab9
質問者

お礼

いつも、ありがとうございます。 なんとか自分なりにアレンジしてできました。 おさがわせしました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 ご質問を細かくは見ていませんが、以前、このようにして作りました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1737730 考え方は、#2さんのご指摘のとおりですが、 >エンターキーは通常にも使うものですので色んなバグが出てきそうですので止めた方が無難です。 特に、支障はないはずです。 要するに、以下のようにしてあげます。 Application.OnKey "~", 移動のマクロ Application.OnKey "{Enter}", 移動のマクロ

tabtab9
質問者

お礼

ありがとうございます。 いつも、本当に感謝しています。 助かりました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#1です。 他の質問を回答しようとしたら締め切られました。 >EXCELで特定のセルのみ移動するには? そこで#1より簡単にできそうなので上げます。 下記の後半部分です。 セル保護してない場合と同じく、CTRLを押しつつ、マウスでセルをクリックしていくと、各セルにデータ入力後に、先ほどクリック指定した順序で飛んでくれます。 毎回、CTRLきを押しつつ順序にクリックするのが面倒なら シートにコマンドボタンを1つ貼り付け、クリックイベントに 下記を貼り付け作ればよい。 Rangeのカッコの中の指定と順序が肝心です。 Private Sub CommandButton1_Click() Range("F8,B3,C5,C7,B9,C11,B3").Select Range("B3").Activate End Sub

tabtab9
質問者

お礼

いろいろな方法を教えていただき ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

上記のマクロだと初めにB5に強制移動、Select文で結果が2でD7(B5から右2,下2)に移動で終了ですね。 Enterキーを押すごとには上記のマクロは動きません。 ショートカットキーの登録は可能ですが...B5->D7の移動を繰り返すだけです。 実際はどのような順番で移動したいのですか? B5->C5->D5->A6->B6->C6->D6....でしょうか? これなら「ツール」「オプション」「編集」で「入力後にセルを移動する」の「方向」を「右」にして 移動する範囲B5以降の移動するセルを選択して「セルの書式設定」「保護」「ロックする」のチェックをはずして 「ツール」「シートの保護」(2002以降は「ロックしたセル範囲を選択する」のチェックをはずす。)を実行してください。 マクロではB5への強制移動だけでいいはずです。

tabtab9
質問者

お礼

この技法もわりとサイトにでてました。 簡単なようで少々、保護設定が入ると。。。OFFSETなみに私の理解力が。。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

1.ショートカットキーの割当 エンターキーでマクロを実行させたいということでしょうか? エンターキーをフックしてしまえば可能ですが高度なものになりますし、エンターキーは通常にも使うものですので色んなバグが出てきそうですので止めた方が無難です。 通常のショートカットキーはCTRL(+SHIFT)+ローマ字のどれかで設定します。マクロのオプションから設定で簡単にできます。 あるいはボタンを配置してそのボタンを押したら実行されるとか。 2.最初にB5にフォーカス Range("B5").Select まずこの時点でB5がアクティブになってしまいますので以降の判別はすべて「Case 2」で適用されてしまいます。よってそもそもの仕様を改める必要があります。 例えばマクロを2つに分けて、最初のマクロでB5がアクティブになって何かユーザーが操作した後にて別のマクロを実行するとか? 3.Offsetを使わない この手のコードはoffsetの方が何かと便利なはずですが、絶対参照で行うとどこか一つのセルをずらした場合、それ以降も全て修正する必要があります。まぁこのケースだとどういう使用状況を想定しているのかが不明ですので何とも言えませんが。 どうしても絶対参照が良いのであれば ActiveCell.Offset(1, 1).Activate ↓ Range("A1").Activate のように修正しましょう。

tabtab9
質問者

お礼

記述の理解を深めることができました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう