すべて表示する
マクロとは?VBAとは?
「マクロ」とは、ソフトウェアを自動で操作する機能のことです。自動化を実行する命令文自体を「マクロ」と呼ぶこともあります。「VBA」とは、自動化を実行するプログラミング言語「 Visual Basic for Application」を指します。マクロ、VBAという言葉は似た文脈で出てくるため混同することも多いですが、マクロは自動化の機能や命令文のことで、VBAはマクロに使うプログラミング言語だと覚えておきましょう。
マクロでできること
Excelのマクロでできることは、データの入力や転記、操作の自動化をはじめ、マイクロソフト社が提供するメールツール、Outlookとの連携など、多くの操作を実行できます。
Excelのマクロでできること |
出典:『Excel VBA塾』(マイナビ出版) |
Office スクリプトとの違い
プログラミング言語を使ったExcelの自動化については、「Office スクリプト」も存在します。「Office スクリプト」とは、Web版のExcelなどのために作られた自動化の命令文です。言語はVBAでなく、JavaScriptのスーパーセット(上位互換)である TypeScriptを使用しているのが特徴です。このOffice スクリプトは、Excelの[自動化]タブから設定します。本レッスンは、古いバージョンのExcelでも使えるVBAを使ったマクロについて解説するため詳細は触れませんが、オンラインでExcelを使うことが主流になるにつれてOfficeスクリプトもさらに使われるようになるでしょう。
「基本的な違いは、VBA マクロはデスクトップ ソリューション用に開発され、Office スクリプトはセキュリティで保護されたクロスプラットフォームのクラウドベースのソリューション用に設計されていることです」出典:マイクロソフト社
Power Queryとの違い
Power Query は、Excel2016から登場した比較的新しい機能です。複数のExcelファイルや、CSVなどとのデータの接続、統合などを行うことができます。一度設定すれば、データ元が変更された場合にも更新する機能がある「自動化」の文脈で語られることがあり、マクロで実行していた操作もPower Queryで簡単に実装できる場合があります。Power Queryの詳細は、次のレッスンで解説します。
重複チェックのマクロを作ってみよう
これまでのレッスンで使ってきた「顧客管理・商談管理テンプレート」を使って、「見込み客・取引先マスタ」シートに重複がないかチェックするマクロをつくってみましょう。「見込み客・取引先マスタ」は顧客情報の基となるデータベースですので、重複が無いように登録していく必要がありますが、営業担当者全員が登録のたびに重複チェック作業をするの一定の時間がかかりますし、作業を忘れる可能性があります。そのため、重複チェックを自動化するマクロを用意して、営業担当者はボタンを押すだけでチェックが終わるようにするのが狙いです。
下記が完成後のExcelです。
まず、「重複チェック」というボタンを押すと、会社名、窓口、メール、電話番号の列に同じ値が入っていたらセルが赤くなります。次に「重複チェック解除」というボタンを押すと、赤くなっていたセルが元に戻ります。2つのボタンそれぞれにマクロが割り当てられています。

重複チェックのVBAを登録しよう
マクロの設定は[開発]タブで行います。初期設定では[開発]タブは表示されていませんので、[ファイル]> [オプション]>[リボンのユーザー設定]で、[リボンのユーザー設定] および [メイン タブ] の下の [開発] チェック ボックスをオンにして表示させます。

[Visual Basic]をクリックすると、下記のようなウインドウが立ち上がります。このウインドウがVBAを書き込む場所です。左上のプロジェクトウインドウで右クリックし、[挿入]>[標準モジュール]を押下します。これは、今開いていたExcelについて、[モジュール]というVBAの記録場所を作る作業です。


右に表示された白紙のウインドウに下記の2つのVBAを連続して貼り付けてください。これは、[Module1]というVBAの記録場所に「重複チェック」と「重複チェック解除」という2つの命令文を登録する作業です。
Sub 重複チェック() ' ' 重複チェック Macro ' ' Range("E:E,F:F,I:I,J:J").Select Selection.FormatConditions.AddUniqueValues Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority Selection.FormatConditions(1).DupeUnique = xlDuplicate With Selection.FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13551615 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub
Sub 重複チェック解除() ' 重複チェック解除 Macro ' ' Range("E:E,F:F,I:I,J:J").Select Selection.FormatConditions.Delete End Sub
VBAを2つ記録すると、End Subの次の行に、プログラムの記述が終わったことを示す区切り線がで自動で入ります。これで自動化のマクロを2つ作ることができました。

VBAは、1行目がプロシージャ名、いわゆるマクロ名(例: Sub 重複チェック解除())、最終行がマクロの終了(End Sub)と決まっています。その間の黒文字がそれぞれ処理を示すコード、という構成です。ちなみに行の先頭に「'」のある行はメモで、コードではありませんが自身でわかりやすくするために記入します。
今回のマクロに使われているコードの説明を下記に記しますが、厳密に理解する、というよりも、マクロはExcelの操作の流れを分解して、それぞれコードで表現する必要がある、という構造を理解しましょう。構造を理解して、自動化したい具体的な操作をVBAでどう書くか調べることができる、というイメージをつかみましょう。
マクロ | 説明 |
重複チェック | ![]() |
Range("E:E,F:F,I:I,J:J").Select: E列、F列、I列、およびJ列を選択します。これは重複をチェックする範囲を指定しています。 Selection.FormatConditions.AddUniqueValues: 選択範囲に一意の値を強調表示する条件付き書式を追加します。つまり、同じ値が複数回現れる場合、そのセルを強調表示します。 Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority: 追加した条件付き書式を優先条件として設定します。これにより、複数の条件がある場合でも最初に評価される条件となります。 Selection.FormatConditions(1).DupeUnique = xlDuplicate: 一意でない(重複した)値がある場合に、指定された書式を適用します。xlDuplicateはExcelの定数で、重複した値に対する条件を指定します。 With Selection.FormatConditions(1).Font から End With: 重複が見つかった場合のフォントの書式を設定します。 - Color = -16383844: フォントの色を指定。 - TintAndShade = 0: 色調の濃さを0に設定。 With Selection.FormatConditions(1).Interior から End With: 重複が見つかった場合のセルの背景色の書式を設定します。 - PatternColorIndex = xlAutomatic: 背景色のパターンの色を自動に設定。 - Color = 13551615: 背景色を指定。 - TintAndShade = 0: 色調の濃さを0に設定。 Selection.FormatConditions(1).StopIfTrue = False: 条件が満たされても次の条件を評価するように設定します。 このマクロは、範囲内で列E、F、I、Jにおける値の重複を検出し、それを特定の書式で強調表示します。 | |
重複チェック解除 | ![]() |
Range("E:E,F:F,I:I,J:J").Select: E列、F列、I列、およびJ列を選択します。これは重複チェックを解除する範囲を指定しています。 Selection.FormatConditions.Delete: 選択範囲に設定されている条件書式(ここでは重複チェック)を削除します。 このマクロは、指定された範囲で設定されている条件書式(重複チェック)を解除します。 |
マクロを実行するボタンを設置しよう
マクロを登録したら、それを実行するボタンをExcelのシート常に設置しましょう。[開発]タブのボタンを押下し、シートの任意の場所に「重複チェック」「重複チェック解除」というボタンをつくります。

設置したボタンを右クリックして[マクロの登録]ウインドウを立ち上げ、「重複チェック」のボタンには「重複チェック」のマクロを選択して[OK]を押します。「重複チェック解除」のボタンには「重複チェック解除」のマクロを選択して[OK]を押します。これで作成した2つのマクロがボタンと関連付けられ、それぞれのボタンを押すたびにそれぞれのマクロが実行されるようになりました。

「マクロの記録」を使ってみよう
Excelは、上記のようにVBAをゼロから書くこともできる一方で、自分の操作を自動的にVBAに書き出してくれる「マクロの記録」という機能があります。例えば、列の重複チェックのような決まりきった操作の場合(指定する列や変更する色が毎回完全に同じ、など)は、VBAにしたい操作をこの「マクロの記録」で記録し、実装する、という方法を取ることができます。

