エクセル マクロ

エクセルマクロの作成例8選!業務効率化のための実践サンプル集

エクセルマクロを活用すると、面倒な手作業を自動化し、業務を大幅に効率化できます。ここでは、実務で役立つエクセルマクロの具体例を10個紹介します。

まずはコード無しで自動化を体験したい、という方は「マクロの記録」という機能を使ってみるのがおすすめです。

【参考記事】「マクロの記録」機能で簡単マクロ作成!プログラミングなしで自動化しよう

1. データの並び替えを自動化

手動で並び替えを行う手間を省くため、マクロで昇順・降順の並び替えを自動できるマクロの例です。

Sub SortData()
    Range("A1").CurrentRegion.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes
End Sub

このコードを実行すると、社員表に対してA列(社員番号)を基準に昇順で並び替えされます。

このコードの良いところは、行が増えた場合でも対応ができるということです。

2. 重複データの削除

データの重複をワンクリックで削除できるマクロです。

Sub RemoveDuplicates()
    Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

例えば下記のように社員番号が重複した表がある場合、このマクロを実行すれば重複を削除した表にすることができます。

3. 指定したセル範囲の値をクリア

特定の範囲のデータを簡単に削除できるマクロです。

Sub ClearRange()
    Range("A2:D100").ClearContents
End Sub

このマクロを実行すると、指定した範囲のデータを削除することができます。

「Range("")」のカッコの中の部分で範囲を指定しています。「Range("A2:D100")」ならA2セルからD100セルの範囲を示します。E列も削除したい場合は、下記のようにコードを変更します。

Sub ClearRange()
    Range("A2:E100").ClearContents
End Sub

これでE列も含めて削除することができます。

4. シートを自動でコピー

元のフォーマットを保持したまま、新しいシートを作成するマクロです。

Sub CopySheet()
    ActiveSheet.Copy After:=Sheets(Sheets.Count)
End Sub

例えば、下記のような「Sheet1」というシートを表示させた状態でこのマクロを実行すると「Sheet1(2)」というコピーのシートができます。

ボタンにして登録しておくと、便利ですね。

5. 指定した条件でデータを抽出

指定した条件に合致するデータのみを抽出して表示するマクロです。

Sub FilterData()
    Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:="営業"
End Sub

上記表に対してこのマクロを実行すると、部署のところを「営業」でフィルターしてくれます。

これも、フィルターしたい項目をボタンにしておくと便利ですね。

6. ピボットテーブルを自動作成

データ範囲からピボットテーブルを作成し、指定のフィールドを設定するマクロです。

Sub CreatePivotTable()
    Dim ws As Worksheet
    Dim pt As PivotTable
    Dim pc As PivotCache
    Dim wsData As Worksheet
    Dim lastRow As Long, lastCol As Long
    
    ' データがあるシートを指定(例:Sheet1)
    Set wsData = ThisWorkbook.Sheets("Sheet1")
    
    ' データ範囲を取得(最後の行・列を明示的に取得)
    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
    lastCol = wsData.Cells(1, wsData.Columns.Count).End(xlToLeft).Column
    
    ' すでに存在する場合は削除
    On Error Resume Next
    Application.DisplayAlerts = False
    ThisWorkbook.Sheets("ピボット結果").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0
    
    ' 画面更新と自動計算を無効化
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    ' 新しいシートを追加
    Set ws = ThisWorkbook.Sheets.Add
    ws.Name = "ピボット結果"
    
    ' ピボットキャッシュを作成(範囲を明示的に指定)
    Set pc = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                SourceData:=wsData.Name & "!" & wsData.Range(wsData.Cells(1, 1), wsData.Cells(lastRow, lastCol)).Address)
    
    ' ピボットテーブルを新しいシートに作成(名前を一意に)
    Set pt = pc.CreatePivotTable(TableDestination:=ws.Range("A1"), TableName:="PivotTable" & Format(Now, "hhmmss"))
    
    ' ピボットテーブルのレイアウトを設定
    On Error Resume Next
    With pt
        If .PivotFields("社員ID") Is Nothing = False Then
            .PivotFields("社員ID").Orientation = xlRowField
        End If
        If .PivotFields("給与") Is Nothing = False Then
            .PivotFields("給与").Orientation = xlDataField
            .PivotFields("給与").Function = xlSum
        End If
    End With
    On Error GoTo 0
    
    ' 画面更新と自動計算を再開
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    
End Sub

所々エラー処理を入れているので、見た目が少し複雑になっていますが、ただピボットテーブルの作成までの手順をコードにしているだけです。このマクロを実行すると、下記の表から自動的にピボットテーブルを作成することができます。

マクロを実行すると、「ピボット結果」という新しいシートが作成されるようになっています。

7. セルの色を自動変更

数値の条件に応じてセルの色を変更するマクロです。

Sub 色変更マクロ()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    
    ' 対象のシートを指定
    Set ws = ThisWorkbook.Sheets("売上")
    
    ' 最下行を取得(A列にデータがある場合)
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 最下行までループして条件に応じて色を変更
    For i = 2 To lastRow
        If ws.Cells(i, 2).Value >= 10000 Then
            ws.Cells(i, 2).Interior.Color = RGB(144, 238, 144) ' 緑 (LightGreen)
        ElseIf ws.Cells(i, 2).Value < 5000 Then
            ws.Cells(i, 2).Interior.Color = RGB(255, 182, 193) ' 赤 (LightPink)
        Else
            ws.Cells(i, 2).Interior.ColorIndex = xlNone ' 色なし
        End If
    Next i
End Sub

売上金額により背景の色が変わるようになっており、10000より大きい数値は緑、5000より小さい数値は赤、それ以外は色なしというようにしています。

8. 保存時にバックアップを自動作成

エクセルファイルのバックアップを自動作成するマクロです。

Sub SaveBackup()
    Dim backupPath As String
    backupPath = "C:\Backup\" & Format(Now, "yyyymmdd_HHMM") & "_backup.xlsx"
    ThisWorkbook.SaveCopyAs Filename:=backupPath
End Sub

誤ってファイルを更新したことを想定し、細めにバックアップをとりたいときなどに有効です。

とはいえいちいちこのマクロを手動で実行するのは手間なので、例えばWorkbook_Open()というマクロと組み合わせると、エクセルを開いたときに必ずバックアップが作成されるというような使い方ができます。

まとめ

エクセルマクロを活用すれば、手作業で行っていた業務を効率化し、大幅な時間削減が可能になります。今回紹介したマクロの事例を参考に、自分の業務に合わせたカスタマイズを試してみてください!

  • この記事を書いた人

いしはらゆうと

実務エクセルのプロ
パソコンが使えず全く仕事ができなかったことから猛勉強し、 各部署から頼りにされるレベルになりついにはSEに。
マクロを活用し、2人がかりで1日の仕事を1人×30分に短縮。 自身の経験から、最短で学ぶことのできるエクセル学法をノウハウ化し数十名以上にオンライン講座を開講。
現在は「瞬習エクセルアカデミー」として実務に必要なスキルをスキマ時間で学ぶことのできるオンラインスクールを運営中。
元SE
国家資格:応用情報技術者

-エクセル, マクロ
-,