大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、日付でデータを抽出するには、AutoFilterとCopyを使うとできます。データ部分のみをコピーする場合は、フィルタ結果がある場合にのみ取得するといいです。データの抽出方法についてマスターしていきましょう。

はじめに

この記事では、日付でデータを抽出する方法について、ご紹介します。

やり方としては、オートフィルタを使って日付でフィルタして、Copyでフィルタ結果をコピーするとできます。

データを抽出する際には、オートフィルタがかなり使えます。

では、日付でデータを抽出する方法について、解説していきます。

この記事を読むメリット

  • データベースから日付でデータを抽出することができるようになります。

本記事の内容を動画で解説しております

VBAコードの作成手順を、動画で確認できます。

目次から見たい項目へ移動すると便利ですよ。

目次

日付を指定して抽出する

日付を指定してデータベースから、値を抽出してみます。

やりたい内容

やりたい内容は、日付でデータを抽出したい、ということになります。

日付でデータを抽出したい

日付でデータを抽出したいです。

日付でデータを抽出したいです

日付を入力して、データを抽出します。

日付を入力して、データを抽出します

実行すると、次のように日付でデータを抽出することができます。

日付でデータを抽出した結果

日付でデータを抽出することができます

では、日付でデータを抽出する方法について、段階的にVBAコードを作成していきます。

AutoFilterとCopyを使う

データベースから日付でデータを抽出してみます。

AutoFilterとCopyを使って、データを抽出するVBAコードです。

Sub TEST()
  
  'シートをクリア
  Sheets("検索").Range("A5:D1000").Clear
  
  Dim A, B
  A = Sheets("検索").Range("B2") '開始日付
  B = Sheets("検索").Range("B3") '終了日付
  '日付でフィルタ
  Sheets("DB").Range("A1").AutoFilter 1, ">=" & A, xlAnd, "<=" & B
  'フィルタ結果をコピー
  Sheets("DB").Range("A1").CurrentRegion.Copy Sheets("検索").Range("A5")
  Sheets("DB").Range("A1").AutoFilter 'フィルタを解除
  
End Sub

フォームを作成して日付を入力しておきます。

フォームを作成して日付を入力

フォームを作成しておきます。

フォームを作成しておきます

日付を入力します。

日付を入力します

実行すると、日付で、データを抽出できます。

日付でデータを抽出できた

日付で、データを抽出できました

日付で、データを抽出できました。

データ部分のみを抽出

フィルタ結果のデータ部分のみを抽出してみます。

見出しはそのままで、日付でデータを抽出することができます。

Sub TEST()
  
  'シートをクリア
  Sheets("検索").Range("A6:D1000").Clear
  
  Dim A, B
  A = Sheets("検索").Range("B2") '開始日付
  B = Sheets("検索").Range("B3") '終了日付
  '日付でフィルタ
  Sheets("DB").Range("A1").AutoFilter 1, ">=" & A, xlAnd, "<=" & B
  
  'フィルタ結果のデータ部分のみをコピー
  With Sheets("DB").Range("A1").CurrentRegion
    .Resize(.Rows.Count - 1).Offset(1, 0).Copy Sheets("検索").Range("A6")
  End With
  
  'フィルタを解除
  Sheets("DB").Range("A1").AutoFilter
  
End Sub

では、実行してみます。

データ部分のみを抽出

あらかじめ、見出しは入力しておきます。

データ部分のみを抽出してみます

実行すると、データ部分のみを抽出できます。

データ部分のみを抽出できました

データ部分のみを抽出できました。

見出しを変更して確認してみます。

見出しを変更して確認してみる

見出しを変更してみます。

確認のために、見出しを変更して、実行してみます

実行してみます。

見出しはそのままで、データ部分のみを抽出できました

見出しはそのままで、データ部分のみを抽出できました。

フィルタ結果がある場合に抽出

データ部分のみを取得する際は、フィルタ結果がある場合にのみコピーするといいです。

フィルタ結果がない場合、すべてのデータを抽出しちゃいます。

ちょっとやってみます。

