| 
    
     |  | ▼mohimohi さん: 
 いろいろ「うんちく」を述べましたが、結局、ほとんどのコードを現在のシートのシートモジュールに書きました。
 ただ、1か所、ThisWOrkbookモジュールのOpenイベントで参照しているところがありありますので
 先に述べた方法で、このシートのシートコード名を MainSh に変更してください。
 
 ThisWorkbookモジュール
 
 Private Sub Workbook_Open()
 MainSh.Init
 End Sub
 
 シートモジュール
 
 ・CommandButton1_Click を削除
 ・新たに以下を追加。
 
 Public Sub Init()    'Workbook_Open から実行される
 Dim WS As Worksheet
 Dim x As Long
 Dim ckb As OLEObject
 
 Set WS = Sheets("Sheet2")
 ComboBox2.Clear
 ComboBox3.Clear
 ComboBox4.Clear
 ComboBox1.Value = ""
 ComboBox2.Value = ""
 ComboBox3.Value = ""
 ComboBox4.Value = ""
 
 WS.UsedRange.Clear
 WS.AutoFilterMode = False
 Range("A1").CurrentRegion.Columns("A:D").Copy WS.Range("A1")
 WS.Range("E1").Value = 1
 WS.Range("A1").CurrentRegion.Columns("E").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, Step:=1, Trend:=False
 WS.Range("A1").AutoFilter
 Set rfA = WS.AutoFilter.Range
 Set rfX = WS.Cells(rfA.Rows.Count + 2, "A")
 WS.Range("A1").CurrentRegion.Columns("A").Copy WS.Range("G1")
 WS.Range("G1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
 With WS.Range("G1").CurrentRegion
 If .Rows.Count = 2 Then
 ComboBox1.AddItem .Offset(1).Value
 Else
 ComboBox1.List = .Offset(1).Resize(.Count - 1).Value
 End If
 End With
 For x = 1 To 8
 OLEObjects("CheckBox" & x).Object.Value = False
 OLEObjects("CheckBox" & x).Object.Enabled = False
 Next
 
 If dic Is Nothing Then
 Set dic = CreateObject("Scripting.Dictionary")
 For Each ckb In OLEObjects
 If TypeName(ckb.Object) = "CheckBox" Then dic(ckb.Object.Caption) = ckb.Name
 Next
 End If
 
 '一行目の値をComboBox1〜COmboBox4にセット
 ComboBox1.Value = Range("A2").Value
 ComboBox2.ListIndex = 0
 ComboBox3.ListIndex = 0
 ComboBox4.ListIndex = 0
 
 End Sub
 
 |  |