1

みなさん、おはようございます。

データを並べ替えたいマクロがあります。私のワークブックのボタンは、10個のチェックボックスがある小さなユーザーフォームを呼び出します。ユーザーは、確認したいカテゴリを選択して、[並べ替え]をクリックする必要があります。私が望む結果は、彼が表示することを選択したカテゴリのみですが、添付されたマクロからオールオアナッシングの結果が得られます。以下は、カテゴリを並べ替えるためのフォーム/ボタンをサポートするマクロです。Googleや他のいくつかのフォーラムを検索しましたが、問題に関連する回答が見つかりません。あなたが提供できるどんな助けでも大いに感謝されるでしょう。

ありがとう!

Private Sub cmdSort_Click()

LastRow = Range("A" & Rows.Count).End(xlUp).Row

If chkFE = True Then
    For Each cell In Range("BC4:BC" & LastRow)
        If UCase(cell.Value) <> "Fire Extinguishers" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkChem = True Then
    For Each cell In Range("BD4:BD" & LastRow)
        If UCase(cell.Value) <> "Chem" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkFL = True Then
    For Each cell In Range("BE4:BE" & LastRow)
        If UCase(cell.Value) <> "FL" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkElec = True Then
    For Each cell In Range("BF4:BF" & LastRow)
        If UCase(cell.Value) <> "Elec" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkFP = True Then
    For Each cell In Range("BG4:BG" & LastRow)
        If UCase(cell.Value) <> "FP" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkLift = True Then
    For Each cell In Range("BH4:BH" & LastRow)
        If UCase(cell.Value) <> "Lift" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkPPE = True Then
    For Each cell In Range("BI4:BI" & LastRow)
        If UCase(cell.Value) <> "PPE" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkPS = True Then
    For Each cell In Range("BJ4:BJ" & LastRow)
        If UCase(cell.Value) <> "PS" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkSTF = True Then
    For Each cell In Range("BK4:BK" & LastRow)
        If UCase(cell.Value) <> "STF" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkErgonomics = True Then
    For Each cell In Range("BL4:BL" & LastRow)
        If UCase(cell.Value) <> "Ergonomics" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If



Unload frmSort

End Sub
4

2 に答える 2

2

実際には、並べ替えではなく、フィルタリングを行っています。どちらが問題を提起しますか、なぜユーザーにExcelのFilterボタンとダイアログを許可しないのですか?

あなたの質問に答えるために、あなたのコードは、1つCheckboxがチェックされている場合にのみ機能します。チェックされたすべてのチェックボックスについて、コードは他のすべてのカテゴリの行を非表示にしています。したがって、最後のチェックボックスのカテゴリのみに行が表示されます

論理を逆にしてみることができます。すべての行を非表示にして開始しHidden = False、カテゴリがクリックされたすべての行に設定します。

于 2013-02-25T18:38:14.783 に答える
0

@AlphaFrogが提供してくれたソリューションを共有したかったのですが、それは完璧に機能します。

Private Sub cmdSort_Click() 

Dim i As Long, rng As Range, arrCriteria As Variant 

Set rng = Rows(3) 'Headers
arrCriteria = Array("Fire Extinguishers", "Chem", "FL", "Elec", "FP", _ 
"Lift", "PPE", "PS", "STF", "Ergonomics") 

Application.ScreenUpdating = False 
Rows.Hidden = False 
With Range("BC3:BL" & Range("A" & Rows.Count).End(xlUp).Row) 
    For i = 1 To 10 
        If Me.Controls("CheckBox" & i) Then 
            .AutoFilter i, arrCriteria(i - 1) 
            Set rng = Union(rng, .SpecialCells(xlCellTypeVisible).EntireRow) 
            .AutoFilter 
        End If 
    Next i 
    .Parent.AutoFilterMode = False 
    .EntireRow.Hidden = True 
    rng.EntireRow.Hidden = False 
End With 
Application.ScreenUpdating = True 

Unload frmSort 

End Sub

元の回答へのリンク: http ://www.ozgrid.com/forum/showthread.php?t = 175539

于 2013-02-26T14:39:17.907 に答える