フィルタ結果がない場合、すべてのデータを抽出しちゃう

フィルタ結果がない場合で、実行してみます。

フィルタ結果がない場合で、実行してみます

すべてのデータを抽出してしまいます。

すべてのデータを抽出してしまいます

すべてのデータを抽出してしまいました。

対策としては、フィルタ結果がある場合に、抽出するといいです。

フィルタ結果がある場合に、抽出する

フィルタ結果がある場合に、抽出するVBAコードです。

Sub TEST()
  
  'シートをクリア
  Sheets("検索").Range("A6:D1000").Clear
  
  Dim A, B
  A = Sheets("検索").Range("B2") '開始日付
  B = Sheets("検索").Range("B3") '終了日付
  '日付でフィルタ
  Sheets("DB").Range("A1").AutoFilter 1, ">=" & A, xlAnd, "<=" & B
  
  'フィルタ結果がある場合
  If WorksheetFunction.Subtotal(3, Sheets("DB").Range("A:A")) > 1 Then
    'フィルタ結果をコピー
    With Sheets("DB").Range("A1").CurrentRegion
      .Resize(.Rows.Count - 1).Offset(1, 0).Copy Sheets("検索").Range("A6")
    End With
  End If
  
  'フィルタを解除
  Sheets("DB").Range("A1").AutoFilter
  
End Sub

フィルタ結果がない場合で、実行してみます。

フィルタ結果がない場合で、実行してみます

フィルタ結果がないので、そのままとなります。

フィルタ結果がないので、そのままとなります

フィルタ結果がないので、そのままとなりました。

Changeイベントを使う

Changeイベントを使えば、日付を入力したタイミングで、データを抽出することができます。

Private Sub Worksheet_Change(ByVal Target As Range)
  
  'B2もしくはB3以外が変更された場合は、終了
  If Intersect(Target, Range("B2:B3")) Is Nothing Then Exit Sub
  
  Call TEST '日付でデータを抽出
  
End Sub

日付を変更してデータを抽出してみます。

日付を変更してデータを抽出

日付を変更してみます。

日付を変更してみます

日付を変更したタイミングで、データを抽出できます。

日付を変更したタイミングで、データを抽出できます

日付を変更したタイミングで、データを抽出できました。

一部のデータを抽出する

一部のデータを抽出してみます。

離れたデータを抽出

実務では、すべての列だけではなく、一部の列のデータを抽出したいという場合があるかと思います。

離れたデータを抽出してみます。

Sub TEST()
  
  'シートをクリア
  Sheets("検索").Range("A6:D1000").Clear
  
  Dim A, B
  A = Sheets("検索").Range("B2") '開始日付
  B = Sheets("検索").Range("B3") '終了日付
  '日付でフィルタ
  Sheets("DB").Range("A1").AutoFilter 1, ">=" & A, xlAnd, "<=" & B
  
  'フィルタ結果がある場合
  If WorksheetFunction.Subtotal(3, Sheets("DB").Range("A:A")) > 1 Then
    With Sheets("DB").Range("A1").CurrentRegion
      '日付をコピー
      .Resize(.Rows.Count - 1, 1).Offset(1, 0).Copy Sheets("検索").Range("A6")
      '売上をコピー
      .Resize(.Rows.Count - 1, 1).Offset(1, 3).Copy Sheets("検索").Range("B6")
    End With
  End If
  
  'フィルタを解除
  Sheets("DB").Range("A1").AutoFilter
  
End Sub

では、実行してみます。

離れたデータを抽出してみる

一部のデータを抽出してみます。

一部のデータを抽出してみます

「日付」と「売上」のみを抽出できます。

「日付」と「売上」のみを抽出できました

「日付」と「売上」のみを抽出できました。

おわりに

この記事では、日付でデータを抽出する方法について、ご紹介しました。

やり方としては、オートフィルタを使って日付でフィルタして、Copyでフィルタ結果をコピーするとできます。

データを抽出する際には、オートフィルタがかなり使えます。

データを抽出する方法について、マスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す