- ベストアンサー
エクセル エンターキーによる入力位置の自動化方法
エクセルで下記のような事が出来るのでしょうか、ご教示御願い数申し上げます。 ●数字を入力した時、エンターキーを押すことによって、入力数字を確定し、次の入力位置にカーソルを移動させる事が出来るのでしょうか。 ●入力順序 C6 → F6 → C7 → F7 → ・・・・ 約500行の連続入力です。 宜しく御願い申し上げます。
- みんなの回答 (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
その他の回答 (7)
- ka_na_de
- ベストアンサー率56% (162/286)
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)
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)
たびたびすみません。 コメントも間違ってましたので 改めて修正投稿します。 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)
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のよう。
お礼
imogasi様 ありがとうございました。
- ka_na_de
- ベストアンサー率56% (162/286)
ごめんなさい。 記入ミスです。 (誤) Dim col_N As Integer (正) Dim col_F As Integer
- ka_na_de
- ベストアンサー率56% (162/286)
こんにちは。 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
補足
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)
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 かな
お礼
134様 御指導ありがとうございました。
お礼
ka_na_de様 >たびたび、修正してすみません。 ●とんでも御座いません。 こちらこそ、再三にわたるご検討・御指導本当にありがとうございました。 ●数字の入力も、カーソルの移動も思い通り完璧に出来ました。 本当にありがとうございました。 感謝申し上げます。