Excel VBA ENTERで特定のセルへ移動

このQ&Aのポイント
  • Excel VBA ENTERで特定のセルへ移動するためのコードを説明します。
  • このコードは、アクティブなセルの位置に基づいて指定されたセルに移動します。
  • 自動設定が必要な場合は、別のコードを追加することもできます。
回答を見る
  • ベストアンサー

Excel VBA ENTERで特定のセルへ移動

他の質問でみつけたコードですが どなたか以下のコードの内容を説明(翻訳)していただけないでしょうか よろしくお願いします。 '<標準モジュール> Private Sub ReturnDirectrion2SelectCell()  If ActiveCell.Address(0, 0) Like "A2" Then   Range("B5").Select  Else   'Original ReturnDirection の再現   On Error Resume Next   Select Case Application.MoveAfterReturnDirection   Case xlDown     ActiveCell.Offset(1).Select   Case xlToRight     ActiveCell.Offset(, 1).Select   Case xlToLeft     ActiveCell.Offset(, -1).Select   Case xlUp     ActiveCell.Offset(-1).Select   End Select  End If End Sub Sub SetKeys()   '設定用   Application.OnKey "~", "ReturnDirectrion2SelectCell"   Application.OnKey "{Enter}", "ReturnDirectrion2SelectCell" End Sub Sub SetOffKeys()  '解除用  Application.OnKey "~"  Application.OnKey "{Enter}" End Sub '----------------------------------------- 自動設定が必要な場合は、以下のコードを加えてください。 '----------------------------------------- '<標準モジュール> Sub Auto_Open()  Call SetKeys End If Sub Auto_Close()  Call SetOffKeys End If '----------------------------------------- 以上です。よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

Private Sub ReturnDirectrion2SelectCell()  If ActiveCell.Address(0, 0) Like "A2" Then  ’アクティブセルのアドレスがA2ならB5セルを選択する   Range("B5").Select  Else  ’そうでないなら以下を実行する   'Original ReturnDirection の再現   On Error Resume Next  ’エクセルに設定されている「エンター後に移動する方向」に従い   Select Case Application.MoveAfterReturnDirection   Case xlDown    ’「下に移動」なら一つ下のセルを選択する     ActiveCell.Offset(1).Select   Case xlToRight    ’「右に移動」なら一つ右のセルを選択する     ActiveCell.Offset(, 1).Select   Case xlToLeft    ’「左に移動」なら一つ左のセルを選択する     ActiveCell.Offset(, -1).Select   Case xlUp    ’「上に移動」なら一つ上のセルを選択する     ActiveCell.Offset(-1).Select   End Select  End If End Sub Sub SetKeys()   '設定用   ’エンターキー(キーボードおよびテンキー)を押したときにReturnDirectrion2SelectCellを実行するように仕込む   Application.OnKey "~", "ReturnDirectrion2SelectCell"   Application.OnKey "{Enter}", "ReturnDirectrion2SelectCell" End Sub Sub SetOffKeys()  '解除用   ’エンターキー(キーボードおよびテンキー)を押したときに何も実行しないように仕込む  Application.OnKey "~"  Application.OnKey "{Enter}" End Sub

matsumei
質問者

お礼

なるほど すごくわかりやすいです。 ありがとうございます。

