【エクセルマクロ】オートフィルタで最大値・最小値を抽出する

エクセルマクロ:オートフィルタで最大値・最小値抽出 アイキャッチ エクセルマクロで効率化する

エクセルマクロで、オートフィルタで最大値・最小値を抽出するVBAコードをご紹介します。

このページのマクロコードは、コピペで使えます。
せひ、お試しください。

オートフィルタで最大値を抽出

以下のマクロを実行すると、オートフィルタで最大値を抽出します。

Sub オートフィルタで最大値を抽出する()
 
  Dim MaxVal As Long
 
  With Application.WorksheetFunction
 
       'セルB2:B10の最大値を求める
       MaxVal = .Max(Range(Cells(2, 2), Cells(10, 2)))
 
  End With
  
    'オートフィルタで最大値を抽出する
    ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=MaxVal

End Sub

 

マクロ実行前

B列を最大値で抽出する前の表示です。


 

マクロ実行後

B列を最大値で抽出した後の表示です。

マクロコードの [Field:2] は、対象の列番号を指定します。(B列の列番号は ”2” )
Max関数を使用しています。


 
 

オートフィルタで最大値を抽出(配列使用)

以下のマクロを実行すると、配列を使ってオートフィルタで最大値を抽出します。

Sub 配列を使用してオートフィルタで最大値を抽出する()

Dim i As Long
Dim MaxNum As Long
Dim MyList As Variant
    
 'データを配列へ格納
 MyList = Range("B1", Range("B" & Rows.Count).End(xlUp)) '.Resize(, 3).Value

 '初期値を設定
 MaxNum = 0
    
 '配列をループ
 For i = 2 To UBound(MyList)
     If MyList(i, 1) > MaxNum Then
        '最大値を格納
         MaxNum = MyList(i, 1)
     End If
 Next i
    
 'オートフィルタで最大値を抽出する
 ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=MaxNum

End Sub

 
配列をループし、最大値を [MaxNum] に格納しています。
 

オートフィルタで最大値を抽出(条件設定)

以下のマクロを実行すると、条件設定をして最大値を抽出します。

Sub 条件設定をしてオートフィルタで最大値を抽出する()
 
Dim i As Long
Dim MaxNum As Long
Dim Target As String
Dim MyList As Variant
     
 'データを配列へ格納
 MyList = Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 2).Value
 
 '初期値を設定
 MaxNum = 0
 
 '店舗を指定
 Target = "秋田店"
     
 '配列をループ
 For i = 2 To UBound(MyList)
     If MyList(i, 1) = Target Then
        If MyList(i, 2) > MaxNum Then
           '最大値を格納
            MaxNum = MyList(i, 2)
        End If
     End If
 Next i
     
 'オートフィルタで最大値を抽出する
 With ActiveSheet.Range("A1")
     .CurrentRegion.AutoFilter Field:=1, Criteria1:=Target
     .CurrentRegion.AutoFilter Field:=2, Criteria1:=MaxNum
 End With
 
End Sub

 
”秋田店” の最大値を抽出して表示しました。

配列を使用すると、ちょっと複雑なデータ抽出が可能になります。


 

オートフィルタで最小値を抽出

以下のマクロを実行すると、オートフィルタで最小値を抽出します。

Sub オートフィルタで最小値を抽出する()
 
  Dim MinVal As Long
 
  With Application.WorksheetFunction
 
       'セルB2:B10の最小値を求める
       MinVal = .Min(Range(Cells(2, 2), Cells(10, 2)))
 
  End With
  
    'オートフィルタで最小値を抽出する
    ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=MinVal

End Sub

 

マクロ実行後

B列の最小値を抽出して表示しました。
Min関数を使用しています。


 
 

オートフィルタで最小値を抽出(配列使用)

以下のマクロを実行すると、配列を使ってオートフィルタで最小値を抽出します。

Sub 配列を使用してオートフィルタで最小値を抽出する()

Dim i As Long
Dim MinNum As Long
Dim MyList As Variant
    
 'データを配列へ格納
 MyList = Range("B1", Range("B" & Rows.Count).End(xlUp)) '.Resize(, 3).Value

 '初期値を設定
 MinNum = 100000
    
 '配列をループ
 For i = 2 To UBound(MyList)
     If MyList(i, 1) < MinNum Then
        '最小値を格納
        MinNum = MyList(i, 1)
     End If
 Next i
    
 'オートフィルタで最小値を抽出する
 ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=MinNum

End Sub

 
配列をループし、最小値を [MinNum] に格納しています。
 

【エクセルマクロ】オートフィルタで以上以下を抽出:条件指定
...