- ベストアンサー
VBAについて
Excel97です、例えば セル A1 に入力し enterキーを押したら A5 がアクティブセルに B1 に入力しenterキーを押したら C5 がアクティブセルになるように するマクロの記述を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
以下のソースを使えば、上記のとおりになります。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then Range("A5").Select End If If Target.Row = 1 And Target.Column = 2 Then Range("C5").Select End If End Sub
その他の回答 (5)
- taknt
- ベストアンサー率19% (1556/7783)
どうして IF文を使うのか? という問いに対してですが、 Worksheet_Changeのイベントは、どのセルが変更されてもくるからです。 つまり、A1の時 A5、B1の時 C5というふうに法則性がないから その A1の時と B1の時だけ 処理するように記述したのです。 法則性が あるならば、その法則にしたがって 飛ばせばいいだけなので IF文は いらなくなる可能性があります。
お礼
本当に有り難うございました、
- imogasi
- ベストアンサー率27% (4737/17069)
既出回答と同じイベントを使っていますが、次ぎに飛ばしたいセルの数が増えた時のことを考えてテーブル方式に しました。Arrayの()内を、チェンジするセル-飛び先セルの対で2項目づつ増やしてください。テスト済み。 但しChangeイベントはクセがあったと思いますので、 100%満足は得られないかもしれない。 Private Sub Worksheet_Change(ByVal Target As Range) ' MsgBox Target.Address ct = Array("$A$1", "$A$5", "$B$1", "$C$5", "$B$7", "$C$7") For i = 0 To 5 Step 2 If Target.Address = ct(i) Then Range(ct(i + 1)).Select End If Next i End Sub
お礼
本当に有り難うございました。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
ツール→オプション→編集で、 入力後にセルを移動する、で「下」にした場合と仮定して。 エクセルの画面で、 ツール→マクロ→Visual Basic Editorを選択します。 VBAの画面で、 表示→プロジェクトエクスプローラを選択 表示→コードを選択 右窓のコード窓に以下のソースを貼り付けます。 *--------- この下から Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$2" Then Range("A5").Select If Target.Address = "$B$2" Then Range("C5").Select End Sub *---------- この上まで エクセルに戻って、 A1でエンターを押せばA5へ、 B1でエンターを押せばC5へ飛びます。 ここで問題は矢印キーでA2、B2に持って行ってもそれぞれに飛んで行きます。 また、 Worksheet_Changeのイベントはセルの内容が変わらないと発生しないので、 Worksheet_SelectionChangeイベントを使いました。
お礼
そのように処理する事も出来るのですね、本当に有り難うございました。
> セル A1 に入力し enterキーを押したら A5 がアクティブセルに 「入力し」というのを読み落としていました(汗) No.1のコメントと同趣旨ですが、下記でOKです。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Row Case 1 '1行目 Select Case Target.Column Case 1 'A列 Cells(5, 1).Select Case 2 'B列 Cells(5, 3).Select End Select End Select End Sub
お礼
本当に有り難うございました。
> セル A1 に入力し enterキーを押したら A5 がアクティブセルに B1 > に入力しenterキーを押したら C5 がアクティブセルになるように > するマクロの記述を教えてください。 Excel 2000 でしか確認していませんが、↓こんな感じで、一応それらしい動きになります。 (ワークシートのクラスモジュールに記述します) Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Target.Row Case 2 '2行目 Select Case Target.Column Case 1 'A列 Cells(5, 1).Select Case 2 'B列 Cells(5, 3).Select End Select End Select End Sub ただし、上記のコードは<Enter>キーのイベントで動作する訳ではないので、このままでは、 A2、B2を選択しただけでアクティブセルが移動してしまいます。 何らかの工夫が必要です。 ※ Select Case文のネストが見にくいようでしたら、If文に書き換えてください。(汗)
補足
有り難うございます、例えば A1 から A5 に行くようにする(1つだけ)のにも If 文を使うのでしょうか、(下記のように) 1つだけの場合は If 文を使わずに記述出来るでしょうか、よろしくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then Range("A5").Select End If End sub