Excel VBA オートフィルターで特定期間のデータを抽出する

スポンサーリンク
スポンサーリンク

オートフィルターで特定期間のデータを抽出する

オートフィルターで特定期間のデータを抽出するには
Range【レンジ】オブジェクト
AutoFilter【オートフィルター】メソッドを使用します。

実行イメージ

コード例

Sub 期間抽出()
ActiveSheet.AutoFilterMode = False
Range("A1").AutoFilter field:=1, _
Criteria1:=">=2017/4/4", _
Operator:=xlAnd, _
Criteria2:="<=2017/4/6"
End Sub

コードの解説

2行目
【ActiveSheet.AutoFilterMode = False】
Worksheetオブジェクトの
AutoFilterMode【オートフィルターモード】プロパティに
Falseを設定して、フィルターモードを解除します。


3行目~6行目
【Range(“A1″).AutoFilter Field:=1, _
Criteria1:=”>=2017/4/4″, _
Operator:=xlAnd, _
Criteria2:=”<=2017/4/6″】

Rangeオブジェクトの
AutoFilter【オートフィルター】メソッドを使用して
データを抽出します。
抽出条件の対象となる列を表す
引数Field【フィールド】に1列目を表す1を設定します。
1つめの抽出条件となる文字列を表す
引数Criteria1【クライテリアワン】に比較演算子を使用し
2017/4/4以上を設定します。
次に、抽出条件を表す
引数Operator【オペレータ】に
AND条件(Criteria1かつCriteria2)を表す
XlAndを設定します。
2つめの抽出条件となる文字列を表す
引数Criteria2【クライテリアトゥ】に比較演算子を使用し
2017/4/6以下を設定して
2017/4/4~2017/4/6のデータを抽出します。


抽出期間をInputBox関数で取得する例

コード例

Sub 期間抽出()
ActiveSheet.AutoFilterMode = False
Dim 期間1 As String
Dim 期間2 As String
期間1 = InputBox("データ抽出開始日を入力してください。(2017/1/1形式で入力)")
期間2 = InputBox("データ抽出終了日を入力してください。(2017/1/1形式で入力)")
Range("A1").AutoFilter Field:=1, _
Criteria1:=">=" & 期間1, _
Operator:=xlAnd, _
Criteria2:="<=" & 期間2
End Sub

コードの説明

2行目
【ActiveSheet.AutoFilterMode = False】

Worksheetオブジェクトの
AutoFilterMode【オートフィルターモード】プロパティに
Falseを設定して、フィルターモードを解除します。


3行目
【Dim 期間1 As String】

InputBox関数を利用してユーザーから
抽出期間の開始の日付を受取り、格納する
変数「期間1」を
文字列型(String)で宣言します。


4行目
【Dim 期間2 As String】

InputBox関数を利用してユーザーから
抽出期間の終了の日付を受取り、格納する
変数「期間2」を
文字列型(String)で宣言します。


5行目
【期間1 = InputBox(“データ抽出開始日を入力してください。(2017/1/1形式で入力)”)】

InputBox【インプットボックス】関数を利用して
ユーザーから抽出期間の開始日を受取り
変数「期間1」に代入します。


6行目
【期間2 = InputBox(“データ抽出終了日を入力してください。(2017/1/1形式で入力)”)】

InputBox【インプットボックス】関数を利用して
ユーザーから抽出期間の終了日を受取り
変数「期間2」に代入します。


7行目以降は上記の
「オートフィルタで特定期間のデータを抽出する」コードの
3行目~6行目と基本的には同じです。
抽出文字列が変数「期間1」と変数「期間2」に置き換わっただけです。


抽出した期間のデータを別シートに抽出する例

コード例

Sub 期間抽出()
ActiveSheet.AutoFilterMode = False
Dim 期間1 As String
Dim 期間2 As String
期間1 = InputBox("データ抽出開始日を入力してください。(2017/1/1形式で入力)")
期間2 = InputBox("データ抽出終了日を入力してください。(2017/1/1形式で入力)")
Range("A1").AutoFilter Field:=1, _
Criteria1:=">=" & 期間1, _
Operator:=xlAnd, _
Criteria2:="<=" & 期間2
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "抽出"
Sheets(1).Range("A1").CurrentRegion.Copy Sheets("抽出").Range("A1")
Sheets(1).AutoFilterMode = False
End Sub

コードの解説

2行目~10行目
「抽出期間をInputBox関数で取得する例」の
2行目~10行目と同じ内容です。


11行目
【Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = “抽出”】

Worksheetオブジェクトの
Add【アド】メソッドを使用してワークシートを追加して
「抽出」という名前を付けます。


12行目
【Sheets(1).Range(“A1”).CurrentRegion.Copy Sheets(“抽出”).Range(“A1”)】

抽出された元のデータがあるシートをインデックス番号で指定して
A1セルからのデータ範囲をCurrentRegion【カレントリジョン】プロパティ
参照してCopy【コピー】メソッドでコピーして
追加した抽出シートに貼り付けます。


13行目
【Sheets(1).AutoFilterMode = False】

元のシートをインデックス番号で参照して
Worksheetオブジェクトの
AutoFilterMode【オートフィルタモード】にFalseを設定して
オートフィルターモードを解除します。


以上で、オートフィルターで特定期間のデータを抽出する方法の解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク