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を設定してオートフィルターモードを解除します。


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

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