• ベストアンサー

エクセルで、次のセルに飛ぶには その2

以前ここで「次のセルに飛ぶように」を聞いたものです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=746815 austin32さんのロックをはずしてシートに保護を かけるやり方は上から順になってしまうために 自分の思い通りの順番に飛んでくれませんでした。 imogasiさんのVBAをAlt+F11でVisualVasicを開いて コピペしてやってみましたが文字を入力してエンターを押すと 「$A$1」というメッセージが出てきて、OKを返すとC3のセルに移動します。 Private Sub Worksheet_Change(ByVal Target As Range) a = Array("$A$1", "$C$3", "$C$6", "$A$6", "$A$1") MsgBox Target.Address For i = 0 To UBound(a) - 1 If Target.Address = a(i) Then Range(a(i + 1)).Select End If Next i End Sub どのようにすればいいのでしょうか? どうすれば自分の思い通りの順番に飛んでくれるようになりますか? またこれは簡単に言うとどういうことをしてくれるように 設定したのでしょうか? わかる方がいらっしゃれば教えてください。 補足しますので必ず1日置きにでも回答をしめきってなければ CHECKしてください。お願いいたします。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.5

>と入れてみましたがうまくいきません。 原因は何でしょう? こちらでも問題なく動きますよ。 原因としては、 ○動かしたいシートのマクロになっているかどうか? ○セルに何かを入力しているかどうか? ということくらいでしょうか。。。

dlx_xlb_qlo_olp
質問者

お礼

メッセージをよく読んでませんでした。 「セキュリティが高になってるからできないよ!!」って 書いてありました。 「低」にしたらできるようになりました。 ありがとうございました。

その他の回答 (4)

  • moon00
  • ベストアンサー率44% (315/712)
回答No.4

#2の補足に書かれたコードを試しましたが、 私の環境ではうまく動きましたよ。(Excel97 WinNT4.0) sheet1のコードに書き込んでみたのですが。 ただし、各セルで確実に入力することが必要です。 変更がなくても、同じ値を入力する必要があります。 空白でおいておくセルが存在すると、困りますね。 それと、シート保護の方法は有効だと思います。 dlx_xlb_qlo_olpさんはなんで動かないんでしょう...

dlx_xlb_qlo_olp
質問者

お礼

シートの保護いいですか。 ありがとうございます。 参考になりました。

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

imogasiです。 MsgBoxの行は確認のためにいれました。 このプログラムは、セルを計画した通りに、入力して行って、一順するためのものです。1枚の帳票に何十箇所も入力セルがあって、TABキー等を押すのが面倒くさい時に 使えないかと思いました。 ただ現在と同じ値を入力すると反応しなかったりするので クセを知った上で、自分だけが使う用途になろうかと思います。いつも行っているのですが、Changeイベントを使うプログラムは、お遊び程度のものですが、自分だけが使う分にはいろいろ使えそうに思ったもので。 結果は A1入力 C3に飛ぶ C3入力 C6に飛ぶ C6に入力 A6に飛ぶ A6に入力 A1に戻る ようになっていますが、Array()の()内を自分の都合の良いように、セル番値と数を設定してください。

dlx_xlb_qlo_olp
質問者

補足

hanahana3さんとこに書いたようにしてみました。 でもうまくいきません。なぜでしょう? それで・・・。 変えるとこをコントロールで選んでいって、 Ctrl+1の保護でロックをはずして、シートにも保護を かけちゃえば変えるとこ以外は変えられなくなって 良いですかね? 意味わかりますか?

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

私も同じことで悩んでいる一人です。 Worksheet_Changeの場合、セルの内容が変更された場合にはきちんと移動してくれますが、入力する内容が無い場合には、移動してくれないんです。 また、Worksheet_SelectionChangeの場合、入力が無い場合はエンターキーだけで移動可能ですが、エンターの移動方向などとの兼ね合いや、連結したセルの場合の移動が確実でなくて、悩んでしまいます。 ひとつ、アドバイスですが、 Target.Address とした場合、$A$1の絶対参照になりますが、Target.Address(False,False) とすると、A1 の相対参照で可能なので、a = Array("A1","C3")のように設定可能になるので、入力が楽になると思います。

dlx_xlb_qlo_olp
質問者

補足

Private Sub Worksheet_Change(ByVal Target As Range) a = Array("O3", "A3", "E15", "F16", "F17", "F18", "F19", "M19", "C22", "C23", "G27", "G28", "G29", "D30", "G30", "D31", "G31", "D32", "G32", "G33", "G34", "G35", "D36", "G36", "D37", "G37", "D38", "G38", "G39", "D40", "G40", "D41", "G41", "G42", "P27", "N28", "P28", "N29", "P29", "N30", "N31", "N32", "O32", "N33", "N34", "N35", "N36", "N37", "N38", "N39", "N40", "N41", "O41", "N42", "N43", "V8", "V9", "T11", "U11", "T13", "U13", "W15", "Y15", "AA15", "W16", "Y16", "AA16", "Y17", "AD17", "Y20", "AA20", "Y21", "Y22", "Y23", "V42", "X42", "Z42", "O3") For i = 0 To UBound(a) - 1 If Target.Address(False, False) = a(i) Then Range(a(i + 1)).Select End If Next i End Sub と入れてみましたがうまくいきません。 原因は何でしょう? 多すぎなんですか?

  • moon00
  • ベストアンサー率44% (315/712)
回答No.1

メッセージを出したくないなら、 3行目の「MsgBox Target.Address」を消して下さい。 移動したいセルアドレスを「$」を付けて 移動したい順番通りに2行目の「a = Array」の あとの括弧に入れて下さい。 最初と最後は同じセルアドレスにして下さいね。 マクロの説明をしますと、 ワークシートの内容が変更されたときに以下の作業を 実行するという命令です。<1行目 まずaという変数に、移動したいセルアドレスを配列として 組み込みます。<2行目 今、選択されているセルのアドレスです<3行目 変数iの範囲を示します。<4行目 アクティブセルアドレスが配列の中のi番目の場合<5行目 配列のi+1番目のセルを選択します<6行目 (アクティブセルがA1の場合、配列の1番目なので、  次は2番目のC3を選択します。  アクティブセルがA6の場合4番目なので、次は5番目の  A1を選択します) こんな感じでしょうか。

dlx_xlb_qlo_olp
質問者

補足

メッセージ出なくなりました。 んじゃそこにズラズラ並べればいいんですね? ただし何か入力しないとダメなんですね?

関連するQ&A

専門家に質問してみよう