
No.1ベストアンサー
- 回答日時:
こんな感じで如何でしょう?
以下を当該のユーザーフォームに入力してください。
元の表は、アクティブなシートのA1:D15に書かれていることが前提になります。
Ckaisha,Cshoshin,Caji,Csizeが、それぞれ会社、商品、味、サイズの各コンボボックス名になります。
※私の環境(Win10 64bit/Excel2013)では、イベント連鎖抑止目的でApplication.EnableEventsが上手く機能しなかったので、flagというモジュール内変数を宣言して代わりに使用しました。
---------------------------------------------------------
Option Explicit
Private flag As Boolean
Private Sub UserForm_initialize()
flag = True
Call makeKaishaList(Range("A2:A15"))
flag = False
End Sub
Private Sub Ckaisha_Change()
If flag Then
Exit Sub
End If
flag = True
Call makeShohinList(Range("B2:B15"))
flag = False
End Sub
Private Sub Cshohin_Change()
If flag Then
Exit Sub
End If
flag = True
Call makeAjiList(Range("C2:C15"))
flag = False
End Sub
Private Sub Caji_Change()
If flag Then
Exit Sub
End If
flag = True
Call makeSizeList(Range("D2:D15"))
flag = False
End Sub
Private Sub makeKaishaList(ByRef r As Range)
Dim rng As Range
Dim i As Long
Dim f As Boolean
Ckaisha.Clear
For Each rng In r
f = False
With Ckaisha
For i = 0 To .ListCount - 1
If rng.Value = .List(i) Then
f = True
Exit For
End If
Next i
If Not f Then
.AddItem rng.Value
End If
End With
Next
Ckaisha.ListIndex = 0
Call makeShohinList(r.offset(0, 1))
End Sub
Private Sub makeShohinList(r As Range)
Dim rng As Range
Dim i As Long
Dim f As Boolean
If Ckaisha.Text = "" Then
MsgBox "選択されていない項目があります。", vbExclamation
Exit Sub
End If
Cshohin.Clear
For Each rng In r
f = False
If rng.offset(0, -1).Value <> Ckaisha.Text Then GoTo L_CONTINUE
With Cshohin
For i = 0 To .ListCount - 1
If rng.Value = .List(i) Then
f = True
Exit For
End If
Next i
If Not f Then
.AddItem rng.Value
End If
End With
L_CONTINUE:
Next
Cshohin.ListIndex = 0
Call makeAjiList(r.offset(0, 1))
End Sub
Private Sub makeAjiList(r As Range)
Dim rng As Range
Dim i As Long
Dim f As Boolean
If Ckaisha.Text = "" Or Cshohin.Text = "" Then
MsgBox "選択されていない項目があります。", vbExclamation
Exit Sub
End If
Caji.Clear
For Each rng In r
f = False
If rng.offset(0, -2).Value <> Ckaisha.Text Then GoTo L_CONTINUE
If rng.offset(0, -1).Value <> Cshohin.Text Then GoTo L_CONTINUE
With Caji
For i = 0 To .ListCount - 1
If rng.Value = .List(i) Then
f = True
Exit For
End If
Next i
If Not f Then
.AddItem (rng.Value)
End If
End With
L_CONTINUE:
Next
Caji.ListIndex = 0
Call makeSizeList(r.offset(0, 1))
End Sub
Private Sub makeSizeList(r As Range)
Dim rng As Range
Dim i As Long
Dim f As Boolean
If Ckaisha.Text = "" Or Cshohin.Text = "" Or Caji.Text = "" Then
MsgBox "選択されていない項目があります。", vbExclamation
Exit Sub
End If
Csize.Clear
For Each rng In r
f = False
If rng.offset(0, -3).Value <> Ckaisha.Text Then GoTo L_CONTINUE
If rng.offset(0, -2).Value <> Cshohin.Text Then GoTo L_CONTINUE
If rng.offset(0, -1).Value <> Caji.Text Then GoTo L_CONTINUE
With Csize
For i = 0 To .ListCount - 1
If rng.Value = .List(i) Then
f = True
Exit For
End If
Next i
If Not f Then
.AddItem (rng.Value)
End If
End With
L_CONTINUE:
Next
Csize.ListIndex = 0
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Formsの「個人情報や...
-
ユーザーフォームを表示中にシ...
-
EXCEL ユーザーフォームのタイ...
-
ユーザーフォームのコピー?
-
Form_Load と Form_Activate の...
-
クリックイベントなのに、2回ク...
-
EXCEL VBA ユーザーフォームの...
-
VBAでユーザーフォームを再表示...
-
モーダルフォームとモードレス...
-
VB.NETでフォームロード中のエ...
-
テキストボックス入力データの...
-
フォームを表示してからメッセ...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのラベルに時...
-
サブフォームのイベントを取得...
-
フォームのテキストボックスな...
-
'ユーザーフォーム右上隅の[×...
-
ユーザーフォームのテキストボ...
-
VB.NETでフォーム間でのコント...
-
エクセルVBAのフォームを最...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Formsの「個人情報や...
-
ユーザーフォームを表示中にシ...
-
クリックイベントなのに、2回ク...
-
ExcelVBAのユーザーフォームの...
-
モーダルフォームとモードレス...
-
Form_Load と Form_Activate の...
-
Hideについて(.NET)
-
VBAでユーザーフォームを再表示...
-
ユーザーフォームのテキストボ...
-
Excelにて、ユーザーフォームで...
-
EXCEL VBA ユーザーフォームの...
-
エクセルVBAのフォームを最...
-
ユーザーフォームのラベルに時...
-
フォームウィンドウを最前面に...
-
テキストボックス入力データの...
-
ユーザーフォーム上に現在日時...
-
ACCESSのフォーム、開くんです...
-
'ユーザーフォーム右上隅の[×...
-
VBA(エクセル)のユーザー...
-
パソコンの画面に合わせてユー...
おすすめ情報