こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル inputboxの入力を編集モードで

エクセルのvbaでinputboxで入力させているのですが規定値のすぐあとに続けて入力したいのですが、一回クリックしないとセルの入力のような編集モードになりません。何百と続けて入力したいのでその度クリックしないですむよにinputboxの入力が
編集モードにすることができますでしょうか?
例えば 2019/10/ が規定値で / のすぐあとに数字をいれたいのですが
2019/10/の部分が反転されているので一回クリックしなければなりません。

投稿日時 - 2019-10-07 18:24:03

QNo.9664789

すぐに回答ほしいです

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

>ご教示のRIGHTをするとなぜか($ $ )のセルの番地が
>入力のところにでできます。ダメでした。
そうですか、当方では期待の動作になるんです。
再現できるソースコードを提示してもらえれば、
なにか案が見えてくるかもしれません。

もし、UserFormを使ってもいいのであれば、

UserForm1にTextBox1と
WidthがゼロのTextBox2のみを配置し
UserFormオブジェクトに次のようなコードを書き、
更にinputboxを呼び出す代わりに
 UserForm1.Show
を使うというのはいかがでしょうか?


Private Sub TextBox1_AfterUpdate()
 With Me.TextBox1
  If ((IsDate(.Text)) And _
   (Mid(.Text, 5, 1) = "/")) Then
   'ここへ、
   'セルにMe.TextBox1.Textを書き出すコードなど
   Me.Hide
  End If
 End With
End Sub


Private Sub UserForm_Activate()
 With Me.TextBox1
  If Mid(.Text, 7, 1) = "/" Then
   .Text = Mid(.Text, 1, 7)
  ElseIf Mid(.Text, 8, 1) = "/" Then
   .Text = Mid(.Text, 1, 8)
  End If
  .SetFocus
 End With
End Sub

なお、上記コードは
直前回に入力した年月部分を引き継ぐ動作です。
初期表示する年月をどこかのセルに配置する仕様にするのであれば
返信してください。

投稿日時 - 2019-10-14 06:58:55

お礼

すみません、あきらめかけていましたが、
sendkeys "{right}" , true で
もう一度試しましたらできました。
ありがとうございます。助かりました。

投稿日時 - 2019-10-15 13:00:39

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

No4の追加です。
CommandButton1_Click
をやめて
Private Sub CommandButton1_Enter()
Me.TextBox1.SetFocus
End Sub
にすればTextBox1入力後エンターでTextBox1にフォーカスが即戻ります。
CommandButton1を極限まで小さくして見えなくしておくと違和感がないと思います(見えるのに使えないのは変だから)

投稿日時 - 2019-10-08 15:29:09

ANo.5

No4の蛇足です。
Private Sub TextBox1_AfterUpdate()

Me.TextBox1.Value = "2019/10/"

Me.TextBox1.Value = Left(Me.TextBox1.Value, InStrRev(Me.TextBox1.Value, "/"))
にしておけば月をまたいだ時に翌月を一度入力すれば次の入力は翌月のままとなります。

投稿日時 - 2019-10-08 15:04:54

ANo.4

> 規定値を入れずに日付だけを入力させるのはいいアイデアですが月をまたぐ場合もあります。

なるほどです。inputboxではなくユーザーフォームを作成してそちらで対応すればいかがでしょう。
TextBox1とCommandButton1だけのフォームを作成します。
起動時にはTextBox1の末尾(10/の後ろ)にカーソルがあります。
TextBox1に入力後エンターでCommandButton1にフォーカースが移動しますがそこでエンターでTextBox1にフォーカスが戻り末尾にカーソルがあります。

Private Sub UserForm_Initialize()
Me.TextBox1.Value = "2019/10/"
End Sub

Private Sub CommandButton1_Click()
Me.TextBox1.SetFocus
End Sub

Private Sub TextBox1_AfterUpdate()
If IsDate(Me.TextBox1.Value) = True Then
Range("A1").Value = Me.TextBox1.Value
ElseIf Me.TextBox1.Value <> "2019/10/" Then
MsgBox "日付ではありません", vbCritical
End If
Me.TextBox1.Value = "2019/10/"
End Sub

投稿日時 - 2019-10-08 14:46:56

ANo.3

質問がinputbox利用となっているので、小生には質問の詳細がわかりにくかった。
それで(ニーズがこうではないか?と)勝手に想像してやってみた。
Sheet1にテキストボックスを2つ貼り付ける。
2つ目のテキストボックスのKeyDownイベントで、下記を設定。
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(Worksheets("Sheet1").TextBox2.Text) = 3 Then ’3文字の場合
Cells(Worksheets("Sheet1").Range("A10000").End(xlUp).Row + 1, "A") = Worksheets("Sheet1").TextBox1.Text & Worksheets("Sheet1").TextBox2.Text
TextBox2.Text = ""
End If
End Sub
デザインモードを脱する。
使い方は
TextBox2に「東京」(質問では2019/10/だが)と入れる。
変わるまではそのままにする。
TextBox2に、例えば
123と入れてENTER
346と入れてENTER
645と入れてENTER
と順次入れると、入れたのち下記の順に、A列セルにセットされていく。
東京都123
東京都346
東京都645
基データの先頭部が、「静岡」に変わったら、Textbox1に「静岡」と入れて、
次いでTextBox2で、
456ENTER-->256ENTER->182ENTER-->186ENTER
と順次入れると
下記のようにセルに入力される。
静岡456
静岡256
静岡 182
静岡186
順次連続セルに入れているが、マウスで指定した(飛び飛びの)セル(ActiveCell)に入れていくこともコードを修正すると可能。
入れるセル指定+TextBox2選択+(データ入力+Enter)の繰り返しである。
コード掲載は略。
ーー
Enterが要るとかセル選択が要る、Enterが要るとかの不満があるかもしれないが、そういう場合はこの回答を無視してください。
これでも長期の経験による回答です。
==
質問例は、(実際は)日付作成らしいので、日付特有の難しさはあるかもしれない。文字列をDateValue利用で日付シリアル値化など。
http://officetanaka.net/excel/vba/function/DateValue.htm

投稿日時 - 2019-10-07 21:35:03

ANo.2

禁じ手ではありますが

Sub Sample3()
 Dim buf As String
 SendKeys "{RIGHT}"
 buf = InputBox(Prompt:="入力", Default:="2019/10/")
 ActiveCell = buf
End Sub

というのはいかがでしょうか。

投稿日時 - 2019-10-07 20:23:55

補足

私もSendkeys"{F2}"とか試したんのですがダメだったのです、
ご教示のRIGHTをするとなぜか($ $ )のセルの番地が入力のところに
でできます。ダメでした。

投稿日時 - 2019-10-08 13:35:09

ANo.1

規定値をボックスに入れずに以下のようにしてみてはいかがでしょう。
nengetu = "2019/10/"
hizuke = nengetu & InputBox(Prompt:="日付は" & vbCrLf & nengetu)

投稿日時 - 2019-10-07 18:50:02

補足

規定値を入れずに日付だけを入力させるのはいいアイデアですが月をまたぐ場合もあります。
郵便局の振替用紙の入金の通知を入力しています。ある程度同じ日付単位で通知がきますので同じ束は同じ日付を自動で入力させ、束が変わったら入力したいのです。ここでクリックしないで数字だけを入力出来れば入力が早くなるのですが。
ちなみに会員番号と金額はバーコードを自動で読んでいます。日付だけが手入力です。

投稿日時 - 2019-10-08 13:57:05

あなたにオススメの質問