【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』を導入したい!
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、
今では自分で効率化マクロをサクッと導入しちゃいます。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。
いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。
あなたに合った方法で導入しちゃいましょう。
マクロ開発を外注に依頼する
マクロ開発を外注に依頼する方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんなデータ抽出作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、
すぐに使っているエクセルにマクロを導入することができます。
VBA初心者でも形になっているマクロをゲットできる、費用が安い、
というメリットがあります。
しかし、
想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい内容のコードを書くだけ
です。
【VBA データ抽出】【VBA データ転記】でネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。
ディスカッション
コメント一覧
まだ、コメントがありません