エクセルマクロで、オートフィルタで最大値・最小値を抽出する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] に格納しています。
この記事がお役に立ちますと幸いです。

【エクセルマクロ】オートフィルタ処理を自動化:超便利13選
...