エクセルでシートを大量作成する方法
「シートを大量作成」は手作業だと地味に時間が溶けるので、私は“部署名簿(一覧)→テンプレをコピーして部署別シート作成”をVBAで固定化しています。ここでは、検索されやすい「VBA シートコピー」と「別シート 自動反映 マクロ」の2点を、実務でつまずきやすいところ込みで補足します。 ■VBAでテンプレートを部署数だけコピー(シートコピーの基本) 前提: ・部署名が入った一覧(例:名簿!G2:G12) ・元になるテンプレートシート(例:Template) マクロ例(最小構成): Sub 部署シート一括作成() Dim wsList As Worksheet, wsTemp As Worksheet Dim rng As Range, c As Range Dim nm As String Set wsList = Worksheets("名簿") Set wsTemp = Worksheets("Template") Set rng = wsList.Range("G2:G12") Application.ScreenUpdating = False Application.DisplayAlerts = False For Each c In rng nm = Trim(c.Value) If nm <> "" Then If Not SheetExists(nm) Then wsTemp.Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = nm End If End If Next c Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub Function SheetExists(ByVal sName As String) As Boolean Dim ws As Worksheet On Error Resume Next Set ws = Worksheets(sName) SheetExists = Not ws Is Nothing On Error GoTo 0 End Function ポイント: ・同名シートがあるとエラーになるので、存在チェックは必須です。 ・部署名に「/ : * ? [ ]」などが入るとシート名にできません。名簿側で禁止文字を除くか、VBAで置換してから命名すると安定します。 ■別シートへ“自動反映”させる考え方(マクロだけに頼らない) 「元シートに入力→各部署シートに自動反映」は、実は“数式で引っ張る”のが一番ラクな場面が多いです。私は次のどちらかで作ります。 (1) 数式で反映(更新が自動・軽い) 例:各部署シートのA2に =元データ!A2 のようにリンク。集計項目が同じならこれが最速です。 (2) フィルター条件(部署)を変えて表示したい 部署列で絞り込みたいなら、テーブル化+FILTER関数(Microsoft 365)で =FILTER(元データ!A:Z, 元データ!B:B=$A$1) のように、A1に「営業部」などシート名と同じ部署を置いて連動させると管理が楽でした。 ■マクロで“反映(更新)”までやる場合の例 「ボタン押したら各部署シートを最新に更新したい」なら、元データを部署ごとに抽出して貼り付ける方がわかりやすいです。流れは、 1) 元データをオートフィルターで部署ごとに絞る 2) 可視セルだけコピー 3) 対象部署シートの表に貼り付け という手順。 注意点: ・貼り付け前に部署シート側の明細(表)を一度クリアしないと“ゴミが残る”ことがあります(OCRにもあった「シートにゴミが残ってる」問題)。私は貼り付け範囲を固定してClearContentsする運用にしています。 ・件数が多いとコピー&貼り付けは遅くなるので、可能ならPower Queryやピボット(スライサー)も検討すると時短になります。 ■運用で地味に効く小ワザ ・一括作成後、不要な元シート(仮のSheet1など)は削除して迷子防止 ・部署名簿は“表(テーブル)”にしておくと行追加にも強い ・マクロを回す前にScreenUpdatingを切ると体感速度がかなり変わります この形にしてから、部署追加があっても「名簿に1行足してマクロ実行」で終わるようになり、月次資料の準備がだいぶ軽くなりました。












これは便利