大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAでSetFocusを使ってテキストボックスにフォーカスする方法とSetFocusの活用事例についてご紹介します。テキストボックスとフォーカスを組み合わせるとテキストボックスへの入力をスムーズにすることができます。

はじめに

この記事ではテキストボックスにフォーカスする方法とその活用例についてご紹介します。

テキストボックスへのフォーカスをうまく活用すると入力作業をスムーズにすることができます。

フォーカスを使った3つの活用事例をご紹介します。フォーカスの使い方次第で使い勝手のいいユーザーフォームが作れるかと思います。

この記事で紹介すること

  • テキストボックスでフォーカスを使う方法
  • フォーカスの活用事例

目次から見たい項目へ移動すると便利ですよ。

目次

SetFocusでテキストボックスにフォーカス

Excel VBAでテキストボックスにフォーカスする方法についてご紹介します。

特定のテキストボックスに入力を促すときに使えます。

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コードを実行した結果をみてみます。

まずテキストボックスに値を入力します。

テキストボックスに値を入力

テキストボックスに値を入力

ボタンをクリックしてセルへ値を出力します。

セルへ出力したら再度テキストボックスがフォーカスされます。

セルへ出力後にフォーカス

テキストボックスの値をセルへ出力後テキストボックスをフォーカスする

テキストボックスがフォーカスされています。

追加でデータを入力するためテキストボックスの値は空白になるようにしています。

これでわざわざテキストボックスをクリックしなくてもテキストボックスに新しい値を入力していくことができます。

操作の手間を省くことができて効率的ですね。

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をクリックします。

テキストボックスをフォーカスして値を全選択

テキストボックスの値を選択してフォーカスする

指定の文字以外の値を入力したのでテキストボックスの値がフォーカスされています。

テキストボックスに入力した値が選択されています。

入力した値が指定した形式の場合はテキストボックスの値がセルへ出力されます。

指定した形式の場合はセルへ出力

テキストボックスの値が指定した形式の場合にセルへ出力

セルへ『20201212』が出力されています。

フォーカスをうまく使えばテキストボックスに入力された値が指定した形式以外だった場合に再入力をしやすくすることができます。

ちょっとした心遣いですね。

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つの活用例をご紹介しました。フォーカスの応用次第で使い勝手のいいユーザーフォームが作れるかと思います。

ご参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す