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

ExcelのVBAについて質問です。


画像のフォーム「品番コード」に入力した
値によって、コンボボックスのリストを動的に変更したいのですが、
式がわかりません。

画像の例だと、
品番コードに「AAAA」を入力した際、
コンボボックスのリストに、
カラー⇒1、71、75
サイズ⇒1、2
で表示させたいです。

品番コードのtextbox⇒PrdId
コンボボックスカラー⇒cmbCL
コンボボックスサイズ⇒cmbSZ

考え方でもよいので、ご教示いただけますでしょうか。

ーーーーーーーーーーーーーーーーーーーー
Private Sub PrdID_Change()


On Error GoTo vlookError

Dim MaxRow As Integer
MaxRow = Worksheets("SKUマスタ").Cells(Rows.Count, 1).End(xlUp).Row

Deliv.Value = WorksheetFunction.VLookup("IM03" & PrdId.Value, Worksheets("SKUマスタ").Range("A2:G" & MaxRow), 7, False)

PrdName.Value = _
WorksheetFunction.VLookup("IM03" & PrdId.Value, Worksheets("SKUマスタ").Range("A2:G" & MaxRow), 2, False)


cmbCL.AddItem

Price.Value = _
WorksheetFunction.VLookup("IM03" & PrdId.Value, Worksheets("SKUマスタ").Range("A2:G" & MaxRow), 4, False)


Exit Sub

vlookError:

Deliv.Value = ""
PrdName.Value = ""
Price.Value = ""

「ExcelのVBAについて質問です。」の質問画像

A 回答 (2件)

VBAがすごく久しぶりなので間違っていたら申し訳ないです.


(そして定義はちょっと考えてないのでそこだけ変えてください)

Private Sub TextBox1_Change()
If TextBox1.Value = "AAAA" Then
ComboBox1.AddItem "1"
ComboBox1.AddItem "2"
ComboBox2.AddItem "1"
ComboBox2.AddItem "71"
ComboBox2.AddItem "75"
Else
ComboBox1.clear
ComboBox2.clear
Exit Sub
End If

End Sub

でどうでしょうか?AAAAと,大文字もあっていないとコンボボックスの値はクリアされるはずです.そうしたくなければComboBox1.clearとComboBox2.clearの部分は抜いてください
(ただ,そうするとコンボボックスにいろいろ値が残るので,以下のようにコードを変える必要があるかもわかりません.最初から記述してあります)


Private Sub TextBox1_Change()
ComboBox1.clear
ComboBox2.clear
If TextBox1.Value = "AAAA" Then
with combobox1
.AddItem "1"
.AddItem "2"
end with
with ComboBox2
ComboBox2.AddItem "1"
ComboBox2.AddItem "71"
ComboBox2.AddItem "75"
end with

Else

Exit Sub
End If

End Sub

要はクリア処理が必要になるだろう,ということです.

あとよく見れてないので間違っていたら申し訳ないのですがエクセルにもうリストが入っているようでしたら,

lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1

Dim c as range
For Each c In Range("A1:lastrow,1")
If InStr(c.Value, textbox1.text ) > 0 Then
(ここまででテキストボックスに入力された値がA1からA列の最後の行に入っているかを確認しています.>0というのは,もし入っていたらという意味で使っています)

として,このあとcのセル番号を取得し,その何列右にあるものをコンボボックスにAddItemする,とできるはずです.
    • good
    • 0

事前に与えたい値を『名前の定義』でセル範囲を指定しておいた表を作成しておいて、



.RowSource = "名前"

により必要に応じて切り替えるとか?(検証も出来ない初級者ゆえ違っていたらごめんなさい)
    • good
    • 0

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