Excel VBAで学ぶワークシート操作の基本

投稿日:2026-01-07

音声

※ AI音声で読み上げます

目次

  1. シートの追加・削除・コピー
  2. シート名の取得と変更
  3. シートの表示・非表示・保護
  4. 複数シート間のデータ連携
  5. Worksheetsコレクションの活用
  6. 注意(ここだけ)
  7. 要約

シートの追加・削除・コピー

今回できるようになることとして、シートの追加・削除・コピーをVBAで安全に扱えるようになります。新しいシートを追加するにはWorksheets.Addを使い、既存シートのコピーはWorksheet.Copy、削除はWorksheet.Deleteを使います。削除時はダイアログが出るためApplication.DisplayAlerts = Falseで抑えるのが一般的です。複数操作をまとめるときはエラー処理と元に戻す方法(UndoはVBAで限定的です)を考慮します。

最小マクロ:

Sub BasicSheetOps()
    ' シート追加
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
    sh.Name = "新シート_" & Format(Now, "hhmmss")
    ' シートコピー(先頭に複製)
    ThisWorkbook.Worksheets(1).Copy Before:=ThisWorkbook.Worksheets(1)
    ' シート削除(警告OFF)
    Application.DisplayAlerts = False
    On Error Resume Next
    ThisWorkbook.Worksheets("古いシート").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
End Sub

貼り付け場所は標準モジュールに貼り付けます。ThisWorkbookやシートモジュールではなく標準モジュールが使いやすいです。

実行方法は、VBE(Alt+F11)で該当モジュールを開き、カーソルを置いてF5で実行するか、ボタンに割り当てます。

確認方法は、シート一覧に新しいシート名が追加され、コピー元の複製ができていること、削除対象がいなくなっていることを目視で確認します。

シート名の取得と変更

シート名はWorksheet.Nameで取得・設定できます。名前を変更するときは既存のシート名と重複するとエラーになるため、事前に同名がないか確認すると安全です。

また、無効な文字(: \ / ? * [ ])が含まれているとエラーになるため、置換または除去を行います。インデックスで参照すると位置の変更に影響されるため、可能なら名前で扱うほうが意図が明確になります。ユーザー入力を保存する場合は前後の空白をトリムし、長さ制限も要チェックです。

よくあるミスとして、シート名に使用できない文字を含めたまま設定しようとしてエラーになることが多いです。避けたい例を回避するには、Replace関数で禁止文字を除去するか、事前の存在チェックとしてIf WorksheetExists Then ...のような処理を実装します。

シートの表示・非表示・保護

Visible プロパティで表示(xlSheetVisible)、非表示(xlSheetHidden)、超非表示(xlSheetVeryHidden)を切り替えます。

xlSheetVeryHidden は VBE からのみ復元できるため、ユーザーから隠したい設定に向きます。

保護は Worksheet.Protect メソッドでパスワードや編集可否を指定できます。

保護解除は Unprotect を使います。

自動化では一時的にシート保護を外して編集後に再度保護するフローがよく使われます。

ユーザーの権限を想定して、不要に広い編集権限を与えない設計が望ましいです。

複数シート間のデータ連携

別シートへ値を渡す基本は、Worksheets("A").Range("A1").Value = Worksheets("B").Range("B1").Value です。

ループで多数セルを扱う場合は、配列に読み込んで一括で書き戻すと高速になります。

次の例は、複数シートから集計シートへ値を転記する最小形です。

Sub CollectSummary()
    Dim ws As Worksheet, tgt As Worksheet
    Set tgt = ThisWorkbook.Worksheets("集計")
    Dim r As Long, c As Long, outRow As Long
    outRow = 2
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> tgt.Name Then
            tgt.Cells(outRow, 1).Value = ws.Name
            tgt.Cells(outRow, 2).Value = ws.Range("A1").Value2
            outRow = outRow + 1
        End If
    Next ws
End Sub

使い分けの基準として、固定アドレスや複数セルを一括で扱うときは Range("A1:B10") が向いています。

一方で、ループで行列を指定する場合は Cells(row, col) が扱いやすいです。

Value と Value2 の違いは主に日付と通貨の扱いで、Value2 はより速くシリアル値(数値)を返します。

日付や通貨の表示形式を気にする場合は Value を使うか、書式を別途管理します。

Worksheetsコレクションの活用

Worksheets コレクションはブック内のすべてのワークシートを扱う基本です。

For Each で回せば追加・削除があっても処理が安定しますし、Count で枚数を取得できます。

インデックス参照(Worksheets(1))は位置に依存するため、特定シートを常に扱う場合は名前指定が堅牢です。

名前で存在確認する関数を用意しておくとエラーを防げます。

コレクションを使えばシートごとの処理の共通化や設定変更の一括適用が簡単になります。

注意(ここだけ)

  • マクロを保存する際はブックを「マクロ有効ブック(.xlsm)」で保存することを忘れないでください。

要約

  1. Worksheets.Add / Copy / Delete でシートの追加・複製・削除ができ、削除時は DisplayAlerts を使って扱います。

  2. Worksheet.Name で取得・設定し、不正文字や重複を事前チェックすると安全です。

  3. Visible と Protect/Unprotect で表示制御と保護が可能で、VeryHidden はVBEからのみ復元できます。

  4. 複数シート間は Range/Cells と配列利用で効率化し、Value vs Value2 の違いを理解すると高速化できます。

  5. Worksheets コレクションは枚数取得や一括処理に便利で、名前参照が位置依存より堅牢です。