プロが教える店舗&オフィスのセキュリティ対策術

ユーザーフォームで銀行に対応した支店コードの入力ができません
Sheet1のA列に銀行名、B列に銀行コード、C列に支店名、D列に支店コードがあります。
ユーザーフォームのテキストボックス1に銀行名を入力したら、Sheet1を参照しテキストボックス2に銀行コードが自動入力できるようにはできました。
しかし、テキストボックス3に支店名を入力し、テキストボックス4に銀行に対応した支店コードを自動入力することができません。

下記記述にどのような追加をすれば可能でしょうか?ご指南いただけるとたすかります。

・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub 銀行名_Change()
Dim r As Range

Set r = Worksheets("銀行コード").Columns("A:A").Find _
(銀行名.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not r Is Nothing Then
銀行コード.Value = r.Offset(0, 1).Value
Else
銀行コード.Value = ""
End If

End Sub

「ユーザーフォームで銀行に対応した支店コー」の質問画像

A 回答 (5件)

#1です


かなりいい加減な回答とコードを晒してしまいました お詫びいたします
テキストボックス1に銀行名を入力したら・・
#4様が回答されているようにどうも文章とコードが合致していません

もし、テキストボックス1が銀行名と言うコントロールの場合
>自動入力できるようにはできました。
示されていコードでの実現は難しいと思います
どの様なコードなのでしょう?

#1のお詫びと訂正の意味合いを含め

示されている表組でコントロールオブジェクト名が
テキストボックス1が銀行名 テキストボックス2が銀行コード
テキストボックス3が支店名 テキストボックス4が支店コード
で支店名を入力して支店コードにD列該当行の値を入れるコードです

Private Sub 支店名_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim r As Range, rTmp As Range, searchRng As Range
If 支店名.Value = "" Then Exit Sub
Set searchRng = Worksheets("銀行コード").Columns("C:C")
Set r = searchRng.Find(支店名.Value, LookIn:=xlValues, lookat:=xlWhole)
Set rTmp = r
Do While Cells(r.Row, "A").Value <> 銀行名.Value
Set r = searchRng.FindNext(r)
If r.Address = rTmp.Address Then
Exit Do
End If
Loop
If Not r Is Nothing Then
支店コード.Value = r.Offset(0, 1).Value
Else
支店コード.Value = ""
End If
End Sub

支店名(テキストボックス3)入力後フォーカスを移すと実行されます
Findとなっていましたので使用しています

テキストボックス1とテキストボックス3はテキストボックスより
コンボボックスやリストボックスの方が良いと思います。。
    • good
    • 1
この回答へのお礼

説明が不備にもかかわらず、推測してご指南いただきありがとうございます。
理解が深まり、モヤが晴れました。

お礼日時:2022/07/28 19:39

こんばんは



処理内容が、ご提示のものとボックスの名称や列の位置が違うだけなので、そのまま全部をコピペして、テキストボックスの名称と列位置の部分を書き換えればよいです。
ただし、こちらでは正しい名称等がわからないので、コード化できません。

フォーム要素の名称がどうなっているのか、文章とコードで齟齬があるのでわかりません。
 ・テキストボックス1なのか銀行名なのか
 ・テキストボックス2なのか銀行コードなのか
 ・テキストボックス3なのか支店名なのか
 ・テキストボックス4なのか始点コードなのか
また、シート名も
 ・Sheet1なのか銀行コードなのか
まぁ、ご提示のコードで動いているのなら、コードが正なのだろうと推測できますが、記載のない部分の名称に関してはわかりませんので。
質問者様にはわかっているはずですので、正しい名称と列に書き換えればそのまま動作するでしょう。
    • good
    • 1

微調整が必要かもしれませんが、以下でどうでしょうか。


Private Sub 支店名_Change()
Dim wrow As Long
支店コード.Value = ""
With Worksheets("銀行コード")
For wrow = 2 To .Cells(Rows.Count, 1).End(xlUp).row
If .Cells(wrow, 1).Value = 銀行名.Value And .Cells(wrow, 3).Value = 支店名.Value Then
支店コード.Value = .Cells(wrow, 4).Value
Exit Sub
End If
Next
End With
End Sub
    • good
    • 0

ごめんなさい


テキストボックスでした
コンボボックスやリストボックスでないので
#1の ちなみに 以降は無視してください。
    • good
    • 0

>下記記述にどのような追加をすれば可能でしょうか?


支店が1店舗のみなら可能ですが・・複数あればダメですね
>テキストボックス3に支店名を入力し、テキストボックス4に銀行に対応した支店コードを自動入力
これなら、Private Sub 銀行名_Change()と同じようにコントロールのイベントを作成すれば可能です

テキストボックス3 コントロール名が分からないですけれど 
支店名・支店コードとして
Private Sub 銀行名_Change()の内容の参照列をずらすだけ

Private Sub 支店名_Change()
Dim r As Range

Set r = Worksheets("銀行コード").Columns("C:C").Find _
(支店名.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not r Is Nothing Then
支店コード.Value = r.Offset(0, 1).Value
Else
支店コード.Value = ""
End If

ちなみにPrivate Sub 銀行名_Change()でやるべきは、銀行コードの出力と支店名の登録でしょう

シート名Sheet1なのか銀行コードなのかコントロール名や複数支店名が
あるかどうか、ある場合の表組も分からないので ここ迄としますね
    • good
    • 1

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