|
こんにちわ。おじゃまします。
すみませんが、教えていただけないでしょうか・・・。
1.複数のシートから呼び出したコンボボックスの全リストの並び替え
2.どのコンボボックスから入力しても反応してほしい
ということなのですが。
メーカー名(ComboBox4)・商品名(Combobox5)・規格(ComboBox6)・入数(textBox2)etc・・・ の情報が入ったシートが複数あります。(増える可能性大)
その複数のシートから重複しないリストをComboboxにListを表示させています。
1文字目を入れて、Enterを押すとその文字の1番目がComboBoxに表示されます。
初期値には以下のモジュールを記述しました。
'Combobox4(メーカー)5(品名)6(規格)の設定
ComboBox4.Clear
ComboBox5.Clear
ComboBox6.Clear
For UFI_WSC = 1 To Worksheets.Count
If Worksheets(UFI_WSC).Range("A1").Value = "メーカー名" Then
↑いろんなシートがブックに含まれている為、セルA1がメーカー名のシートだけを
対象にしてもらいます。
UFI_Lst = Worksheets(UFI_WSC).Range("B65536").End(xlUp).Row
Set MyRange = Worksheets(UFI_WSC).Range("B2:B" & UFI_Lst)
On Error Resume Next
For Each MyRan In MyRange
MyAddA.Add MyRan, CStr(MyRan.Value) 'メーカー
MyAddB.Add MyRan.Offset(, 1), CStr(MyRan.Offset(,1).Value) '品名
MyAddC.Add MyRan.Offset(, 2), CStr(MyRan.Offset(,2).Value) '規格
Next MyRan
On Error GoTo 0
MemCouA = MyAddA.Count
MemCouB = MyAddB.Count
MemCouC = MyAddC.Count
Application.EnableEvents = False
For UFI_MA = 1 To MemCouA
ComboBox4.AddItem MyAddA(UFI_MA).Value
Next UFI_MA
For UFI_MB = 1 To MemCouB
ComboBox5.AddItem MyAddB(UFI_MB).Value
Next UFI_MB
For UFI_MC = 1 To MemCouC
ComboBox6.AddItem MyAddC(UFI_MC).Value
Next UFI_MC
Application.EnableEvents = True
Set MyRange = Nothing
Set MyR = Nothing
Set MyAddA = Nothing
Set MyAddB = Nothing
Set MyAddC = Nothing
End If
Next UFI_WSC
End Sub
これでは、シートを順番に見に行くので、ComboBoxには、
Sheet1のMyAddA
Sheet2のMyAddA
・・・
の昇順が表示されてしまいます。
全体の昇順を表示させるにはどうすればいいのでしょう。
もう一つ、どのComboboxからでも反応して欲しいのですが、
入力しなおしたりすると、重複したり、先に入れていたコンボボックスが空になったりするのです。コンボボックスをClearにするタイミングがわからないんです。
Private Sub ComboBox4_Change()
Dim LastRow As Long
Dim WSCount As Integer
ComboBox5.Clear
ComboBox6.Clear
For WSCount = 1 To Worksheets.Count
If Worksheets(WSCount).Range("B1").Value = "メーカー名" Then
LastRow = Worksheets(WSCount).Range("B65536").End(xlUp).Row
Set MyRange = Worksheets(WSCount).Range("B2:B" & LastRow)
MyCom = ComboBox4.Value
On Error Resume Next
For Each MyR In MyRange
If MyR = MyCom Then
MyAddA.Add MyR.Offset(, 1), CStr(MyR.Offset(, 1).Value) '商品名
MyAddB.Add MyR.Offset(, 2), CStr(MyR.Offset(, 2).Value) '規格
End If
Next MyR
On Error GoTo 0
MemCouA = MyAddA.Count
MemCouB = MyAddB.Count
Application.EnableEvents = False
For UFI_MA = 1 To MemCouA
ComboBox5.AddItem MyAddA(UFI_MA).Value
Next UFI_MA
For UFI_MB = 1 To MemCouB
ComboBox6.AddItem MyAddB(UFI_MB).Value
Next UFI_MB
Application.EnableEvents = True
Set MyRange = Nothing
Set MyR = Nothing
Set MyAddA = Nothing
Set MyAddB = Nothing
End If
Next WSCount
End Sub
Private Sub ComboBox5_Change()
Dim LastRow As Long
Dim Meka As String
If ComboBox4.Value = "" Then ComboBox4.Clear
If ComboBox6.Value = "" Then ComboBox6.Clear
For WSCount = 1 To Worksheets.Count
If Worksheets(WSCount).Range("A1").Value = "分類" Then
LastRow = Worksheets(WSCount).Range("C65536").End(xlUp).Row
Set MyRange = Worksheets(WSCount).Range("C2:C" & LastRow)
MyCom = ComboBox5.Value
On Error Resume Next
For Each MyR In MyRange
If MyR = MyCom Then
MyAddA.Add MyR.Offset(, -1), CStr(MyR.Offset(, -1).Value) 'メーカ名
MyAddB.Add MyR.Offset(, 1), CStr(MyR.Offset(, 1).Value) '規格
MyAddC.Add MyR.Offset(, -2), CStr(MyR.Offset(-2).Value) '分類
End If
Next MyR
On Error GoTo 0
MemCouA = MyAddA.Count
MemCouB = MyAddB.Count
MemCouC = MyAddC.Count
Application.EnableEvents = False
For UFI_MA = 1 To MemCouA
ComboBox4.AddItem MyAddA(UFI_MA).Value
Next UFI_MA
For UFI_MB = 1 To MemCouB
ComboBox6.AddItem MyAddB(UFI_MB).Value
Next UFI_MB
Application.EnableEvents = True
Set MyRange = Nothing
Set MyR = Nothing
Set MyAddA = Nothing
Set MyAddB = Nothing
Set MyAddC = Nothing
End If
Next WSCount
End Sub
長くて、わかりずらい文章ですみません。
どうか助言をよろしくお願いします。
|
|