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

こんにちは。
vbaで以下のような動作を行うためのコードを教えてください。


りんご 赤
みかん オレンジ
ぶどう 紫

上記のようなリストがあるとします(A列に果物名、B列に色)。

ユーザーフォームにテキストボックス1とテキストボックス2を配置し、
テキストボックス1に「りんご」と打ち込むと、自動的にテキストボックス2に「赤」が
入力される。
テキストボックス2に「みかん」ならテキストボックス2に「オレンジ」が…

という感じのマクロを書きたいです。

よろしくお願いします。

A 回答 (4件)

一例です。


シート上に
A B
りんご 赤
みかん オレンジ
ぶどう 紫
と準備
Private Sub TextBox1_Change()
TextBox2.Value = WorksheetFunction.VLookup(TextBox1.Value, Range("A1:B10"), 2, False)
End Sub
とワークシート関数を使う
    • good
    • 0

これは、VBAなどで言われる連想配列と呼ばれるものだと思います。


連想配列には、様々なバリエーションがあります。
そういう前提で問題を解くと、こんなコードになります。
'---------
Dim objDic As Object '上部に←これを忘れないこと(モジュール変数と言います)
Private Sub UserForm_Initialize()
Set objDic = CreateObject("Scripting.Dictionary")
  ''    , A , B
  objDic.Add "りんご", "赤"
  objDic.Add "みかん", "オレンジ"
  objDic.Add "ぶどう", "紫"
  objDic.Add "バナナ", "黄色"
  
End Sub
'//これは、カンマ区切りで、VBEに貼り付けてしまってもよいでしょう。
'//もし、それではやっていられないなら、シートからインポートします。

Dim objDic As Object '★上部に←これを忘れないこと
Private Sub UserForm_Initialize()
Dim i As Long
Set objDic = CreateObject("Scripting.Dictionary")
With Worksheets("Sheet1")
'2行目から
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
 On Error Resume Next
  objDic.Add .Cells(i, 1).Value, .Cells(i, 2).Value
 On Error GoTo 0
Next
End With
End Sub
'-----------------------
'テキストボックス用
Private Sub TextBox1_Change()
Dim s_Text As String
If TextBox1.Text <> "" Then
 s_Text = Trim(TextBox1.Text)
 If objDic.Exists(s_Text) Then
  TextBox2.Text = objDic.Item(s_Text)
 Else
  TextBox2.Text = ""
 End If
End If
End Sub
    • good
    • 0

No.1です。



投稿後気づきました。
>A列に果物名、B列に色・・・
ですね。

前回のコードは消去し、テキストボックス1のコードを↓に変更してください。

Private Sub TextBox1_Change()
Dim c As Range
Set c = Range("A:A").Find(what:=TextBox1, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
TextBox2.Text = c.Offset(, 1)
End If
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0

こんにちは!



一例です。
テキストボックス1のコードを↓のようにしてみてはどうでしょうか?

Private Sub TextBox1_Change()
With TextBox2
Select Case TextBox1
Case "りんご"
.Text = "赤"
Case "みかん"
.Text = "オレンジ"
Case "ぶどう"
.Text = "紫"
End Select
End With
End Sub

※ 細かいエラー処理はしていません。m(_ _)m
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A