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

こんにちは。
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

A 回答 (6件)

根本的に


質問例は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に戻って、データの一揃いが揃ったとき
誰が(人手かプログラムか)そのデータで何をどうするのじか?
書いてないが、そこと関連しないと、この質問の回答は生かせないと
思う。
思い付いたニーズをとりあえず、質問に出した感じがした。
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/01/04 14:42

5 のWendy02です。



#5の回答の内容、ご質問を良く読んでいなかったので、リンク先は用が立ちませんね。
良くご質問を読むと、何をされたいのか、あまりはっきりしていませんでした。スミマセン。

最初にセルB5をSelect した後の順序立てが見えてきませんでした。

ActiveCell.Offset(2, 2).Activate
  ↓
ActiveCell.Offset(1, 1).Activate
  ↓
no destination...(どこに行くの?)
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/01/04 14:43

こんにちは。



ご質問を細かくは見ていませんが、以前、このようにして作りました。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1737730

考え方は、#2さんのご指摘のとおりですが、

>エンターキーは通常にも使うものですので色んなバグが出てきそうですので止めた方が無難です。

特に、支障はないはずです。

要するに、以下のようにしてあげます。

Application.OnKey "~", 移動のマクロ
Application.OnKey "{Enter}", 移動のマクロ
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/01/04 14:46

#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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/04 14:51

上記のマクロだと初めにB5に強制移動、Select文で結果が2でD7(B5から右2,下2)に移動で終了ですね。


Enterキーを押すごとには上記のマクロは動きません。
ショートカットキーの登録は可能ですが...B5->D7の移動を繰り返すだけです。

実際はどのような順番で移動したいのですか?
B5->C5->D5->A6->B6->C6->D6....でしょうか?
これなら「ツール」「オプション」「編集」で「入力後にセルを移動する」の「方向」を「右」にして
移動する範囲B5以降の移動するセルを選択して「セルの書式設定」「保護」「ロックする」のチェックをはずして
「ツール」「シートの保護」(2002以降は「ロックしたセル範囲を選択する」のチェックをはずす。)を実行してください。
マクロではB5への強制移動だけでいいはずです。
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/01/04 14:48

1.ショートカットキーの割当


エンターキーでマクロを実行させたいということでしょうか?
エンターキーをフックしてしまえば可能ですが高度なものになりますし、エンターキーは通常にも使うものですので色んなバグが出てきそうですので止めた方が無難です。
通常のショートカットキーはCTRL(+SHIFT)+ローマ字のどれかで設定します。マクロのオプションから設定で簡単にできます。
あるいはボタンを配置してそのボタンを押したら実行されるとか。

2.最初にB5にフォーカス
Range("B5").Select
まずこの時点でB5がアクティブになってしまいますので以降の判別はすべて「Case 2」で適用されてしまいます。よってそもそもの仕様を改める必要があります。
例えばマクロを2つに分けて、最初のマクロでB5がアクティブになって何かユーザーが操作した後にて別のマクロを実行するとか?

3.Offsetを使わない
この手のコードはoffsetの方が何かと便利なはずですが、絶対参照で行うとどこか一つのセルをずらした場合、それ以降も全て修正する必要があります。まぁこのケースだとどういう使用状況を想定しているのかが不明ですので何とも言えませんが。

どうしても絶対参照が良いのであれば
ActiveCell.Offset(1, 1).Activate

Range("A1").Activate
のように修正しましょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/04 14:50

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A