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

マクロを教えてください。
エクセル 2016

Sheet2にリストがあります。
A列に管理番号
B列に種類

Sheet1にてユーザーフォームを使って
TextBox1に管理番号を入力すると
TextBox2に該当する種類が反映される。
Enterキーで閉じる。

TextB0x1にリストには無い管理番号を入力すると
メッセージで「正しい管理番号を入力してください」と出る。
カーソルはTextBox1に戻る。

宜しくお願い致します。

「ユーザーフォームを使ってのマクロ」の質問画像

A 回答 (3件)

No.2です。



当方の力不足でごめんなさい。
テキストボックスの操作で自身を空白にできても、SetFocusする方法が判りません。
(コマンドボタンの操作では可能です)

そこでこのままでは申し訳ないので、前回回答したコンボボックスの方法にしてみました。
ユーザーフォーム1にコンボボックスを挿入(テキストボックス1は消去しておく)した上で
↓のコードにしてみてください。

Dim i As Long
Dim c As Range, wS As Worksheet

Private Sub UserForm_Initialize()
 Set wS = Worksheets("Sheet2")
  For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
   ComboBox1.AddItem wS.Cells(i, "A")
  Next i
End Sub

Private Sub ComboBox1_Change()
 Set wS = Worksheets("Sheet2")
  Set c = wS.Range("A:A").Find(what:=ComboBox1, LookIn:=xlValues, lookat:=xlWhole)
   TextBox2 = c.Offset(, 1)
End Sub

Private Sub CommandButton1_Click()
 Unload UserForm1
End Sub

※ この程度しか思いつきません。
どうも失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

コンボボックスでのマクロを作成していただき有難うございます。

当方、マクロのことは良く判らないのですが
前回、教えていただいたマクロに
判らないながらにも追加してみましたら
やりたいことができました。

  If Not c Is Nothing Then
    TextBox2 = c.Offset(, 1)
'追加
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(TextBox1)
End With

Else
'追加
TextBox1.Value = ""
Cancel = True

   End If

ご丁寧に有難う御座いました。
機会がありましたら、またお願いします。

お礼日時:2019/02/13 12:06

こんにちは!



一例です。

>Enterキーで閉じる
とは「コマンドボタン」のCaptionが「閉じる」になっているとします。

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Dim c As Range
  Set c = Worksheets("Sheet2").Range("A:A").Find(what:=TextBox1, LookIn:=xlValues, lookat:=xlWhole)
   If Not c Is Nothing Then
    TextBox2 = c.Offset(, 1)
   Else
    MsgBox "該当データなし", vbExclamation
   End If
End Sub

Private Sub CommandButton1_Click()
 Unload UserForm1
End Sub

とりあえずは上記コードでお望みの動きになると思います。

※ 余計なお世話かもしれませんが、個人的には
テキストボックス1に直接手入力ではなく、
コンボボックスにして、その中から選択 → テキストボックス2 に該当データ表示!

とする方がSheet2のA列にあるデータだけがコンボボックスのデータなので
入力間違いを気にする必要がないと思います。m(_ _)m
    • good
    • 0
この回答へのお礼

余計なお世話なんかではありません。
確かに仰る通り、コンボボックスでのやり方の方が入力間違いは起きません。ありがとうございます。

上記コードで動作確認したところ、
TextBox1に入力した後、TextBox2にカーソルが動いてしまい
Enterキーを2度、押さないと閉じません。
1度で閉じることは出来ますでしょうか?

また、該当データなし の時に
メッセージ→Enter (OK)→Enter(TextBox2)→Enter(コマンドボタン)→→Enter(閉じる)とEnterキーを4回も押さなければなりません。
該当データなし の時は
TextBox1の内容を消去してカーソルをTextBox1に戻したいです。
(ユーザーフォームは消さない)

宜しくお願い致します。

お礼日時:2019/02/11 12:12

どっかの専門学校の宿題みたいな問題ね。


全て丸投げなの?
せめて少しくらい自分で書けないの?
    • good
    • 1

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