100本のExcelマクロを作って気づいた、本当に使われるマクロの共通点
タグ:
ExcelVBA業務効率化Tips初心者
投稿先: Qiita
派手な自動化より、地味な繰り返し作業の方が刺さる
100本のVBAマクロをサイトにまとめる中で、意外な発見がありました。「これは技術的に面白い」と思って作ったマクロより、「こんな単純な処理、マクロにするまでもないのでは」と思いながら作ったマクロの方が、結果的によく参照されているということです。
ここまで読んでいるということは、あなたも「便利ツールを作ったのに誰も使ってくれない」とか、逆に「なんでこんな地味な機能がこんなに助かるんだろう」と感じた経験があるはずです。この記事では、そうした「地味だけど頻出」なマクロを3つ、実際のコードとともに紹介します。
1. 検索と置換を「決まった作業」として固定する
Ctrl+Hの検索と置換は、Excelで最も使われる機能の一つですが、それゆえに「毎回同じ置換を手打ちしている」という無駄も起きがちです。FindAndReplaceは、この操作をマクロとして呼び出せるようにするだけの1手です。
Sub FindAndReplace()
On Error GoTo ErrorHandler
Dim ws As Worksheet
Dim findStr As String
Dim replaceStr As String
Set ws = ActiveSheet
findStr = InputBox("検索する文字列を入力してください", "検索文字列")
If findStr = "" Then Exit Sub
replaceStr = InputBox("置換後の文字列を入力してください", "置換文字列")
ws.Cells.Replace What:=findStr, Replacement:=replaceStr, _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
MsgBox "「" & findStr & "」を「" & replaceStr & "」に置換しました", vbInformation, "完了"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub
地味な処理ですが、「どのシートに何を実行したか分からなくなる」という手動操作にありがちな事故を防げる点が、実務での価値です。表記統一のような定型作業ほど、マクロ化の効果が積み重なります。
2. 条件付き書式を「数クリック」から「実行1回」に
条件付き書式は便利な機能ですが、ダイアログの設定手順が意外と多く、毎回同じ条件を設定し直すのは地味にストレスです。ApplyConditionalFormattingは、よく使うパターンをマクロとして固定してしまう方法です。
Sub ApplyConditionalFormatting()
Dim ws As Worksheet
Dim rng As Range
Dim cf As FormatCondition
Set ws = ActiveSheet
Set rng = ws.Range("A1:A100")
On Error Resume Next
rng.FormatConditions.Delete
On Error GoTo 0
Set cf = rng.FormatConditions.Add(xlCellValue, xlGreater, "100")
With cf
.Interior.Color = RGB(255, 255, 0) ' 黄色
.StopIfTrue = False
End With
MsgBox "条件付き書式を適用しました。", vbInformation
Set cf = Nothing
Set rng = Nothing
Set ws = Nothing
End Sub
期限超過を赤くする、目標達成を緑にするなど、「毎回同じ条件を設定している」作業に心当たりがあれば、それがマクロ化の候補です。目視でのチェック漏れを減らせるのも実務上のメリットです。
3. 連続データの入力を「オートフィル頼み」から卒業する
日付や連番、等差数列などの連続データ入力は、Excelのオートフィル機能で手軽にできますが、件数が多かったりテンプレートを都度作る場合は、ドラッグ操作自体が地味な手間になります。AutoFillSeriesは、開始値・ステップ・件数をダイアログで指定するだけで連続データを生成します。
Sub AutoFillSeries()
On Error GoTo ErrorHandler
Dim startCell As Range
Dim countStr As String
Dim fillCount As Long
Dim fillRange As Range
If TypeName(Selection) <> "Range" Then
MsgBox "起点セルを選択してから実行してください", vbCritical, "エラー"
Exit Sub
End If
Set startCell = Selection.Cells(1, 1)
countStr = InputBox("入力する件数を入力してください", "件数", "10")
If countStr = "" Then Exit Sub
If Not IsNumeric(countStr) Then
MsgBox "数値を入力してください", vbCritical, "エラー"
Exit Sub
End If
fillCount = CLng(countStr)
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub
テンプレート作成やテストデータの下ごしらえなど、「毎回ドラッグして数えながら作っている」作業があれば、そこがマクロの出番です。
まとめ: 「本当に使われる」の基準は派手さではなく頻度
3つに共通するのは、どれも技術的な難易度は高くなく、むしろ「よくやる操作をそのまま呼び出せるようにしただけ」だということです。100本作って分かったのは、便利さは処理の複雑さではなく、どれだけ頻繁に発生する作業を肩代わりできるかで決まるということでした。
ここで紹介したFindAndReplace・ApplyConditionalFormatting・AutoFillSeriesを含む、VBAマクロを100本、サイトにまとめて公開しています。
