実務でよく使う自動化テクニック
音声
目次
条件付き書式を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出力で上書きされないようにファイル名を管理します。
要約
FormatConditionsで条件付き書式を自動化し、見やすさと一貫性を確保します。
ChartObjects.Addでグラフを動的に作成し、シリーズや書式はSeriesCollectionで制御します。
PrintOut/PrintPreviewで印刷を自動化し、PageSetupで体裁を固定します。
ExportAsFixedFormatでPDF出力を行い、ファイル名に日時を付与したり、存在チェックを行ったりすることを推奨します。
Application.ScreenUpdatingをFalseにして高速化し、必ずエラーハンドラでTrueに戻します。