• ベストアンサー

エクセル エンターキーによる入力位置の自動化方法

エクセルで下記のような事が出来るのでしょうか、ご教示御願い数申し上げます。 ●数字を入力した時、エンターキーを押すことによって、入力数字を確定し、次の入力位置にカーソルを移動させる事が出来るのでしょうか。 ●入力順序 C6 → F6 → C7 → F7 → ・・・・ 約500行の連続入力です。 宜しく御願い申し上げます。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.8

たびたび、修正してすみません。 一つ前のコードでは、 If Selection.Count > 1 Then Exit Sub に引っかかると、 Application.ScreenUpdating = False のままで、Trueに戻ることなく このワークシート関数を抜けてしまいますね。 その辺を手直ししました。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim col_C As Integer  Dim col_F As Integer  '列番号の取得  col_C = Range("C1").Column  col_F = Range("F1").Column  'エラー処理  If Selection.Count > 1 Then Exit Sub  On Error GoTo line  Application.EnableEvents = False  If Target.Column = col_C Then   'C列→F列へ移動   Target.Offset(0, col_F - col_C).Select  ElseIf Target.Column = col_F Then   'F列に入力した数値を100倍する   If IsNumeric(Target.Value) Then Target.Value = Target.Value * 100   'F列→C列へ移動   Target.Offset(1, col_C - col_F).Select  End If line:  Application.EnableEvents = True End Sub

oguno
質問者

お礼

ka_na_de様 >たびたび、修正してすみません。 ●とんでも御座いません。 こちらこそ、再三にわたるご検討・御指導本当にありがとうございました。 ●数字の入力も、カーソルの移動も思い通り完璧に出来ました。 本当にありがとうございました。 感謝申し上げます。

その他の回答 (7)

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.7

ka_na_deです。 冗長表現でしたので修正しました。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim col_C As Integer  Dim col_F As Integer  '列番号の取得  col_C = Range("C1").Column  col_F = Range("F1").Column  Application.ScreenUpdating = False  If Selection.Count > 1 Then Exit Sub  Application.EnableEvents = False  On Error GoTo line  If Target.Column = col_C Then   'C列→F列へ移動   Target.Offset(0, col_F - col_C).Select  ElseIf Target.Column = col_F Then   'F列に入力した数値を100倍する   If IsNumeric(Target.Value) Then Target.Value = Target.Value * 100   'F列→C列へ移動   Target.Offset(1, col_C - col_F).Select  End If line:  Application.EnableEvents = True  Application.ScreenUpdating = True End Sub

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.6

ka_na_deです。 合体してみました。 質問では6行以下からですが、このコードは1行目から機能します。 6行目からにしたければ、修正しますよ。 (今回はApplication.ScreenUpdatingの処理は必要ない気もしますが・・) Private Sub Worksheet_Change(ByVal Target As Range)  Dim col_C As Integer  Dim col_F As Integer   '列番号の取得  col_C = Range("C1").Column  col_F = Range("F1").Column  Application.ScreenUpdating = False  'エラー処理  If Selection.Count > 1 Then Exit Sub  Application.EnableEvents = False  On Error GoTo line  'F列に入力した数値を100倍する  If Target.Column = col_F Then   If IsNumeric(Target.Value) Then Target.Value = Target.Value * 100  End If    'セルの移動  Select Case Target.Column   Case col_C: Target.Offset(0, col_F - col_C).Select '// C列→F列   Case col_F: Target.Offset(1, col_C - col_F).Select '// F列→C列  End Select line:  Application.EnableEvents = True  Application.ScreenUpdating = True End Sub

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.5

たびたびすみません。 コメントも間違ってましたので 改めて修正投稿します。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim col_C As Integer  Dim col_F As Integer  '列番号の取得  col_C = Range("C1").Column  col_F = Range("F1").Column  If Target.Count <> 1 Then Exit Sub  Select Case Target.Column   Case col_C: Target.Offset(0, col_F - col_C).Select '// C列→F列   Case col_F: Target.Offset(1, col_C - col_F).Select '// F列→C列  End Select End Sub

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

VBAでSheet1のChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 6 Then Target.Offset(1, -3).Select ElseIf Target.Column = 3 Then Target.Offset(0, 3).Select End If End Sub を入れるとそれらしくなります。 ただ、イベント発効のとめ方、その他色んな特殊なキーインやマウス操作には 耐えうるか未検討です。DELキーは何とか辛抱できそう。 複数セルのコピー貼り付けもOKのよう。

oguno
質問者

お礼

imogasi様 ありがとうございました。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

ごめんなさい。 記入ミスです。 (誤) Dim col_N As Integer (正) Dim col_F As Integer

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

こんにちは。 C列、F列のみの連続入力で良いですか? ランダムなら別途補足してください。 以下のコードを シートモジュールに登録してください。 そのシートのC列に入力確定すると同行のF列へ移動し、 そこで入力確定すると次の行のC列に移動します。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim col_C As Integer  Dim col_N As Integer  '列番号の取得  col_C = Range("C1").Column  col_F = Range("F1").Column  If Target.Count <> 1 Then Exit Sub  Select Case Target.Column   Case col_C: Target.Offset(0, col_F - col_C).Select '// F列→C列   Case col_F: Target.Offset(1, col_C - col_F).Select '// C列→F列  End Select End Sub

oguno
質問者

補足

ka_na_de様 早速の御指導ありがとうございましす。 現在、下記のように使っています。 Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False If Target.Column <> 6 Then Exit Sub '100倍にする列の指定 If Selection.Count > 1 Then Exit Sub Application.EnableEvents = False On Error GoTo line If IsNumeric(Target.Value) Then Target.Value = Target.Value * 100 'F列に入力した数値を100倍する。 line: Application.EnableEvents = True Application.ScreenUpdating = True End Sub ●この下にご指導のVBAを登録しても駄目なのでしょうか。 ●上記のVBAをコメントアウトしますと、ご指導のVBAが希望通りになります。 ●にご指導のVBAを登録するシートが判りません。 また、別シートを出す方法も判りません。 ●VBAの知識が無い為ご迷惑をお掛けしますが、登録に関して御指導御願いできないでしょうか >C列、F列のみの連続入力で良いですか? ●上記で結構で御座います。

  • 134
  • ベストアンサー率27% (162/600)
回答No.1

1.シート保護を使う ・入力予定のセルをCtrlを押しながらクリックし、選択 ・セルの書式設定から保護タグで保護を解除 ・シートに保護を掛ける ・オプションの編集タグで、入力後のセル移動を「右」にする 2.マクロを使う Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row >= 6 And Target.Column = 3 Then Cells(Target.Row, 6).Select Else If Target.Row >= 6 And Target.Column = 6 Then Cells(Target.Row + 1, 3).Select End If End If End Sub かな

oguno
質問者

お礼

134様 御指導ありがとうございました。

関連するQ&A