実務でよく使う自動化テクニック

投稿日:2026-01-07

音声

※ AI音声で読み上げます

目次

  1. 条件付き書式をVBAで設定する
  2. グラフの自動作成(ChartObjectsコレクション)
  3. 印刷処理の自動化(PrintOut、PrintPreview)
  4. ExportAsFixedFormatでPDF出力
  5. Application.ScreenUpdatingで画面更新を制御する
  6. 注意(ここだけ)
  7. 要約

条件付き書式をVBAで設定する

条件付き書式をVBAでルール化すると、一貫した見た目にしやすくなり、人的ミスも減らせます。

Range.FormatConditionsを使い、既存ルールは削除してから追加します。マクロは標準モジュールへ置き、保存は.xlsmが推奨です。

Sub ApplySimpleCF()
  Dim rng As Range
  Set rng = ThisWorkbook.Sheets("Sheet1").Range("B2:B20")
  rng.FormatConditions.Delete
  rng.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=0"
  rng.FormatConditions(1).Interior.Color = RGB(255,200,200)
  rng.FormatConditions.AddColorScale 2
End Sub

ポイントとして、範囲指定のミスやFormatConditionsの重複は要チェックです。Rangeはブロック操作に向き、Cellsはループ処理に向きます。

グラフの自動作成(ChartObjectsコレクション)

ChartObjectsコレクションでシート上にChartObjectを追加し、サイズ・位置・ソースを設定します。定期レポートで有効です。凡例や系列はSeriesCollectionで細かく調整します。

Sub CreateSalesChart()
  Dim ws As Worksheet, ch As ChartObject
  Set ws = ThisWorkbook.Sheets("Sheet1")
  On Error Resume Next: ws.ChartObjects("SalesChart").Delete: On Error GoTo 0
  Set ch = ws.ChartObjects.Add(300,10,400,250): ch.Name = "SalesChart"
  With ch.Chart
    .ChartType = xlLineMarkers
    .SetSourceData ws.Range("A1:B13")
    .HasTitle = True: .ChartTitle.Text = "月次売上"
  End With
End Sub

事前に印刷範囲や列幅を整えると見栄えが安定します。

印刷処理の自動化(PrintOut、PrintPreview)

ActiveSheet.PrintOut/PrintPreviewで印刷を自動化します。From/To/Copies/Previewなどの引数で制御できます。PageSetupで用紙サイズや向きを事前に固定すると、期待どおりの出力になりやすいです。

Sub PrintReport()
  With ThisWorkbook.Sheets("Sheet1").PageSetup
    .Orientation = xlPortrait: .PaperSize = xlPaperA4
  End With
  ThisWorkbook.Sheets("Sheet1").PrintPreview
  ' ThisWorkbook.Sheets("Sheet1").PrintOut Copies:=1, Preview:=False
End Sub

共有プリンタ環境では、テスト印刷を推奨します。

ExportAsFixedFormatでPDF出力

ExportAsFixedFormatでシートやブックをPDF化します。ファイル名に日付や時刻を付けて上書きを避け、PrintAreaを設定して不要な分割を防ぎます。

Sub ExportSheetToPDF()
  Dim fpath As String
  fpath = ThisWorkbook.Path & "\Report_" & Format(Date, "yyyymmdd") & ".pdf"
  ThisWorkbook.Sheets("Sheet1").ExportAsFixedFormat Type:=xlTypePDF, Filename:=fpath, _
    Quality:=xlQualityStandard, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub

上書きを避けたい場合は、Dirで存在チェックをするかタイムスタンプを付与すると運用しやすいです。

Application.ScreenUpdatingで画面更新を制御する

長時間処理では画面更新を止めると高速化できます。必ずエラーハンドラでTrueに戻すことがポイントです。Falseのまま中断すると画面が更新されなくなります。

Sub LongProcess()
  On Error GoTo ErrHandler
  Application.ScreenUpdating = False
  Call CreateSalesChart
  Call ExportSheetToPDF
  MsgBox "完了"
Cleanup:
  Application.ScreenUpdating = True
  Exit Sub
ErrHandler:
  MsgBox "エラー:" & Err.Number & " " & Err.Description
  Resume Cleanup
End Sub

ScreenUpdating以外にもCalculationやEnableEventsを制御すると、さらに高速化できる場合があります。

注意(ここだけ)

  • Application.ScreenUpdating = False のまま止めず、必ず復帰させます。また、PDF出力で上書きされないようにファイル名を管理します。

要約

  1. FormatConditionsで条件付き書式を自動化し、見やすさと一貫性を確保します。

  2. ChartObjects.Addでグラフを動的に作成し、シリーズや書式はSeriesCollectionで制御します。

  3. PrintOut/PrintPreviewで印刷を自動化し、PageSetupで体裁を固定します。

  4. ExportAsFixedFormatでPDF出力を行い、ファイル名に日時を付与したり、存在チェックを行ったりすることを推奨します。

  5. Application.ScreenUpdatingをFalseにして高速化し、必ずエラーハンドラでTrueに戻します。