質問: Microsoft OfficeのエクセルについてVBAの質問です。 以下の実行コードが知りたいです。 1昇順、降順ボタン 2OK、Cancelボタン Cancelボタンについては、コードが Unload Me Cancelの値をTrueにしたら良いのは分かります。 ただ、一方のOKボタンは、リストボックスを開く→リストボックス内のチェックを入れる→OKを押下する→チェックを入れた項目のある行を抽出する→リストボックスを再度開く→リストボックス内のチェックを全て外す→OKを押下する→デフォルトの表に戻る。みたいなのを作りたいです。 お手数ですが、よろしくお願い致します。
回答: リスト選択、ソートしたい場所をクリックして、ユーザフォームを起動して下さい。 連続してデータが入っているセル範囲とします。 ヘッダーがあるかどうかわからないので、両対応にしました。 Option Explicit ' Private Sub UserForm_Initialize() Dim Dictionary As Object Dim Row As Long Dim Key As String ' Set Dictionary = CreateObject("Scripting.Dictionary") ' For Row = ActiveCell.Row + 1 To ActiveCell.End(xlDown).Row Key = Cells(Row, ActiveCell.Column) Dictionary(Key) = "" Next Row ' With ListBox1 .MultiSelect = 1 .List = Dictionary.Keys End With End Sub ' Private Sub CommandButton1_Click() ' ActiveCell.CurrentRegion.Sort _ Key1:=ActiveCell, Order1:=xlAscending, Header:=xlGuess End Sub ' Private Sub CommandButton2_Click() ' ActiveCell.CurrentRegion.Sort _ Key1:=ActiveCell, Order1:=xlDescending, Header:=xlGuess End Sub ' Private Sub CommandButton3_Click() Dim Criteria1() As Variant Dim RInp As Long Dim ROut As Long ' With ListBox1 ' For RInp = 0 To .ListCount - 1 ' If .Selected(RInp) Then ReDim Preserve Criteria1(ROut) Criteria1(ROut) = .List(RInp) ROut = ROut + 1 End If Next RInp End With ' ActiveCell.CurrentRegion.AutoFilter _ ActiveCell.Column - ActiveCell.CurrentRegion.Column + 1, _ Criteria1, xlFilterValues End Sub Private Sub CommandButton4_Click() ' ActiveSheet.AutoFilterMode = False Unload Me End Sub