マクロの記録」を使う場合の注意点は、全てが記録される、という点です。例えば、自動化したい操作を始める前にH1セルを選択していた場合、H1セルを選択する、という操作もVBAに記録されます。不要な操作でコードを長くしてしまう原因になるので注意しましょう。
マクロ・VBAの注意点
Excelの自動化に活躍するマクロですが、VBAというプログラミング言語を誰もが理解し、修正できるわけではありません。現実には「情報システム部のXXさんがExcelが得意」というような状況ではないでしょうか?こうなると、共有のExcelファイルを加工してマクロが動かなったときに、特定の人に頼るしか無い状況に陥ってしまいます。
VBAにしても、Officeスクリプトにしても、共有のExcelファイルで導入する際は、職場の複数人が対応できる状況が望ましいでしょう。
Excelマクロでできること一覧【営業現場のシーン別】
本記事前半の「マクロでできること」では機能を一覧で紹介しましたが、ここでは営業現場の具体的なシーンに紐づけて、「どんな作業をマクロで自動化できるのか」を整理します。
No. | 営業シーン | 自動化できること | VBAの概要 |
1 | 顧客データ管理 | 顧客リストの重複チェック+ハイライト | 条件付き書式を一括適用。本記事の前半で詳しく解説。 |
2 | 日報・週報作成 | 商談データから日報テンプレートに自動転記 | 商談管理シートから当日分を抽出し、別シートに貼り付け。 |
3 | 月末レポート | 売上集計+グラフ生成+PDF保存を一括実行 | ピボット集計→グラフ挿入→ExportAsFixedFormatでPDF化。 |
4 | メール送信 | Outlookと連携して顧客に一斉メール送信 | Outlook.Application経由でメール作成+送信。宛先リストはExcelから取得。 |
5 | 見積書作成 | 商談情報から見積書テンプレートに自動入力+PDF出力 | テンプレートシートのセルに値を代入→PDF保存→次の見積書へループ。 |
6 | データクリーンアップ | 空白行の削除、全角半角統一、電話番号フォーマット揃え | For Eachループで各セルを走査し、置換ルールを適用。 |
7 | シート一括処理 | 担当者別シートを一括で作成・集計・統合 | Sheets.Addで新規シート作成、Copyで構造コピー、SUMで合計。 |
8 | ファイル一括処理 | フォルダ内の全Excelファイルから特定データを収集 | Dir関数でフォルダ走査→各ブックを開いて値を転記→閉じる。 |
上記の8つのうち、1(重複チェック)は本記事の前半で実装済みです。次のセクションでは、2(日報自動転記)と3(月末レポート自動生成)のVBAコード例を紹介します。
営業で使えるマクロ例3選【VBAコード付き】
本記事の前半で紹介した「重複チェック」に加えて、営業現場で特に需要の高いマクロを2つ、VBAコード付きで紹介します。コピー&ペーストでそのまま使えるように設計していますが、シート名や列番号は自社のファイル構造に合わせて変更してください。

マクロ例1:商談データから日報シートに自動転記
商談管理シートから当日更新された商談を抽出し、日報シートに自動で転記するマクロです。毎日の日報作成にかかる10〜15分の手作業を削減できます。
処理の流れ:
- 商談管理シートの「更新日」列(G列)が今日の日付と一致する行を検索
- 一致した行の「商談名」「顧客名」「ステータス」を取得
- 日報シートの空き行に転記
VBAコード:
Sub 日報自動転記() Dim ws商談 As Worksheet, ws日報 As Worksheet Dim lastRow As Long, outRow As Long, i As Long, cnt As Long Set ws商談 = Sheets("商談管理") Set ws日報 = Sheets("日報") lastRow = ws商談.Cells(ws商談.Rows.Count, "B").End(xlUp).Row outRow = ws日報.Cells(ws日報.Rows.Count, "B").End(xlUp).Row + 1 For i = 5 To lastRow If ws商談.Cells(i, 7).Value = Date Then ws日報.Cells(outRow, 2).Value = ws商談.Cells(i, 2).Value '商談名 ws日報.Cells(outRow, 3).Value = ws商談.Cells(i, 5).Value '顧客名 ws日報.Cells(outRow, 4).Value = ws商談.Cells(i, 9).Value 'ステータス outRow = outRow + 1 cnt = cnt + 1 End If Next i MsgBox "日報への転記が完了しました。" & cnt & "件" End Sub
このマクロを「顧客管理・商談管理テンプレート」に追加し、ボタンに割り当てれば、毎日ボタンを押すだけで日報の下書きが完成します。

