- 公開日:
エクセルのマクロ活用事例を紹介
この記事では、エクセルでのマクロ活用事例をご紹介します。
マクロを使って自動化することで作業効率を向上したり、便利な機能を活用して日常業務を効率化したりできます。
データの集計方法や取引先ごとの請求書などを作成する方法、エクセルを開く度にバックアップファイルを作成する方法などをご紹介します。
Excelを使った日付選択のマクロを無料でダウンロード!
Excelでカレンダーから日付を入力できるマクロを無料でダウンロードできます。コードを変更すれば、カレンダーの背景色や、今日の日付の色を変更したりとカスタマイズすることも可能です。
エクセルのマクロ活用事例を紹介
エクセルでマクロを活用する例をご紹介します。
マクロの設定は「開発タブ」から行います。
開発タブはデフォルトでは表示されていないので、以下の記事を参考に表示させましょう。
データの集計などで活用する
マクロを設定して、集計などで活用する方法をご紹介します。
データの集計を行う
データの集計を行って、別シートにレポートを作成するマクロをご紹介します。
具体的には、「データ」シートに入力した売上を「月次売上報告レポート」に商品ごとの売上として集計し、「金額」「個数」の合計を出します。
商品ごとのデータをまとめるのに役立つマクロです。
方法の詳細は以下のとおりです。
まずは、データを入力するシートを作成します。
①新規シートを作成して、「データ」とシート名を入力します。
②A1セルから「日付」「商品名」「売上金額」「個数」の項目とデータを入力します。
次に、レポートを出力するシートを作成しておきます。
新規シートを作成して、「月次売上報告レポート」というシート名を入力しておきます。
次にマクロを設定します。
①「開発」タブ、②「Visual Basic」の順に選択します。
「Microsoft Visual Basic for Applications」というVBAの編集画面が表示されます。
①「新しい標準モジュール」、②「標準モジュール」の順に選択します。
以下のコードをコピーして貼り付けます。
以下は「データシートに入力した売上を、月次売上報告レポートに商品ごとの売上としてまとめる」という意味のコードです。
複雑なコードなので一旦そのまま貼り付けて、試してみてください。
上記の画像の緑色の文字は、各コードが何の動作を指定しているかを説明しているコメントです。コピー用のコードではコメントを省いています。
Sub 月次売上報告()
Dim wsData As Worksheet
Dim wsReport As Worksheet
Dim lastRow As Long
Dim reportRow As Long
Dim productName As String
Dim salesAmount As Double
Dim quantity As Long
Dim found As Boolean
Set wsData = ThisWorkbook.Sheets("データ")
Set wsReport = ThisWorkbook.Sheets("月次売上報告レポート")
wsReport.Range("A1").Value = "月次売上レポート"
wsReport.Range("B1").Value = Format(Date, "yyyy年mm月dd日")
wsReport.Range("A3:C3").Value = Array("商品名", "売上合計", "売上個数")
lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
reportRow = 4
For i = 2 To lastRow
productName = wsData.Cells(i, 2).Value
salesAmount = wsData.Cells(i, 3).Value
quantity = wsData.Cells(i, 4).Value
found = False
For j = 4 To reportRow - 1
If wsReport.Cells(j, 1).Value = productName Then
wsReport.Cells(j, 2).Value = wsReport.Cells(j, 2).Value + salesAmount
wsReport.Cells(j, 3).Value = wsReport.Cells(j, 3).Value + quantity
found = True
Exit For
End If
Next j
If Not found Then
wsReport.Cells(reportRow, 1).Value = productName
wsReport.Cells(reportRow, 2).Value = salesAmount
wsReport.Cells(reportRow, 3).Value = quantity
reportRow = reportRow + 1
End If
Next i
wsReport.Columns("A:C").AutoFit
MsgBox "月次売上報告が作成されました。"
End Sub
コードを貼り付けたら、「保存」を選択します。
「名前を付けて保存」ダイアログボックスが表示されます。
①任意の保存場所(例:デスクトップ)を選択します。
②ファイルの種類で「Excel マクロ有効ブック」を選択し、③「保存」ボタンを押します。
マクロが作成できました。次にマクロボタンを作成します。
①「開発」タブを選択します。
②「挿入」、③フォームコントロールの「ボタン(フォーム コントロール)」の順に選択します。
マウスポインターが十字マークになったら、任意の位置でドラッグしてボタンを描画します。
描画が終わると、「マクロの登録」ダイアログボックスが自動的に表示されます。
①作成したマクロ(例:月次売上報告)を選択し、②「OK」ボタンを押します。
マクロボタンが作成できました。
ボタンの名前を変更する場合は、①マクロボタンを右クリックして、②「テキストの編集」を選択します。
任意の名前(例:月次報告レポート)を入力します。
ボタンの作成が終わったら、「月次報告レポート」ボタンを押します。
「月次売上報告が作成されました。」というメッセージが表示されたら、「OK」ボタンを押します。
「月次売上報告レポート」シートを確認すると、商品名ごとに全体の売上合計と売上個数が計算されていることが確認できます。
マクロで在庫管理を簡単にする
マクロを使って在庫管理の手順を自動化できます。
例えば、上記の画像は在庫管理表とマクロを組み合わせて、入出庫の履歴を記録できるようにした例です。
在庫管理をマクロを使って簡単にする方法については、以下の記事でご紹介しています。
在庫の検索等ができるマクロについてもご紹介しています。
請求書を作成
以下ではマクロを設定して、「取引データ一覧」から同じ会社との取引分をまとめて「請求書」を作成する方法をご紹介します。
請求書をA4のPDFとして保存することも、マクロによって自動化できます。
まずはシートを作成します。
①新規シートを作って「請求書テンプレート」というシート名を入力します。
②上記の画像のような請求書テンプレートを作成しておきます。
どんなレイアウトの請求書でも構いませんが、後ほどマクロの設定で利用するため以下の項目のセル番地をメモしておきましょう。
- 取引先名
- 請求先(住所)
- 商品名
- 金額
次に取引データを入力するシートを作成します。
①「取引データ一覧」というシート名を入力します。
②上記のようにA1セルから「ID(請求書番号)」「取引先名」「住所」「商品名」「請求額」「請求日」の項目とデータを入力しておきます。
先ほどメモした「請求書テンプレート」シートの「取引先名」などの項目に、「取引データ一覧」の同じ項目のデータが表示されます。
次にマクロを設定します。
①「開発」タブ、②「Visual Basic」の順に選択します。
「Microsoft Visual Basic for Applications」というVBAの編集画面が表示されます。
①「新しい標準モジュール」、②「標準モジュール」の順に選択します。
以下のコードをコピーして貼り付けます。
以下は「取引データ一覧シートの情報をもとに取引先ごとの請求書を作り、PDFとしてデスクトップに保存する」という意味のコードです。
Sub 請求書作成マクロ()
Dim wsData As Worksheet
Dim wsTemplate As Worksheet
Dim lastRow As Long
Dim i As Long
Dim clientName As String
Dim clientAddress As String
Dim productName As String
Dim invoiceAmount As Double
Dim rowCounter As Integer
Dim invoiceSheet As Worksheet
Dim invoiceFileName As String
Dim desktopPath As String
Set wsData = ThisWorkbook.Sheets("取引データ一覧")
Set wsTemplate = ThisWorkbook.Sheets("請求書テンプレート")
desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
If wsData.Cells(i, 2).Value <> clientName Then
clientName = wsData.Cells(i, 2).Value
clientAddress = wsData.Cells(i, 3).Value
Set invoiceSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
invoiceSheet.Name = clientName & "_請求書"
wsTemplate.Cells.Copy Destination:=invoiceSheet.Cells
invoiceSheet.Range("D4").Value = clientName
invoiceSheet.Range("D6").Value = clientAddress
rowCounter = 11
End If
productName = wsData.Cells(i, 4).Value
invoiceAmount = wsData.Cells(i, 5).Value
invoiceSheet.Cells(rowCounter, 2).Value = productName
invoiceSheet.Cells(rowCounter, 4).Value = invoiceAmount
rowCounter = rowCounter + 1
Next i
For Each invoiceSheet In ThisWorkbook.Sheets
If invoiceSheet.Name <> wsData.Name And invoiceSheet.Name <> wsTemplate.Name Then
With invoiceSheet.PageSetup
.PaperSize = xlPaperA4
.Orientation = xlPortrait
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
invoiceFileName = desktopPath & invoiceSheet.Name & "_" & Format(Now, "yyyymmdd_hhnnss") & ".pdf"
invoiceSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=invoiceFileName, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If
Next invoiceSheet
MsgBox "すべてのシートのPDFの作成が完了しました。", vbInformation
End Sub
「取引データ一覧」シートの抽出セルを変更したい場合は参考に行いましょう。
項目 | 行 | コードと編集例 |
---|---|---|
取引先名 | 26行目 | clientName = wsData.Cells(i, 2).Value 例:(i, 3)にするとC列 |
請求先(住所) | 27行目 | clientAddress = wsData.Cells(i, 3).Value 例:(i, 4)にするとD列 |
商品名 | 39行目 | productName = wsData.Cells(i, 4).Value 例:(i, 5)にするとE列 |
金額 | 40行目 | invoiceAmount = wsData.Cells(i, 5).Value 例:(i, 6)にするとF列 |
「請求書テンプレート」シートに表示する取引先名などのセル番地を変更したい場合は、以下を参考に行いましょう。
項目 | 行 | コードと編集例 |
---|---|---|
取引先名 | 33行目 | invoiceSheet.Range("D4").Value = clientName |
請求先(住所) | 34行目 | invoiceSheet.Range("D6").Value = clientAddress |
商品名 | 42行目 | invoiceSheet.Cells(rowCounter, 2).Value = productName 例:3にすればC列 |
金額 | 43行目 | invoiceSheet.Cells(rowCounter, 4).Value = invoiceAmount 例:5にすればE列 |
コードを貼り付けたら、「保存」を選択します。
「名前を付けて保存」ダイアログボックスが表示されます。
①任意の保存場所(例:デスクトップ)を選択します。
②ファイルの種類で「Excel マクロ有効ブック」を選択し、③「保存」ボタンを押します。
マクロが作成できました。次にマクロボタンを作成します。
①「開発」タブを選択します。
②「挿入」、③フォームコントロールの「ボタン(フォーム コントロール)」の順に選択します。
マウスポインターが十字マークになったら、任意の位置でドラッグしてボタンを描画します。
描画が終わると、「マクロの登録」ダイアログボックスが自動的に表示されます。
①作成したマクロを選択し、②「OK」ボタンを押します。
マクロボタンが作成できました。
ボタンの名前を変更する場合は、①マクロボタンを右クリックして、②「テキストの編集」を選択します。
任意の名前(例:請求書作成)を入力します。
ボタンの作成が終わったら、ボタンを押します。
「すべてのシートのPDFの作成が完了しました。」というメッセージが表示されたら、「OK」ボタンを押します。
請求書PDFが取引先ごとに保存されました。
試しにPDFをダブルクリックして開いてみます。
請求書PDFが正しく作成されていることが確認できました。
取引先名や金額などが正しく反映されています。
エクセルファイルを開いたときの動作
マクロではエクセルファイルを開いたときの動作も設定できます。
バックアップファイルを作成する
以下ではエクセルファイルを開く度に、バックアップファイルを作成するマクロをご紹介します。
フォルダやファイルを作成しておきます。
ファイルと同じフォルダ内に「Backup」という名前のフォルダも作成しておきましょう。
マクロを設定します。
①「開発」タブ、②「Visual Basic」の順に選択します。
「Microsoft Visual Basic for Applications」というVBAの編集画面が表示されます。
①「表示」、②「プロジェクト エクスプローラー」の順に選択します。
「ThisWorkBook」をダブルクリックします。
以下のコードをコピーして貼り付けます。
以下は、「エクセルファイルを開く度に同じ階層のフォルダにバックアップファイルを作成する」という意味のコードです。
バックアップファイルのファイル名に、バックアップが作成された日時を追加するように設定しています。
Private Sub Workbook_Open()
Dim backupFolder As String
Dim backupFileName As String
Dim currentWorkbook As Workbook
Dim currentPath As String
Dim currentFileName As String
Set currentWorkbook = ThisWorkbook
currentPath = currentWorkbook.Path
currentFileName = currentWorkbook.Name
backupFolder = currentPath & "\Backup"
If Dir(backupFolder, vbDirectory) = "" Then
MkDir backupFolder
End If
backupFileName = backupFolder & "\" & _
Left(currentFileName, InStrRev(currentFileName, ".") - 1) & "_" & _
Format(Now, "yyyy-mm-dd_hh-nn-ss") & ".xlsm"
currentWorkbook.SaveCopyAs backupFileName
MsgBox "バックアップが作成されました: " & backupFileName, vbInformation
End Sub
「Microsoft Visual Basic for Applications」を閉じて、「ファイル」タブを選択します。
①「名前を付けて保存」、②「参照」の順に選択します。
「名前を付けて保存」ダイアログボックスが表示されます。
①ファイルの保存場所を選択します。
必ず「Backup」フォルダと同じ場所に保存しましょう。
②ファイルの種類で「Excel マクロ有効ブック」を選択し、③「保存」ボタンを押します。
マクロの設定が完了しました。
保存したファイルをダブルクリックで開きます。
ファイルが開くと同時に「バックアップが作成されました」というメッセージが表示されます。
「OK」ボタンを押します。
バックアップファイルが正しく作成されたか確認してみます。
「Backup」フォルダをダブルクリックで開きます。
赤矢印で示したように、Backupフォルダの中にバックアップファイルが確認できれば、正しく設定できています。
ダイアログボックスでメッセージを表示する
マクロを設定すれば、エクセルファイルを開く時にダイアログボックスでメッセージを表示することができます。
今回はエクセルファイルを開くと毎回「編集が終了したら、必ず上書き保存すること」というメッセージが表示されるように設定します。
マクロを設定します。
①「開発」タブ、②「Visual Basic」の順に選択します。
「Microsoft Visual Basic for Applications」というVBAの編集画面が表示されます。
①「表示」、②「プロジェクト エクスプローラー」の順に選択します。
「ThisWorkBook」をダブルクリックします。
以下のコードをコピーして貼り付けます。
Private Sub Workbook_Open()
MsgBox "編集が終了したら、必ず上書き保存すること", vbInformation, "注意"
End Sub
「Microsoft Visual Basic for Applications」を閉じて、「ファイル」タブを選択します。
①「名前を付けて保存」、②「参照」の順に選択します。
「名前を付けて保存」ダイアログボックスが表示されます。
①ファイルの保存場所を選択します。
②ファイルの種類で「Excel マクロ有効ブック」を選択し、③「保存」ボタンを押します。
再度エクセルファイルを開いて、上記のようにメッセージが表示されたら正しく設定できています。