エクセルVBAプログラム質問 リストボックス応用
エクセルVBAプログラムについて質問です。
リストボックスから結果をリストボックスに表示させる
リストボックスを応用した内容です。
(1)今回追加したいのは、チェックボックスにチェックすることで、
期限が今月中に切れるもののみをリストボックスに表示させたいです。
(2)期限更新ボタンを押したら、3カ月プラスして延長させたいです。
期限更新したら、リストボックスの中身も更新したいです。
例(1):今日の日付 2018/9/23だとしたら、期限切れる(9月分すべて)を表示させたい。
例(2):期限(変更前)『2018/9/23』から期限(変更後)『2018/12/23』に変更
下記のプログラムで追加していきたいです。
Dim myData
Private Sub UserForm_Initialize()
Dim Dic, Keys, buf As String, i As Long
Me.ComboBox1.Style = fmStyleDropDownList
Me.ListBox1.ColumnCount = 4
Me.ListBox1.ListStyle = fmListStyleOption
Me.ListBox1.MultiSelect = fmMultiSelectMulti
Me.CommandButton1.Caption = "印刷"
Me.CommandButton1.Enabled = False
With Worksheets("DATA")
myData = .Range("A1:E" & .Cells(.Rows.Count, 1).End(xlUp).Row)
End With
Set Dic = CreateObject("Scripting.Dictionary")
On Error Resume Next
For i = 2 To UBound(myData, 1)
buf = myData(i, 1)
Dic.Add buf, buf
Next i
Keys = Dic.Keys
For i = 0 To Dic.Count - 1
Me.ComboBox1.AddItem Keys(i)
Next i
Set Dic = Nothing
End Sub
Private Sub ComboBox1_Change()
Dim i As Long, j As Integer
With Me.ListBox1
.Clear
For i = 2 To UBound(myData, 1)
If Me.ComboBox1.Value = myData(i, 1) Then
.AddItem ""
For j = 2 To 5
.List(.ListCount - 1, j - 2) = myData(i, j)
Next j
End If
Next i
End With
End Sub
Private Sub ListBox1_Change()
Dim i As Long, cnt As Long
With Me.ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
cnt = cnt + 1
End If
Next i
End With
Me.CommandButton1.Enabled = (1 <= cnt And cnt <= 2)
End Sub
Private Sub CommandButton1_Click()
Dim ws As Worksheet, i As Long, j As Integer, cnt As Byte
Set ws = Worksheets("印刷")
ws.PageSetup.PrintArea = "$I$2:$P$5"
ws.Range("J2:L5,N2:P5").ClearContents
With Me.ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
ws.Range("J2").Offset(0, cnt).Value = Me.ComboBox1.Value
For j = 0 To 2
ws.Range("J5").Offset(j * -1, cnt).Value = .List(i, j)
Next j
cnt = cnt + 2
End If
Next i
End With
Unload Me
ws.PrintPreview
End Sub