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で質問しましょう!
似たような質問が見つかりました
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Excel(エクセル) コンボボックス及びリストボックスを5段階連動させる方法をご存知の方ご教授頂きたいです。 Excelで 3 2022/04/03 21:43
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Visual Basic(VBA) VBA ComboBoxについて 2 2022/10/21 12:15
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- ヤフオク! ヤフオクで200サイズの商品を出品したいです おてがる配送対象外ですのでヤマトの着払いで考えたら選択 6 2022/09/14 19:11
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
- Excel(エクセル) エクセルVBA 特殊フォルダのパスを取得の方法を教えてください 3 2022/09/02 13:14
- ヤフオク! ヤフオク 落札者なしの商品ページを削除したい 1 2023/08/04 16:36
- ヤフオク! ヤフオク送料の選択肢にないのがある 2 2023/08/28 10:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
MSGBOXのフォント大きさ変更
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
【VBAユーザーフォームで閉じる...
-
クリックイベントなのに、2回ク...
-
Excelにて、ユーザーフォームで...
-
ユーザーフォーム上に現在日時...
-
Hideについて(.NET)
-
モーダルフォームとモードレス...
-
ACCESSのフォーム、開くんです...
-
Form_Load と Form_Activate の...
-
コントロールの存在確認
-
Microsoft Formsの「個人情報や...
-
フォームを画面のど真ん中に表...
-
VBA(エクセル)のユーザー...
-
エスケープキーを押して、フォ...
-
フォームウィンドウを最前面に...
-
任意のフォームが表示されてい...
-
Excel VBAでユーザーフォームだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
クリックイベントなのに、2回ク...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォームのテキストボ...
-
【VBAユーザーフォームで閉じる...
-
モーダルフォームとモードレス...
-
VBAでユーザーフォームを再表示...
-
エクセルVBAのフォームを最...
-
MSGBOXのフォント大きさ変更
-
Form_Load と Form_Activate の...
-
ユーザーフォーム上に現在日時...
-
Excelにて、ユーザーフォームで...
-
Hideについて(.NET)
-
フォームウィンドウを最前面に...
-
コントロールの存在確認
-
VBA(エクセル)のユーザー...
-
'ユーザーフォーム右上隅の[×...
-
エクセルVBA フォーム上でOnkey...
-
ブックをCloseまたはQuitで閉じ...
おすすめ情報