|
aさんがどの程度の力量か解らないので、適当に解説します。
Userが何か操作を行ったときに実行されるVBAをイベントと呼びます。
シート上でのイベントに、セルを押したときと言うイベントはありません。
近いのは選択したセルを変更したときに実行されるSelectionChangeイベント
ですが、やじるしやEnter、Tabなどでセルを移動しても実行されますし、
逆に、すでに選択されているセルを、マウスで押しても実行されないなどの
制約があるためあまり推奨されません。
変わりにセルをダブルクリックや右クリックしたときに実行されるイベントを
推奨します。
記述法は、Excelの画面で、イベントを起こしたいシートを前面(Active)
にして、左下にあるのシートタブを右クリックし、出てきたショートカットの
コードの表示(V)を選択。
VBE画面が起動したら、上の方に(General)、(Declarations)と表示
されているコンボボックスの左の(General)をWorkSheetを選択。
右の(Declarations)から、BeforeDoubleClick(ダブルクリック)
もしくはBeforeRightClick(右クリック)を選択すると、
以下、ダブルクリックで進めます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub
のような記述が自動で表示されますのでここにコードを記入。
引数のTargetにダブルクリックしたセルが入ります。
通常セルをダブルクリックしたときはセルの編集になりますが、
引数のCancelにTrueを入れると編集になりません。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Msgbox Target.Address
End Sub
を記述して適当なセルをダブルクリックしてください。
このままだとどのセルでも実行されてしまいます。
今回はF1とG1でのみ実行と言うことで、
この前のコードは標準Moduleにでも記述しておいて、
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Select Case Target.Address
Case "$F$1"
Cancel = True
Call 最初に戻る
Case "$G$1"
Cancel = True
Call 一つ前に戻る
End Select
End Sub
のようにして、ダブルクリックされたセルアドレスでCallするプロシージャを
分けます。
ただ、ダブルクリックするとActiveCellがそのセルに移りますので、Findでの
引数は工夫したほうがいいです。
たとえば、検索のたび、見つかったセルを広域変数に取っておいて、Findの
引数Afterにそのセルを指定する(変数がNothingなら、Range("A1")など)など。
また、Findの引数はすべて指定した方が良いです。
また、同一のイベントは一つのシートに一つだけです。
まったく別の方法として、F1やG1に何か図形(オートシェイプの額縁など)を
貼り付け、図形を選択し、右クリックし、マクロの登録(N)で実行したいものを
登録するなど。
|
|