Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2010)
各sheetを選択して
投稿日時: 18/01/08 09:18:31
投稿者: kato0326

各sheetを順番に選択してオートフィルタかけています。
一括でsheet全部にオートフィルタかけたいのですが・・・
 
現在のコード?は以下です。省略etc出来るでしょうか?宜しくお願いします。
 
  Sub auto()
     
    Sheets("○○").Select
    Range("A1:C1").Select
    Selection.AutoFilter
    Range("A1").Select
    ActiveWorkbook.Worksheets("○○").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("○○").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("○○").AutoFilter.Sort
    End With
    Sheets("××").Select
    Range("A1:C1").Select
    Selection.AutoFilter
    Range("A1").Select
    ActiveWorkbook.Worksheets("××").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("××").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("××").AutoFilter.Sort
    End With
    Sheets("△△").Select
    Range("A1:C1").Select
    Selection.AutoFilter
    Range("A1").Select
    ActiveWorkbook.Worksheets("△△").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("△△").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("△△").AutoFilter.Sort
    End With
    Sheets("●●").Select
    Range("A1:C1").Select
    Selection.AutoFilter
    Range("A1").Select
    ActiveWorkbook.Worksheets("●●").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("●●").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("●●").AutoFilter.Sort
    End With
    Sheets("▲▲").Select
    Range("A1:C1").Select
    Selection.AutoFilter
    Range("A1").Select
    ActiveWorkbook.Worksheets("▲▲").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("▲▲").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("▲▲").AutoFilter.Sort
    End With
     
End Sub

回答
投稿日時: 18/01/08 10:21:57
投稿者: WinArrow
投稿者のウェブサイトに移動

↓の部分が繰り返しになります。
違うのはシート名だけなので、その部分を変数化します。

引用:
Sheets("○○").Select
     Range("A1:C1").Select
     Selection.AutoFilter
     Range("A1").Select
     ActiveWorkbook.Worksheets("○○").AutoFilter.Sort.SortFields.Clear
     ActiveWorkbook.Worksheets("○○").AutoFilter.Sort.SortFields.Add Key:=Range( _
         "B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
         xlSortNormal
     With ActiveWorkbook.Worksheets("○○").AutoFilter.Sort
     End With

 

Dim shts, shtcnt As Long
 
    shts = Array("○○", "××", "△△", "●●")
     
    With ActiveWorkbook
        For shtcnt = LBound(shts) To UBound(shts)
            With .Sheets(shts(shtcnt))
                .Select
                If Not .FilterMode Then '(1)安全のため
                    .AutoFilterMode = False
                End If
                .Range("A1:C1").AutoFilter
                .AutoFilter.Sort.SortFields.Clear
                .AutoFilter.Sort.SortFields.Add _
                        Key:=Range("B1"), _
                        SortOn:=xlSortOnValues, _
                        Order:=xlAscending, _
                        DataOption:=xlSortNormal
                With .AutoFilter.Sort
                End With
            End With
        Next
    End With

回答
投稿日時: 18/01/08 10:34:52
投稿者: WinArrow
投稿者のウェブサイトに移動

コード修正
 
> Key:=Range("B1"), _

                       Key:=.Range("B1"), _

回答
投稿日時: 18/01/08 10:42:51
投稿者: WinArrow
投稿者のウェブサイトに移動

オートフィルタの並べ替えフィールドを指定しているが
実際には、並べ替えが行われないです。
理由は、
並べ替えフィールドの指定のみで
並べ替えメソッドの記述がないからです。
 
> With .AutoFilter.Sort
> End With

                 With .AutoFilter.Sort
                    .Header = xlYes
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                 End With
に変更しましょう。

投稿日時: 18/01/09 06:22:31
投稿者: kato0326

サンプルコードありがとうございます。
 
内容を基に勉強してみます。
 
ありがとうございました。