マクロ例2:月末の売上集計レポートを自動生成
月末になるたびに、商談管理シートからステータスが「受注」のデータを集計し、担当者別の売上一覧表を自動で作成するマクロです。
処理の流れ:
- 商談管理シートの「ステータス」列が「受注」の行だけを抽出
- 担当者ごとに売上金額を合計(Dictionary オブジェクトを使用)
- 集計結果を「月次レポート」シートに出力
VBAコード:
Sub 月末売上集計() Dim ws As Worksheet, wsOut As Worksheet Dim lastRow As Long, i As Long, outRow As Long Dim dict As Object Dim rep As String, amt As Double Set dict = CreateObject("Scripting.Dictionary") Set ws = Sheets("商談管理") Set wsOut = Sheets("月次レポート") lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row '受注データを担当者別に集計 For i = 5 To lastRow If ws.Cells(i, 9).Value = "受注" Then '9列目=ステータス rep = ws.Cells(i, 3).Value '3列目=担当者 amt = ws.Cells(i, 18).Value '18列目=売上金額 If dict.Exists(rep) Then dict(rep) = dict(rep) + amt Else dict.Add rep, amt End If End If Next i '集計結果を出力 wsOut.Range("B5:C100").ClearContents outRow = 5 Dim key As Variant For Each key In dict.Keys wsOut.Cells(outRow, 2).Value = key wsOut.Cells(outRow, 3).Value = dict(key) outRow = outRow + 1 Next key MsgBox "月末売上集計が完了しました。" & dict.Count & "名分" End Sub
このマクロは「顧客管理・商談管理テンプレート」の商談管理シートをそのまま参照しています。列番号(9列目=ステータス、3列目=担当者、18列目=売上金額)は自社のシート構造に合わせて変更してください。
マクロ例3:顧客データの重複チェック(前半で解説済み)
3つ目のマクロ例は、本記事の前半で詳しく解説した「重複チェック」です。ボタンを押すと、会社名・窓口・メール・電話番号の列に同じ値が入っているセルが赤くハイライトされます。VBAコードと設定手順は前半のセクションをご参照ください。
この3つのマクロをテンプレートに組み込めば、日次の日報作成、月次のレポート生成、随時の重複チェックという営業の主要な定型作業をボタン1つで自動化できます。
VBA・Power Query・Office Scriptsの比較
Excelの自動化には、VBA(マクロ)以外にもPower QueryとOffice Scriptsという選択肢があります。本記事の前半では文章で違いを説明しましたが、ここではテーブル形式で比較し、どの場面でどのツールを選ぶべきかを明確にします。
比較項目 | VBA(マクロ) | Power Query | Office Scripts |
できること | Excelのほぼすべての操作を自動化。メール送信、ファイル操作、UI作成も可能。 | データの取得・変換・結合に特化。元データを壊さずに加工できる。 | Web版Excelの自動化。Power Automateと連携してクラウドワークフローを構築。 |
プログラミング言語 | VBA(Visual Basic for Applications) | M言語(ただしGUI操作のみでも使用可能) | TypeScript(JavaScriptの上位互換) |
対応バージョン | Excel 97以降(デスクトップ版のみ) | Excel 2016以降 | Microsoft 365(Web版Excel) |
学習コスト | 中〜高(コードを書く必要あり) | 低〜中(GUIで操作可能) | 中〜高(TypeScript + Power Automate) |
得意なシーン | 繰り返し操作の自動化、UI付きツール作成、外部アプリ連携 | 複数ファイル統合、データクレンジング、定期更新レポート | クラウド環境での自動化、チーム共有、スケジュール実行 |
苦手なシーン | Web版Excelでは動作しない。大量データのETL処理はPower Queryに劣る。 | Excelの操作自動化(セル選択、書式変更等)はできない。メール送信不可。 | デスクトップ版Excelでは動作しない。複雑なUI作成は困難。 |
営業での推奨度 | ★★★ 定型作業の自動化に最適。テンプレートと組み合わせると強力。 | ★★★ 複数データソースの統合に最適。本シリーズLesson6で解説。 | ★★ クラウド運用が中心の場合に検討。まだ発展途上。 |
使い分けの指針:
- 「ボタンを押して定型作業を一発実行したい」→ VBA(マクロ)
- 「複数のExcelやCSVを統合して分析したい」→ Power Query
- 「Web版Excelで自動化し、チームで共有したい」→ Office Scripts
- 「上記すべてを組み合わせたい」→ CRMツールの導入を検討
多くの営業チームでは、まずVBA(マクロ)で日々の定型作業を自動化し、データ統合が必要になったらPower Queryを追加する、という段階的なアプローチが現実的です。
このセクションのまとめ
Excelマクロ(VBA)は、営業現場の繰り返し作業を自動化する最も手軽な方法です。本記事で紹介した重複チェック・日報自動転記・月末売上集計の3つのマクロを組み込めば、日常業務の効率が大幅に向上します。
このセクションのポイント:
- マクロ=自動化の機能、VBA=マクロに使うプログラミング言語
- 営業現場では顧客データ管理・日報作成・月末レポート・メール送信などを自動化できる
- VBAコードはコピー&ペーストで登録でき、ボタンに割り当てればワンクリックで実行
- 複数データの統合にはPower Query、クラウド環境にはOffice Scriptsが適している
- まずはテンプレートの重複チェックマクロから始め、慣れたら日報・レポート自動化に挑戦


