大体でIT
大体でIT
2020/9/16
Excel VBAでSetFocusを使ってテキストボックスにフォーカスする方法とSetFocusの活用事例についてご紹介します。テキストボックスとフォーカスを組み合わせるとテキストボックスへの入力をスムーズにすることができます。
この記事ではテキストボックスにフォーカスする方法とその活用例についてご紹介します。
テキストボックスへのフォーカスをうまく活用すると入力作業をスムーズにすることができます。
フォーカスを使った3つの活用事例をご紹介します。フォーカスの使い方次第で使い勝手のいいユーザーフォームが作れるかと思います。
テキストボックスでフォーカスを使う方法
フォーカスの活用事例
Excel VBAでテキストボックスにフォーカスする方法についてご紹介します。
特定のテキストボックスに入力を促すときに使えます。
テキストボックスにフォーカスするVBAコードです。
'ユーザーフォームがアクティブになったとき実行
Private Sub UserForm_Activate()
'フォーカスする
TextBox2.SetFocus
End Sub
テキストボックスへのフォーカスは『TextBox1.SetFocus』でできます。
ユーザーフォームを開いてアクティブになった際に実行するコードを使用しています『Private Sub UserForm_Activate()』。
UserForm_Initialではフォーカスできませんのでユーザフォームを開いた際にフォーカスするには『UserForm_Activate』が必要になります。
テキストボックスをフォーカスした結果
このVBAコードではTextBox2にフォーカスしています。
ユーザーにTextBox2から入力してくださいねという意味でフォーカスすると入力がスムーズになります。
テキストボックスでフォーカスの活用例について3つご紹介します。
フォーカスはテキストボックスへの入力をスムーズにするために使えます。
テキストボックスに入力した値を連続的にセルへ入力していきたいといった場合にフォーカスが使えます。
'ボタンをクリックしたとき実行
Private Sub CommandButton1_Click()
'ワークシートの最終行にテキストボックスの値を入力
ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = TextBox1.Text
TextBox1.Text = "" 'テキストボックスを空白にする
TextBox1.SetFocus 'テキストボックスをフォーカスする
End Sub
テキストボックスに値を入力
セルへ出力したら再度テキストボックスがフォーカスされます。
セルへ出力後にフォーカス
追加でデータを入力するためテキストボックスの値は空白になるようにしています。
これでわざわざテキストボックスをクリックしなくてもテキストボックスに新しい値を入力していくことができます。
VBAコードの説明
ボタンをクリックした際に実行するコード『Private Sub CommandButton1_Click()』を使用しています。
ワークシートの最終行にテキストボックスの値を出力します『ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = TextBox1.Text』。
次に新しく値を入力するため『TextBox1.Text = ""』でテキストボックスを空白としています。
テキストボックスをフォーカスします『TextBox1.SetFocus』。
これでテキストボックスからセルへの出力をちょっと効率化できて、入力のストレスを少しだけ減らすことができます。
次はテキストボックスに指定以外の値が入力された場合にテキストボックスをフォーカスするVBAコードをご紹介します。
このVBAコードでは入力形式が『20200101』ではない数字8文字以外の値が入力された場合にテキストボックスをフォーカスします。
'ボタンをクリックしたとき実行
Private Sub CommandButton1_Click()
'フラグをオフ
flag = 0
'テキストボックスの入力が8文字以外の場合
If Len(TextBox1.Text) <> 8 Then
flag = 1 'フラグを立てる
End If
'テキストボックスの値だけループ
For i = 1 To Len(TextBox1.Text)
'テキストボックスの値が数字以外の場合
If IsNumeric(Mid(TextBox1.Text, i, 1)) = False Then
flag = 1 'フラグを立てる
End If
Next
'フラグが立っている場合(誤入力の場合)
If flag = 1 Then
MsgBox "『20200101』の形式で入力してください"
TextBox1.SetFocus 'テキストボックスをフォーカス
TextBox1.SelStart = 0 '最初の文字から選択
TextBox1.SelLength = Len(TextBox1.Text) '入力された文字の長さだけ選択
'フラグが立っていない場合(入力形式が正しい)
Else
'テキストボックスの値をセルへ出力
ActiveSheet.Cells(1, 1) = TextBox1.Text
End If
End Sub
今回の指定の形式は8文字の数字で『20200101』のような形です。
テキストボックスに指定の形式以外の値『あいうえお』を入力してみます。
指定の形式以外を入力
ボタンをクリックしてセルへ出力しようとしてみます。
指定の形式以外なのでエラーメッセージ
誤入力なのでエラーメッセージを出しています。OKをクリックします。
テキストボックスをフォーカスして値を全選択
指定の文字以外の値を入力したのでテキストボックスの値がフォーカスされています。
入力した値が指定した形式の場合はテキストボックスの値がセルへ出力されます。
指定した形式の場合はセルへ出力
フォーカスをうまく使えばテキストボックスに入力された値が指定した形式以外だった場合に再入力をしやすくすることができます。
VBAコードの説明
ボタンをクリックした際に実行するコード『Private Sub CommandButton1_Click()』を使います。
入力が8文字以外の場合にフラグを立てます『If Len(TextBox1.Text) <> 8 Then』。
入力した値が数字以外の場合にもフラグを立てます『If IsNumeric(Mid(TextBox1.Text, i, 1)) = False Then』。
フラグが立っている場合『If flag = 1 Then』に、テキストボックスをフォーカスします『TextBox1.SetFocus』。
テキストボックスで選択開始する文字番号『TextBox1.SelStart = 0』と値の長さ『TextBox1.SelLength = Len(TextBox1.Text)』を指定して選択します。
これで入力した値が指定した形式以外の場合にテキストボックスをフォーカスして値を選択することができます。
テキストボックスに入力した値が指定した形式だった場合はフラグが立たない『Else』となるので、セルへ出力します『ActiveSheet.Cells(1, 1) = TextBox1.Text』。
最後にオプションボタンのクリック後にフォーカスする活用例についてご紹介します。
オプションボタンで『その他』などの項目を選択した際にその他の内容を記載してもらうためテキストボックスにフォーカスする。という使い方です。
'オプションボタンの値が変更されたときに実行
Private Sub OptionButton3_Change()
'オプションボタンが選択されていた場合
If OptionButton3.Value = True Then
'テキストボックスをフォーカスする
TextBox1.SetFocus
End If
End Sub
ユーザーフォームを開く
オプションボタンを選択してフォーカス
オプションボタンを選択するとテキストボックスがフォーカスされました。
フォーカスを使うとテキストボックスへの入力がスムーズになります。
VBAコードの説明
オプションボタンの値が変更された場合に実行するVBAコード『Private Sub OptionButton3_Change()』を使用します。
『その他』のオプションボタンが選択されていた場合に『If OptionButton3.Value = True Then』、テキストボックスをフォーカスします『TextBox1.SetFocus』。
これでオプションボタンを選択した際にテキストボックスをフォーカスすることができます。
この記事ではテキストボックスをSetFocusでフォーカスする方法とその活用例についてご紹介しました。
テキストボックスへのフォーカスを効果的に活用すると入力がスムーズになります。
フォーカスが活用できそうな例として3つの活用例をご紹介しました。フォーカスの応用次第で使い勝手のいいユーザーフォームが作れるかと思います。
ご参考になればと思います。最後までご覧くださいましてありがとうございました。