大体でIT

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

大体でIT

Excel VBAを使って、社員名簿から名前で検索して、データを抽出するには、「.AutoFilter」と「.Copy」を使うとできます。実務ではデータベースからデータを抽出したいという場面が、結構あるかと思います。データを抽出する方法について、マスターしていきましょう。

はじめに

この記事では、社員名簿から「氏名」で検索してデータを抽出する方法について、ご紹介します。

手順としては、オートフィルタを使って「氏名」でフィルタして、「Copy」を使ってデータを転記するとできます。

実務では、特定データでデータを抽出したいといった場面があります。

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

では、社員名簿から「氏名」でデータを抽出する方法について、マスターしていきましょう。

この記事を読むメリット

  • 社員名簿から「氏名」で検索して、データを抽出する方法がわかります。

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

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

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

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

目次

名前で検索して抽出

やりたい内容は、社員名簿から名前で検索して、データを抽出したいということになります。

やりたい内容

社員名簿から「氏名」で検索してデータを抽出する方法について、解説していきます。

「氏名」で検索してデータを抽出したい

「氏名」で検索して、データを抽出したいです。

「氏名」で検索して、データを抽出したいです

氏名を入力してみます。

氏名を入力してみます

VBAコードを実行すると、「氏名」でデータを抽出できます。

「氏名」でデータを抽出する

「氏名」でデータを抽出できました

「氏名」でデータを抽出できました。

では、社員名簿から「氏名」でデータを抽出する方法について、解説していきます。

VBAコードを作成

社員名簿から「氏名」でデータを抽出するVBAコードを、段階的に作成していきます。

AutoFilterとCopyを使う

データを抽出したい場合は、「.AutoFilter」と「.Copy」を使うとできます。

名前でデータを抽出するVBAコードになります。

Sub TEST()
  
  'シートをクリア
  Sheets("検索").Range("A4:H1000").Clear
  'フィルタする
  Sheets("DB").Range("A1").AutoFilter 2, "*" & Sheets("検索").Range("B2") & "*"
  'フィルタ結果をコピー
  Sheets("DB").Range("A1").CurrentRegion.Copy Sheets("検索").Range("A4")
  'フィルタを解除
  Sheets("DB").Range("A1").AutoFilter
  
End Sub

「氏名」を入力します。

「氏名」を入力

「氏名」を入力します

実行すると、「氏名」でデータを抽出できます。

「氏名」でデータを抽出できた

「氏名」でデータを抽出できました

「氏名」でデータを抽出できました。

データ部分のみを抽出

次は、データ部分のみを抽出してみます。

フィルタ結果のデータ部分のみを取得するVBAコードは、次のようになります。

Sub TEST()
  
  'シートをクリア
  Sheets("検索").Range("A5:H1000").Clear
  'フィルタする
  Sheets("DB").Range("A1").AutoFilter 2, "*" & Sheets("検索").Range("B2") & "*"
  'フィルタ結果のデータ部分のみをコピー
  With Sheets("DB").Range("A1").CurrentRegion
    .Resize(.Rows.Count - 1).Offset(1, 0).Copy Sheets("検索").Range("A5")
  End With
  'フィルタを解除
  Sheets("DB").Range("A1").AutoFilter
  
End Sub

では、実行してみます。

データ部分のみを抽出する

「氏名」を入力します。

「氏名」を入力します

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

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

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

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

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

確認のために、見出しを変更してデータを抽出してみます。

確認のために、見出しを変更してデータを抽出してみます

見出しはそのままで、データを抽出できます。

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

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

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

フィルタ結果がない場合に、データ部分のみを取得すると、データ全体を取得しちゃいます。

なので、フィルタ結果がある場合にのみデータをコピーするといいです。

フィルタ結果がない場合でやってみます。

データベースにない値で検索してみる

データベースにない値で、検索してみます。

データベースにない値で、検索してみます

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

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

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

フィルタ結果がある場合にのみ。データを抽出するようにします。

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

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

Sub TEST()
  
  'シートをクリア
  Sheets("検索").Range("A5:H1000").Clear
  'フィルタする
  Sheets("DB").Range("A1").AutoFilter 2, "*" & Sheets("検索").Range("B2") & "*"
  'フィルタ結果がある場合
  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("A5")
    End With
  End If
  'フィルタを解除
  Sheets("DB").Range("A1").AutoFilter
  
End Sub

フィルタ結果がない場合は、データをそのままにできます。

フィルタ結果がない場合は、データをそのままにできました

フィルタ結果がない場合は、データをそのままにできました。

空白時は処理を終了

検索するデータが空欄の場合も、すべてのデータを抽出してしまいます。

なので、検索値が空欄の場合は、処理を終了するといいです。

空白の場合で、やってみます。

空白で検索してみる

空白で検索してみます。

空白で検索してみます

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

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

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

検索値が空白の場合は、処理を終了するVBAコードを追加します。

空白の場合は処理を終了する

空白の場合は、処理を終了するVBAコードです。

Sub TEST()
  
  'シートをクリア
  Sheets("検索").Range("A5:H1000").Clear
  '空欄の場合は、処理を終了
  If Sheets("検索").Range("B2") = "" Then Exit Sub
  'フィルタする
  Sheets("DB").Range("A1").AutoFilter 2, "*" & Sheets("検索").Range("B2") & "*"
  'フィルタ結果がある場合
  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("A5")
    End With
  End If
  'フィルタを解除
  Sheets("DB").Range("A1").AutoFilter
  
End Sub

空白の場合は、処理を終了できます。

空白の場合は、処理を終了できました

空白の場合は、処理を終了できました。

Changeイベントを使う

検索値を入力したタイミングで、データを抽出できると便利です。

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

Private Sub Worksheet_Change(ByVal Target As Range)
  
  'B2セル以外が変更された場合は、終了
  If Intersect(Target, Range("B2")) Is Nothing Then Exit Sub
  
  'データを抽出する
  Call TEST
  
End Sub

氏名を入力してみます。

氏名を入力

氏名を入力してみます

氏名を入力したタイミングで、データを抽出できます。

入力したタイミングで、抽出できた

氏名を入力したタイミングで、データを抽出できました

氏名を入力したタイミングで、データを抽出できました。

おわりに

この記事では、社員名簿から「氏名」で検索してデータを抽出する方法について、ご紹介しました。

手順としては、オートフィルタを使って「氏名」でフィルタして、「Copy」を使ってデータを転記するとできます。

実務では、特定データでデータを抽出したいといった場面があります。

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

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

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す