[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『SelectionChangeでTargetの保持』(純丸)
またまたマクロの件で質問させていただきます。 あるセルが選択された場合、選択範囲を1行下に移動させる目的で SelectionChangeイベントを使っているのですが、下のセルから ↑キー、またはShift+Enter で上がって来た場合は、選択セルを1行上に 移動させたいと思っています。上から来たら下へ、下から来たら上へ、 という動きが希望です。 この場合、イベント発生前のセル位置を取得する必要があると思うのですが、 マクロの最後でセル位置を取得し、次のイベントまで保持するのは可能ですか? 可能ならどういう記述になるか教えていただけますか? よろしくお願いします。
A B 10 B10 を入力後EnterするとB12 がActive になる。 11 − 12 B12 で↑キーを押すとB10 がActive になる。
イメージはこんな感じです。 (純丸)(o^-')b
>マクロの最後でセル位置を取得し、 これはどのようなマクロでしょうか。 SelectionChangeイベント以外のマクロであれば、変数をグローバル変数に代入すれば可能だと思います。
別案として、Onkeyメソッド使うってのはどうでしょうか。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Application.OnKey "+{ENTER}", "上" Application.OnKey "{UP}", "上" Application.OnKey "{ENTER}", "下" Application.OnKey "{DOWN}", "下" End Sub 以下を標準モジュールに。 Sub 上() ActiveCell.Offset(-2, 0).Activate Application.OnKey "+{ENTER}" Application.OnKey "{UP}" End Sub Sub 下() ActiveCell.Offset(2, 0).Activate Application.OnKey "{ENTER}" Application.OnKey "{DOWN}" End Sub
(川野鮎太郎)
>>マクロの最後でセル位置を取得し、 >これはどのようなマクロでしょうか。 鮎さん、すみません。SelectionChange のつもりで書きました。となると SelectionChangeイベントでの保持は不可能ということですね。 提案いただいたマクロはこれから試してみます。ありがとうございました。 と、ここまで書いてきて思い付きましたが、セル位置をどこかのセルに 入れておけばうまくいくかも、ですね。これも試してみます。 (純丸)(o^-')b
鮎さぁん、BeforeRightClick じゃなくて SelectionChange でいいんですよね? それで試すと、A1→A3→A4→A6→A7→A9→A10→A12→A13 と動くんですけど、、、。
(純丸)(o^-')b Excel2003 ならこんな苦労しなくてもセルの保護ですむのに。
>SelectionChangeイベントでの保持は不可能 いや、不可能ってわけでもないのでしょうけど、マウスでクリックしても イベントは発生するし、条件分岐がめんどくさいんじゃないかな・・・って 思っただけです(^_^A;
>SelectionChange でいいんですよね? いえ、何のコードで使われるのかわからなかったので、 BeforeRightClickにしていただけです。
一度全体像が判るように、どこのセルで何をしようとしたときに、どうなりたいか書いてみませんか。(^_^A;
多分これだけじゃだめですよね。 Option Explicit Public MyRow As Long Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim MyFlg As Long MyFlg = Target.Row - MyRow Select Case MyFlg Case 1 Target.Offset(1, 0).Activate Case -1 Target.Offset(-1, 0).Activate End Select MyRow = ActiveCell.Row End Sub
(川野鮎太郎)
衝突☆!しました。取り合えずそのままUPして、上のコードはこの後試してみます。
C D 7 顧客コード 8 9 受付番号 10 11 売上A 12 13 売上B 14 15 売上合計 16 17 リベート 18 19 旅費
こんな感じで D7からD19まで「1行起きに」入力する表なのですが、入力時に セルを自動に飛ばしたいのですね。(D7でEnterしたらD9に移動したい。) 偶数行は SelectionChange ですぐ下に移動するようにすると、上から下に 入力するのはいいのですが、入力違いなどで上に戻りたい時、↑では戻れなく なってしまう。ノートパソコンでの使用も頭にあるので、なるべくキー操作で 戻りたい訳です。 D7に入力してEnter→D8に移動→イベント発生でD9に移動、といった動きの時、 イベントで動いたD9というセル位置が保持出来れば、次のイベント発生時に 上から下りて来たか、下から上がって来たかの判断が出来て条件分岐が出来ると 思ったのです。 (純丸)(o^-')b 表の作り方が悪いという突っ込みは無しね。
そういうことならいけそうですね。 Option Explicit Public MyRow As Long Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim MyFlg As Long If Application.Intersect(Target, Range("D7:D19")) Is Nothing Then Exit Sub MyFlg = Target.Row - MyRow Select Case MyFlg Case 1 Target.Offset(1, 0).Activate Case -1 Target.Offset(-1, 0).Activate End Select MyRow = ActiveCell.Row End Sub
(川野鮎太郎)
> そういうことならいけそうですね。 いけそうです。別の列にも展開する必要があるのですが何とかなると思います。 ありがとうございました。m(__)m (純丸)(o^-')b
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.