関連するQ&A

  • EXCELでENTERキーでセルの移動マクロ

    こんにちは。 EXCELでENTERキーでセルの移動マクロを使いたいのですが、下記のマクロで改良を教えてもらいたいと思います。 まず、最初は必ず、セルB5にフォーカスしたいということ。そうして、できればOFFSETを使わないで、rangeかcellを使いたいのですが、お願いします。 Sub セル移動() Range("B5").Select Select Case ActiveCell.Column Case 1 ActiveCell.Offset(1, 1).Activate Case 2 ActiveCell.Offset(2, 2).Activate Case 3 ActiveCell.Offset(1, 1).Activate Case 4 ActiveCell.Offset(1, 1).Activate End Select End Sub

  • excel2002vbaで選択しているセルがハイパーリンクとそれ以外のものを区別する方法

    ハイパーリンクをenterキーでリンク先に飛べるようにマクロを挿入したのですが、ハイパーリンク以外のセルでenterキーを押下した時に、「インデックスが有効範囲にありません」というエラーメッセジが表示されていまい通常のセル移動が行えません。 使用しているマクロは以前に掲載されていた以下のマクロをしようしています。 何かいい方法はあるでしょうか? Sub Auto_Open() '起動時 キー設定 On Call SettingKeys(True) End Sub Sub Auto_Close() '終了時 キー設定 Off Call SettingKeys(False) End Sub Sub SettingKeys(flg As Boolean) If flg Then Application.OnKey "{Enter}", "JumpHyperLink" Application.OnKey "~", "JumpHyperLink" Else Application.OnKey "{Enter}" Application.OnKey "~" End If End Sub Sub JumpHyperLink() If TypeName(Selection) = "Range" Then Selection.Hyperlinks(1).Follow NewWindow:=False End If End Sub

  • <マクロ・VBA> 大きいEnterキーを押してVBA処理

    はじめまして。よろしくお願いします。 ワークシートに入力して、 入力内容により色をつけるというVBAを作っています。 Enterキー(大きい方)を押したら 即時情報が更新されるものを作りたいんですが、 大きいEnterキーで更新する方法が分かりません。 どうぞご教授宜しくお願いします。 やりたいこと>> (1)大きいEnterキーを押してすぐ内容を判定して行に色をつける (2)行の色は以下の通り  削除…赤  変更…薄い黄色  その他…色はなし 記述>> 【ThisWorkBook】 Private Sub Workbook_Open() キー定義 End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) キー定義の解除 End Sub -------------------------------------------------- 【標準モジュール】 Sub キー定義() Application.OnKey "{ENTER}", "判定" End Sub Sub 判定() If ActiveWorkbook.Name = "色付けテスト" Then If ActiveCell.Value = "削除" Then ActiveCell.EntireRow.Interior.ColorIndex = 3 ElseIf ActiveCell.Value = "変更" Then ActiveCell.EntireRow.Interior.ColorIndex = 36 Else: ActiveCell.EntireRow.Interior.ColorIndex = xlNone End If End If End Sub 今のところはテンキーのEnterキーで対応しています。 よろしくお願いします。

  • エクセル VBA アクティブセルから移動する

    アクティブセルへ入力し、エンターを押すと右隣のセルへ移動するように Module 1へ Sub セル() ActiveCell.Offset(0, 1).Select End Sub と、入れましたが、エンターを押すと、下のセルへ移動してしまいます。 どこを直せばいいでしょうか?

  • エクセルVBA フォーム上でOnkeyがうまく出来ない

    エクセルVBAでプログラムをしています。 Application.Onkeyでショートカットを指定したいのですがフォーム上ではうまく指定できません。 フォーム上での指定は不可能なんでしょうか? ショートカットを認識するケース 標準モジュールに Sub test2() MsgBox "test2" End Sub Sub Auto_Open() Application.OnKey "{b}", "test2" End Sub としてシート上で「b」を押した場合はうまくいきます。 ショートカットを認識しないケース 標準モジュールに Sub test() MsgBox "test" End Sub UserForm1フォームに Private Sub UserForm_Initialize() Application.OnKey "{a}", "test" End Sub としてフォームをロード(表示)して「a」を押しても何もおきません。 またフォームが表示されている状態で「b」を押しても何もおきません。 上記のコードはテストで作ったものなのでこれ以外はフォームを開く文以外何も書いておりませんので他との兼ね合いではないと思います。 どうすれば思ったとおりの動作になるのでしょうか? そもそもOnkeyはユーザフォームがアクティブのときは動かないのでしょうか? 動かない場合、フォームがアクティブなときのみフォームごとに違う関数を呼ぶショートカットを作る方法はありませんでしょうか? (コントロールごとにkey_downイベントで確認する方法はコントロールの数が各100個ほどあるのと、フォームが10個以上あるため出来ればやりたくありません。) 環境はwinXP、excel2003です。 よろしくお願いいたします。

  • エクセルで行を非表示にするとアクティブなセルが・・・

    エクセルで行を非表示にするとアクティブなセル?行?がどこかわからなくなり、マクロでアクティブなセルを移動するときにエラーが出ます。 Sub example() ActiveSheet.Range("D3").Select Do Until ActiveCell = 23 If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -3).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -6).Select Else: ActiveCell.EntireRow.Select Selection.EntireRow.Hidden = True ActiveCell.Offset(0, -6).Select End If Loop End Sub 一番下のActiveCell.Offset(0, -6).Select にエラーが出るのですが、どうすればセルを移動できるでしょうか?

  • VBAの修正 Enterを押した後のセル移動について

    以前、下記でお世話になった者です。 その節はありがとうございました。 「質問:ExcelでEnterを押したあとの移動先について06-03-07 23:03」 http://oshiete1.goo.ne.jp/qa2014068.html 「質問:No.2014068のつづきです。VBAで困ってます。06/03/09 22:06」 http://oshiete1.goo.ne.jp/qa2018448.html 当時のもので快調に使用できていましたが、社内システムの入れ替えでデータが増えたため、VBA(または関数)の修正をして使い勝手をよくしたいのです。 データシート名:[データ]に下記のコードが入っています。 シートのデータ範囲はA4:J65536で、I列に製品コードが入っています。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 11 Then Cells(ActiveCell.Row, 1).Select End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Range("A65536").End(xlUp).Offset(, 0).Select End If End Sub このコードのおかげで「B2でEnterを押すとA列の「あ」が入っているセルに移動」できました。 これを「B2で製品コードを入力してEnterを押すと、データ範囲のI列を検索して該当レコードの行頭にセルが移動する」に変えたいのです。 ただし、I列の製品コードは1レコードにつき1コード(一品一様)ではありますが、現時点ですべてのコードづけが終わっていないためにB2で入力したものが無い確率の方が高いのです。 この場合は「あ」にセルが移動するようにしたいのですが、どのようにしたらよいのでしょうか。 ご回答よろしくお願いします。

  • VBA Offsetで選択セルを移動させる

    よろしくお願いします。 H8から一行づつ下げてH10まで来たらH15まで飛ばして また一行づつ下げていく。 H20まで来たらH27まで飛ばしてまた一行づつ下げていく。 このようにしたいのですが、構文が解りません。 Private Sub CommandButton1_Click() If ActiveSheet.Range("H8").Activate Then ActiveCell.offset(1, 0).Activate Else ActiveCell.offset(1, 0).Activate End If If ActiveSheet.Range("H10").Activate Then ActiveCell.offset(5, 0).Activate Else ActiveCell.offset(1, 0).Activate End If If ActiveSheet.Range("H20").Activate Then ActiveCell.offset(7, 0).Activate Else ActiveCell.offset(1, 0).Activate End If End Sub

  • エクセルxpのVBA

    VBA初心者です。下記を実行すると、「elseに対応するifがありません」と出ます。なぜかわからず困っています。 For hiniti = DateSerial(Range("A3"), Range("A4"), 21) To DateAdd("m", 1, DateSerial(Range("A3"), Range("a4"), 20)) ActiveCell.Value = hiniti ActiveCell.Offset(0, 1).Select If ActiveCell.Column = 7 Then ActiveCell.Offset(1, -7).Select Else: ActiveCell.Offset(0, 1).Select End If next end sub

  • エクセルVBAで無限ループ

    教えてください。 以下の2つのエクセルマクロはまったく同じことをさせようとしているのですが、test02の方は.Offset(1).Activateが働かないのか、無限ループに陥ってしまいます。 単にActiveCell.という記述をWith~End Withでまとめただけなのになぜこうなるのでしょうか? Sub test01() ActiveSheet.Cells(1, 1).Activate Do While ActiveCell.Value <> "" If Not IsNumeric(ActiveCell.Value) Then ActiveCell.Offset(0, 1).Value = "文字" ElseIf ActiveCell.Value > 0 Then ActiveCell.Offset(0, 1).Value = "正数" ElseIf ActiveCell.Value < 0 Then ActiveCell.Offset(0, 1).Value = "負数" Else ActiveCell.Offset(0, 1).Value = "その他" End If ActiveCell.Offset(1).Activate i = i + 1 Application.StatusBar = i Loop End Sub Sub test02() ActiveSheet.Cells(1, 1).Activate With ActiveCell Do While .Value <> "" If Not IsNumeric(.Value) Then .Offset(0, 1).Value = "文字" ElseIf .Value > 0 Then .Offset(0, 1).Value = "正数" ElseIf ActiveCell.Value < 0 Then .Offset(0, 1).Value = "負数" Else .Offset(0, 1).Value = "その他" End If .Offset(1).Activate i = i + 1 Application.StatusBar = i Loop End With End Sub

専門家に質問してみよう