プロが教えるわが家の防犯対策術!

Excelで指定桁数分を入力すると自動的に次のセルに移動するようにしたいのですが、このような方法の設定の仕方はあるでしょうか。

つまり例えばA1に「1234」と入力するとセルが自動で次のセル(A2)に移動して、すぐにA2での入力に移れるような方法を探しています。

各製品の長さを入力して表にしているのですが、いちいちエンターキーを押すのが煩雑で面倒です。ご存知の方がいましたら教えて頂ければとても助かります。

宜しくお願い致します。

===================
例)

1923
----- ↓自動で次のセルに以降
1897
----- ↓自動で次のセルに以降
1638
-----

A 回答 (2件)

こんにちは。

...かなりベタなコードで、うまく動かないかもしれませんが...
...なのでテストは充分に行ってください。
>各製品の長さ
という事なので、10キー限定です。
3桁には対応させてません。(その場合はEnterキー)

標準モジュールに以下の3つのコードをコピーペーストします。
『Sub Num_in』というのが本体です。
『Sub スタート』を実行する事で、この機能を ON にします。
『Sub 解除』で OFF にします。

'-------------------------------------------------
Sub スタート()
  Dim i As Long
  With Application
   For i = 0 To 9
    .OnKey "{" & i + 96 & "}", "'Num_in" & """" & i & """" & "'"
   Next
  End With
End Sub
'-------------------------------------------------
Sub 解除()
  Dim i As Long
  With Application
   For i = 0 To 9
    .OnKey "{" & i + 96 & "}"
   Next
  End With
End Sub
'-------------------------------------------------
Sub Num_in(n As Long)
  Dim j As Long
  With Selection
    j = Len(.Value)
    If j > 3 Then
      .Value = n
    Else
      .Value = .Value & n
      If j = 3 Then .Offset(1).Select
    End If
  End With
End Sub
'-------------------------------------------------
    • good
    • 0

ENTERキーを押したあとではなくて、キーの押しさげを察知するのは、VBAのイベントを使えわないと、できないと思う。

もっと言うならAPI
の駆使など。関数のように、セルの値になってからでないと働かない仕組みは役立たない。
テキストボックスには、KeyUp,KeyDownなどのイベントがあるので
シートに、テキストボックスを1つ貼り付けて、そのKeyUpイベント
を使ってみた。
A列の書式は文字列としておく。
テキストボックスに数字を連続して入力していく。6桁になるとセルに値としてセットします。
データをセットするスタートのセルの指定は、そのセルを指定し、テキストボックス内でダブルクリックすること。
Public i
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
i = ActiveCell.Row
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Static n, s
s = s & Chr(KeyCode)
n = n + 1
If n = 6 Then
n = 0
Cells(i, "A") = s
i = i + 1
s = ""
TextBox1.Text = ""
End If
End Sub
英数半角ならうまくいくようです。(質問ではこれでOK?)
英小文字や半角カナ・全角文字もうまくいかない。
私自身の問題は
Shiftを押す記号や全角文字やカナ半角ではどうしたら良いか?
分からない。
またキャンセルやその他のキー操作の場合も未確認です。
ーー
そういうことで、後で良い回答が出なければ、相当技術を要する事項だと、私は思うので、あきらめてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています