【VBA】データを抽出して別シートに転記する方法!実務で使える3つの応用例を紹介

【VBA】データを抽出して別シートに転記する方法!実務で使える3つの応用例を紹介

 

大量にあるデータから特定のデータを抽出し、別のシートに転記する

 

こんな処理を自動化するマクロの作り方をご紹介します。

 

『データ抽出VBA』を導入するメリットがこちら

  • 検索時の「検索漏れ」が0になる
  • データ抽出作業時の編集ミスが0になる
  • エクセルを操作する時間が半分以下になる

 

同じような作業を繰り返し処理している、大量のデータ編集を一つ一つ手作業で処理している、

こんな方は本記事の『データ抽出VBA』を参考に作業効率のアップを目指してみてください。

 

 

 

広告

VBAでデータ抽出・転記を行う基本的な考え方とメリット

VBAを使ったデータ処理は、Excel作業を劇的に効率化できる強力な武器です。

 

特にデータの抽出と転記は、

毎日の業務で頻繁に発生する作業であり自動化することで大幅な時間短縮が実現

できます。

 

手動で行っていた繰り返し作業を、わずか数秒で完了させることが可能に!!

 

この記事では、VBAによるデータ処理の基本概念と、なぜプロの現場で重宝されているのかを詳しく解説していきます。

 

データ抽出とは?転記との違いを理解する

データ抽出とは、

大量のデータの中から特定の条件に合うものだけを取り出す作業のこと

です。

 

一方、転記は抽出したデータを別の場所にコピーする作業を指します。

 

たとえるなら、

顧客リストから東京都在住の方だけを見つけ出すのが抽出で、その結果を新しいシートに貼り付けるのが転記

です。

 

『データ抽出VBA』を導入すれば、

この2つの処理を組み合わせて一度に実行できるため手作業では何時間もかかる作業を瞬時に完了

させることができます。

 

VBAを使用するメリットと手動作業との比較

VBAを活用する最大のメリットは、圧倒的な処理速度と正確性にあります。

 

手動でデータをコピー&ペーストしていると、どうしてもヒューマンエラーが発生しがちですが、VBAなら一度正しいコードを作成すれば何度実行しても同じ結果が得ることが可能です。

また、1万行のデータ処理も数秒で完了するため、残業時間の大幅削減にもつながります。

 

さらに、複雑な条件での抽出や、複数シートにまたがる処理も自動化できるため、これまで不可能だった高度な分析作業も実現可能になります。

 

実務でよく使われるデータ転記の場面

実際のビジネス現場では、売上データの集計、顧客情報の整理、在庫管理表の更新など、様々な場面でデータ転記が必要になります。

特に月次レポート作成時には、複数の部署から提出されたExcelファイルを統合する作業が発生し、これを手動で行うと丸一日かかることも珍しくありません。

 

また、営業チームが入力した案件データから、成約見込みの高い案件だけを抽出してマネージャーに報告する際にも、条件付きの転記処理が威力を発揮します。

 

これらの作業をVBAで自動化することで、担当者は創造的な業務に集中できるようになり、会社全体の生産性向上に大きく貢献できます。

 

【応用例1】条件に合致するデータのみを抽出して転記する方法

条件に基づいたデータ抽出は、

VBA活用の中でも最も実用性が高い技術の一つ

です。

 

膨大なデータベースから必要な情報だけを素早く取り出すことができれば、意思決定のスピードが格段に向上します。

 

ここでは、If文を使った基本的な条件分岐から、複数条件を組み合わせた高度な抽出まで、実践的なコード例とともに詳しく解説していきます。

初心者の方でも今日から使える実用的なテクニックを身につけて、業務効率化を実现しましょう。

 

If文を使った条件分岐によるデータフィルタリング

If文は条件に応じてデータを振り分ける最も基本的な手法です。

 

たとえば、

売上金額が10万円以上の取引だけを別シートに転記したい場合、以下のようなコードで実現できます。

Sub 条件抽出_基本()
Dim i As Long, j As Long
Dim lastRow As Long

lastRow = Worksheets("元データ").Cells(Rows.Count, 1).End(xlUp).Row
j = 2 '転記先の開始行

For i = 2 To lastRow
If Worksheets("元データ").Cells(i, 3).Value >= 100000 Then
Worksheets("抽出結果").Rows(j).Value = Worksheets("元データ").Rows(i).Value
j = j + 1
End If
Next i
End Sub

 

このコードは、

「元データ」シートにあるC列の金額をチェックして10万円以上の行のみを「抽出結果」シートに転記する

という意味です。

 

関連記事「For~Nextと関数IFの使い方」では、条件分岐を繰り返し処理する方法が紹介されています。

 

複数条件での抽出(AND・OR条件の組み合わせ)

実際の業務では、単一条件だけでなく複数の条件を組み合わせた抽出が必要になります。

AND条件では全ての条件を満たすデータを、OR条件ではいずれかの条件を満たすデータを抽出することが可能です。

Sub 複数条件抽出()
Dim i As Long, j As Long
Dim lastRow As Long

lastRow = Worksheets("売上データ").Cells(Rows.Count, 1).End(xlUp).Row
j = 2

For i = 2 To lastRow
'AND条件:東京かつ売上10万円以上
If Worksheets("売上データ").Cells(i, 2).Value = "東京" And _
Worksheets("売上データ").Cells(i, 4).Value >= 100000 Then
Worksheets("重要顧客").Rows(j).Value = Worksheets("売上データ").Rows(i).Value
j = j + 1
End If
Next i
End Sub

 

このコードは、

「売上データ」シートにあるB列が「東京」でD列の金額が「10万円以上」の行を「重要顧客」シートに転記する

という意味です。

 

このように複数条件を組み合わせることで、より精密なデータ分析が可能になり、ビジネスの意思決定に直結する情報を効率的に抽出できます。

 

実務例:売上データから特定期間・商品のみを抽出

実際の業務では、

特定期間の特定商品売上データの抽出作業

があります。

 

以下のコードは、2024年4月から6月の間に販売された「パソコン」関連商品のデータを抽出する例です。

Sub 期間商品抽出()
Dim i As Long, j As Long
Dim lastRow As Long, targetDate As Date

lastRow = Worksheets("全売上").Cells(Rows.Count, 1).End(xlUp).Row
j = 2

For i = 2 To lastRow
targetDate = Worksheets("全売上").Cells(i, 1).Value

If targetDate >= DateValue("2024/4/1") And targetDate <= DateValue("2024/6/30") And _
InStr(Worksheets("全売上").Cells(i, 3).Value, "パソコン") > 0 Then

Worksheets("Q2パソコン売上").Rows(j).Value = Worksheets("全売上").Rows(i).Value
j = j + 1
End If
Next i

MsgBox j - 2 & "件のデータを抽出しました"
End Sub

 

このような実務的なコードを書けるようになると、営業分析や在庫管理など、様々な業務シーンで即戦力として活躍できるようになります。

 

【応用例2】複数シートから一括でデータを収集・統合する方法

複数のシートに散らばったデータを一括で収集・統合する処理を自動化できればエクセル作業の効率を飛躍的にアップさせることができます。

 

手動で各シートを開いてコピー&ペーストを繰り返していては、膨大な時間がかかってしまいます。

しかし、

VBAを使えば数十枚のシートからでも、わずか数秒でデータ集約が可能です。

 

For Each文を活用した全自動処理から、条件に合うシートだけを選別する高度なテクニックまで、

よく応用される手法を詳しく解説していきます。

 

For Each文を使った全シート自動処理

For Each文を使うことで、ブック内の全てのシートを自動的に処理できます。

 

以下のコードは、全シートの同じ位置にあるデータを収集して統合シートに転記する例です。

Sub 全シート統合()
Dim ws As Worksheet
Dim summaryWs As Worksheet
Dim i As Long

Set summaryWs = Worksheets("統合結果")
i = 2 '統合シートの開始行

For Each ws In Worksheets
If ws.Name <> "統合結果" Then
summaryWs.Cells(i, 1).Value = ws.Name
summaryWs.Cells(i, 2).Value = ws.Cells(5, 2).Value '各シートのB5セル
summaryWs.Cells(i, 3).Value = ws.Cells(5, 3).Value '各シートのC5セル
i = i + 1
End If
Next ws
End Sub

 

このコードの素晴らしい点は、シートの枚数に関係なく自動的に処理が完了することです。

シートを追加したり削除したりしても柔軟な処理が可能

 

シート名の条件指定による対象シートの絞り込み

全てのシートではなく特定の条件に合うシートだけを処理するVBAコードをご紹介します。

たとえば、

「2024年」が含まれるシート名だけを対象とする場合処理を実行する、というコードのサンプルがこちら

Sub 条件付きシート統合()
Dim ws As Worksheet
Dim summaryWs As Worksheet
Dim i As Long

Set summaryWs = Worksheets("年次統合")
i = 2

For Each ws In Worksheets
If InStr(ws.Name, "2024年") > 0 Then
summaryWs.Cells(i, 1).Value = ws.Name
summaryWs.Cells(i, 2).Value = ws.Cells(10, 2).Value '売上合計
summaryWs.Cells(i, 3).Value = ws.Cells(11, 2).Value '利益合計
i = i + 1
End If
Next ws

MsgBox "2024年データを" & (i - 2) & "シート分統合しました"
End Sub

 

InStr関数を使ってシート名に特定の文字列が含まれているかをチェックし、条件に合うシートだけを処理しています。

 

関連記事「VBAで文字列を切り出しする方法」はInStr関数やLeft関数の使い方を詳しく紹介しています。

 

条件に合うテキストを検索する場合、InStr関数が必要になるので使い方をマスターしておきましょう。

 

実務例:月次データシートから年次レポートを自動作成

各月のデータシートから年次レポートを自動作成する処理を自動化するVBAコードをご紹介します。

 

以下のコードは、「1月」「2月」…「12月」という名前のシートから売上データを収集し、年次サマリーを作成する実用的な例です。

Sub 年次レポート自動作成()
Dim ws As Worksheet
Dim reportWs As Worksheet
Dim monthNames As Variant
Dim i As Long, j As Long
Dim totalSales As Double

Set reportWs = Worksheets("年次レポート")
monthNames = Array("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月")

'年次レポートのヘッダー設定
reportWs.Cells(1, 1).Value = "月"
reportWs.Cells(1, 2).Value = "売上高"
reportWs.Cells(1, 3).Value = "前年比"

For i = 0 To 11
Set ws = Worksheets(monthNames(i))
j = i + 2

reportWs.Cells(j, 1).Value = monthNames(i)
reportWs.Cells(j, 2).Value = ws.Cells(20, 3).Value '各月の売上合計
totalSales = totalSales + ws.Cells(20, 3).Value
Next i

reportWs.Cells(14, 1).Value = "年間合計"
reportWs.Cells(14, 2).Value = totalSales

MsgBox "年次レポートを作成しました。年間売上合計:" & Format(totalSales, "#,##0") & "円"
End Sub

 

配列を使って月別情報を変数MonthNamesに格納しています。

 

年間スケジュールや月間スケジュールを作成しデータ管理するような業務に有効です。

 

【応用例3】データの重複チェックを行いながら転記する方法

データの重複チェックは、データベース管理や顧客情報統合において極めて重要な技術です。

重複したデータが混入すると、

分析結果の精度が下がり、間違った経営判断につながる可能性

があります。

 

VBAを使えば、大量のデータから重複を確実に検出し、クリーンなデータベースを構築できます。

 

 

CountIf関数をVBAで活用した重複チェック

CountIf関数を使った重複チェックは、より直感的で理解しやすい手法です。

特に初心者の方にとっては、

論理的な流れが分かりやすくデバッグも容易に行える

という特徴があります。

 

以下のコードは、メールアドレスの重複をチェックしながら転記する例です。

Sub CountIfによる重複チェック()
Dim i As Long, j As Long
Dim lastRow As Long
Dim checkRange As Range
Dim email As String

lastRow = Worksheets("メール配信リスト").Cells(Rows.Count, 2).End(xlUp).Row
Set checkRange = Worksheets("メール配信リスト").Range("B2:B" & lastRow)
j = 2

For i = 2 To lastRow
email = Worksheets("メール配信リスト").Cells(i, 2).Value

If WorksheetFunction.CountIf(checkRange.Resize(i - 1), email) = 0 Then
Worksheets("配信対象").Cells(j, 1).Value = Worksheets("メール配信リスト").Cells(i, 1).Value
Worksheets("配信対象").Cells(j, 2).Value = email
j = j + 1
End If
Next i

MsgBox "重複メールアドレスを除去しました。配信対象:" & (j - 2) & "件"
End Sub

 

CountIf関数を使う利点は、部分的な範囲指定ができるため、メモリ使用量を抑えながら確実な重複チェックが行えることです。

 

実務例:顧客リストの統合時の重複除去処理

複数の部署から提出された顧客リストを統合する際、必ず重複除去処理が必要になります。

 

以下のコードは、複数の条件(顧客コード、電話番号、メールアドレス)を組み合わせた高度な重複チェックの例です。

Sub 高度な重複除去統合()
Dim dict As Object
Dim i As Long, j As Long
Dim lastRow As Long
Dim uniqueKey As String
Dim ws As Worksheet

Set dict = CreateObject("Scripting.Dictionary")
Set ws = Worksheets("統合顧客リスト")
j = 2

'複数シートから統合処理
For Each ws In Worksheets
If Left(ws.Name, 2) = "支店" Then
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To lastRow
'複合キーの作成(顧客コード + 電話番号)
uniqueKey = ws.Cells(i, 1).Value & "_" & ws.Cells(i, 4).Value

If Not dict.Exists(uniqueKey) And ws.Cells(i, 1).Value <> "" Then
dict.Add uniqueKey, True
Worksheets("統合顧客リスト").Cells(j, 1).Value = ws.Cells(i, 1).Value '顧客コード
Worksheets("統合顧客リスト").Cells(j, 2).Value = ws.Cells(i, 2).Value '顧客名
Worksheets("統合顧客リスト").Cells(j, 3).Value = ws.Cells(i, 3).Value '住所
Worksheets("統合顧客リスト").Cells(j, 4).Value = ws.Cells(i, 4).Value '電話番号
Worksheets("統合顧客リスト").Cells(j, 5).Value = ws.Name '登録元支店
j = j + 1
End If
Next i
End If
Next ws

MsgBox "統合処理完了。重複除去後の顧客数:" & (j - 2) & "件"
End Sub

 

このような実践的なコードを書けるようになると、CRM システムの導入やデータマイグレーション プロジェクトで中心的な役割を担えるようになります。

 

VBAでエクセル業務の効率化を実現

VBAを活用することで、エクセルでの日常業務を劇的に効率化できます。

VBAを使えば、

繰り返し作業の自動化によって人的ミスを削減し、作業時間を大幅に短縮する

ことが可能です。

 

毎日行っているデータ集計やレポート作成を自動化すれば、数時間かかっていた作業がボタン一つで数分で完了します。

エクセル作業が多い環境ではVBAの導入は必須事項である!といっても過言ではありません。

 

マクロを導入するメリット

マクロを導入する最大のメリットは、作業時間の短縮と品質の向上を同時に実現できることです。

人間が時間をかけて行う単純作業をコンピュータが正確かつ高速に処理することができます。

 

たとえば、手作業で1時間かかっていたデータ整理が、マクロなら数秒で完了し、さらに計算ミスや入力間違いも完全に防げます。

また、一度作成したマクロは何度でも使い回せるため、長期的な業務効率化投資としても非常に価値があります。

 

結果として、マクロ導入は時間コストの削減と業務品質の向上という二重のメリットをもたらします。

 

VBA学習の始め方

VBA学習の最も効果的な始め方は、実際の業務課題から出発することです。

目的が明確な学習は記憶定着率が高く、モチベーションも維持しやすいのは間違いありません。

 

たとえば、毎週行っているデータ集計作業を自動化することを目標に設定し、必要な機能から順番に覚えていけば実践的なスキルがすぐに身につきます。

 

基本的な変数の使い方から始まり、ループ処理、条件分岐、配列など、段階的にレベルアップしていくことで、確実にVBAをマスターできます。

 

関連記事「VBA初心者必見!マクロの作り方」では、コードを書く画面の開き方や書いたコードの実行方法が図やサンプルコードを使って紹介されています。

 

マクロの開発を外注依頼する

業務内容に合わせた効率化マクロを導入したいけど、VBAコードを開発する時間がない。。。どうやってプログラムを組めばいいかわからない。。。

 

このような方は、マクロ開発を外注に依頼しちゃいましょう。

 

外注依頼することで本業に集中しながら高品質なマクロを即座に導入することができます。

 

ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。

開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、

費用が安い!スピード納期!!

でやらせてもらっています。

 

ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。

 

ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。

 

 

 

効率化マクロを導入してエクセル業務の効率をアップさせましょう。