• ベストアンサー

VBAについて

Excel97です、例えば セル A1 に入力し enterキーを押したら A5 がアクティブセルに B1 に入力しenterキーを押したら C5 がアクティブセルになるように するマクロの記述を教えてください。

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

  • ベストアンサー
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

以下のソースを使えば、上記のとおりになります。 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

hoshi7777
質問者

補足

有り難うございます、例えば 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

その他の回答 (5)

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.6

どうして IF文を使うのか? という問いに対してですが、 Worksheet_Changeのイベントは、どのセルが変更されてもくるからです。 つまり、A1の時 A5、B1の時 C5というふうに法則性がないから その A1の時と B1の時だけ 処理するように記述したのです。 法則性が あるならば、その法則にしたがって 飛ばせばいいだけなので IF文は いらなくなる可能性があります。

hoshi7777
質問者

お礼

本当に有り難うございました、

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

既出回答と同じイベントを使っていますが、次ぎに飛ばしたいセルの数が増えた時のことを考えてテーブル方式に しました。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

hoshi7777
質問者

お礼

本当に有り難うございました。

回答No.4

ツール→オプション→編集で、 入力後にセルを移動する、で「下」にした場合と仮定して。 エクセルの画面で、 ツール→マクロ→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イベントを使いました。

hoshi7777
質問者

お礼

そのように処理する事も出来るのですね、本当に有り難うございました。

noname#4564
noname#4564
回答No.3

> セル 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

hoshi7777
質問者

お礼

本当に有り難うございました。

noname#4564
noname#4564
回答No.2

> セル 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文に書き換えてください。(汗)  

関連するQ&A