はじめに
「VBAを勉強してみたいけど、コードを見ると難しそう…」
そんな人に向けて、今回はコードを書く前に理解しておきたい「使いどころ」を紹介します。
実際にどんな場面でVBAが役立つのかを知るだけでも、業務改善のヒントになります。
① ファイルを開いたら自動で今日の日付を入れる
毎日「=TODAY()」を打つのは地味に面倒。
VBAならファイルを開いた瞬間に日付が自動で入ります。
報告書や日報など、提出書類に便利です。
▶ コードを見る
Private Sub Workbook_Open()
Sheets("Sheet1").Range("A1").Value = Date
End Sub
ポイント: Excelを開くと自動実行される仕組みを「イベント」と呼びます。
② 入力漏れを自動で見つけたい
「空欄チェック」って意外と時間がかかりますよね。
VBAを使うと、空白のセルが黄色く光ります。
入力漏れを一瞬で見つけられるので、提出前チェックに便利です。
▶ コードを見る
Sub HighlightBlanks()
Cells.Interior.ColorIndex = xlNone
On Error Resume Next
Cells.SpecialCells(xlCellTypeBlanks).Interior.Color = RGB(255, 230, 153)
End Sub
ポイント:「空欄を探して色を付ける」という“人の動作”を自動化しています。
ただ、色付けるだけで消えないのでご注意。。。
③ 重複しているデータを見つけたい
社員名簿や商品リストなど、重複登録を防ぎたい場面に使えます。
VBAは一覧をチェックして、同じ値があるセルを色付けしてくれます。
▶ コードを見る
Sub HighlightDuplicates()
Dim c As Range
For Each c In Selection
If Application.WorksheetFunction.CountIf(Selection, c.Value) > 1 Then
c.Interior.Color = RGB(255, 150, 150)
End If
Next c
End Sub
ポイント:「CountIf関数」を使って“同じ値の数”を数えています。
④ シートを自動で並び替える
部署ごとや日付ごとにシートを管理していると、順番を変えるのが面倒ですよね。
このマクロは、シート名の順番を自動で並び替えます。
▶ コードを見る
Sub SortSheets()
Dim i As Integer, j As Integer
For i = 1 To Sheets.Count - 1
For j = i + 1 To Sheets.Count
If UCase(Sheets(j).Name) < UCase(Sheets(i).Name) Then
Sheets(j).Move Before:=Sheets(i)
End If
Next j
Next i
End Sub
ポイント: シートが多いファイルで順序を整理したいときに使えます。
⑤ フォルダ内のファイル名を一覧にする
フォルダにあるファイルを一覧化したいときに使えるマクロです。
Excelが「ファイル名」と「更新日」を自動で書き出します。
▶ コードを見る
Sub ListFiles()
Dim fso As Object, folder As Object, file As Object
Dim i As Long
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\Users\Public\Documents")
i = 2
For Each file In folder.Files
Cells(i, 1).Value = file.Name
Cells(i, 2).Value = file.DateLastModified
i = i + 1
Next
End Sub
ポイント: “フォルダを覗いてリスト化する”動きをExcelにさせています。
⑥ ファイル保存時に自動で日付をつける
「報告書_20250101.xlsx」のように日付付きで保存したいときに便利です。
手動で名前を変える手間を省けます。
▶ コードを見る
Sub SaveWithDate()
Dim fname As String
fname = ThisWorkbook.Path & "\報告書_" & Format(Date, "yyyymmdd") & ".xlsx"
ThisWorkbook.SaveCopyAs fname
MsgBox "保存しました:" & fname
End Sub
ポイント: Format関数で「日付→文字列」に変換しています。
⑦ 数字に自動でカンマをつける
「経費」や「金額」を扱う表では見やすさが大事。
このマクロで、選択範囲に一括でカンマ区切りをつけられます。
▶ コードを見る
Sub FormatNumbers()
Selection.NumberFormat = "#,##0"
End Sub
⑧ 特定の文字を含む行を別シートへコピー
「確認済み」「未処理」など、特定キーワードを含む行だけ抜き出したいときに使います。
▶ コードを見る
Sub ExtractRows()
Dim src As Worksheet, dest As Worksheet, i As Long, r As Long
Set src = Sheets("一覧")
Set dest = Sheets("抽出")
dest.Cells.Clear
r = 1
For i = 1 To src.Cells(Rows.Count, 1).End(xlUp).Row
If InStr(src.Cells(i, 1).Value, "確認") > 0 Then
src.Rows(i).Copy dest.Rows(r)
r = r + 1
End If
Next i
End Sub
ポイント: “InStr”は「文字を探す」命令です。
⑨ すべてのシートをPDF出力
シートをまとめてPDFにするときに便利。 手動で「印刷 → 名前をつけて保存」を繰り返す必要がなくなります。
▶ コードを見る
Sub ExportToPDF()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If Application.WorksheetFunction.CountA(ws.UsedRange) > 0 Then
ws.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\" & ws.Name & ".pdf"
End If
Next ws
MsgBox "出力完了"
End Sub
⑩ シートを一括で保護・解除
誤操作を防ぎたいとき、すべてのシートを一括で保護できます。 解除マクロも一緒に使うと便利です。
▶ コードを見る
Sub ProtectAll()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Protect Password:="pass"
Next ws
End Sub
Sub UnprotectAll()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Unprotect Password:="pass"
Next ws
End Sub
ポイント: 「全体を守る」ことでファイルの安全性を確保できます。
まとめ
VBAを学ぶときは、まず「どんな場面で役立つか」を知ることが大切です。
どのマクロも、人の操作をExcelにやらせているだけ。
動きを想像できるようになると、コードも自然と読めるようになります。
次は、少しずつ「どんな命令で動いているか」を理解していきましょう。
あと、VBAで行った処理は、元に戻す処理で戻らないので注意しましょう
コメント