オートフィルターで特定期間のデータを抽出する
オートフィルターで特定期間のデータを抽出するにはRange【レンジ】オブジェクトのAutoFilter【オートフィルター】メソッドを使用します。
実行イメージ
コードと解説
Sub 期間抽出() ActiveSheet.AutoFilterMode = False Range("A1").AutoFilter field:=1, _ Criteria1:=">=2017/4/4", _ Operator:=xlAnd, _ Criteria2:="<=2017/4/6" End Sub
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
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
「抽出期間を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を設定してオートフィルターモードを解除します。
以上で、オートフィルターで特定期間のデータを抽出する方法の解説を終了します。
ありがとうございました。