ワークシートの挿入と同時に名前を設定する
追加したワークシートをnewSheet変数で受け取り、タブ名を「新規集計」に設定します。同名のグラフシートを含めて事前確認し、重複時は追加しません。
実行前に確認
- コピーした練習用ブックで試してください。VBAの変更は通常の[元に戻す]で戻せません。この例はデスクトップExcel向けで、Excel上での実行検証は未実施です。
- 固定名「新規集計」を使う例です。sheetNameを変える場合は、空欄・31文字超・使用できない記号などの名前制約も確認してください。ここでは任意入力の名前を検証する機能は実装していません。
- 追加前にすべてのSheetsの名前を比較します。ワークシートだけを調べると、同名のグラフ専用シートを見落とします。シートの削除や上書きは行いません。
- 追加後の予期しないエラーまで自動復旧する例ではありません。変更した名前が不正な場合など、追加済みの空シートが残ることがあります。再実行する前にブックの状態を確認してください。
1サンプルコード
Option Explicit
Sub Sample3065()
Dim sheet As Object
Dim newSheet As Worksheet
Const sheetName As String = "新規集計"
If ThisWorkbook.ProtectStructure Then
MsgBox "ブックの構成が保護されているため追加しません。"
Exit Sub
End If
For Each sheet In ThisWorkbook.Sheets
If StrComp(sheet.Name, sheetName, vbTextCompare) = 0 Then
MsgBox "新規集計は既にあります。追加しません。"
Exit Sub
End If
Next sheet
Set newSheet = ThisWorkbook.Worksheets.Add( _
After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
newSheet.Name = sheetName
End Sub図で見るシート追加と名前確認
イメージ図説明用の想定例です。左から「売上」「経費」の2枚がある練習用ブックを使います。
実行前:2枚
売上 → 経費。新規集計という名前はまだない
事前確認
構成保護があれば中止。Sheets全体を調べ、同名なら種類を問わず中止
追加:Setで受け取る
全シートの右端にワークシート1枚を追加し、newSheet変数で参照する
実行後:3枚
Nameを設定し、売上 → 経費 → 新規集計 になる
再実行時は同名チェックで終了し、3枚のままです。グラフ専用シートの同名も検出します。実際のExcel実行結果ではなくコードから説明した想定例です。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する7つの手順で、コードの使い方を確認できます
- 1
準備:デスクトップ版Excelでコピーした練習用ブックを.xlsm形式で保存します。例では左から「売上」「経費」の2枚を用意し、「新規集計」がないことを確認します。このコードを練習用ブックの標準モジュールへ貼り付けます。
- 2
実行:Alt+F11→[挿入]→[標準モジュール]でコードを貼り付け、Sample3065内にカーソルを置いてF5を押します。ThisWorkbookはコードを保存したブックを指します。別のブックを画面で選択しても対象は変わりません。
- 3
想定結果:売上 → 経費 の並びが、売上 → 経費 → 新規集計 になります。追加した1枚がアクティブになり、既存のセル内容は書き換えません。このマクロに保存処理はありません。
- 4
読み方:Dim newSheet As Worksheetは変数の宣言だけです。Set newSheet = ...Add(...)で、追加したシートへの参照を受け取ります。newSheetは自由に名付けた変数で、VBAの専用命令でもタブ名でもありません。newSheet.Name = sheetNameがタブ名を変更する行です。
- 5
位置:Afterにはブック内の最後のSheetsを渡します。Sheetsにはグラフ専用シートも含まれるので、その後ろに追加できます。BeforeとAfterを両方省くとアクティブシートの前になるため、この例ではAfterを省略しません。
- 6
再実行:1回目に作った「新規集計」があるため、2回目はメッセージを表示して終了し、枚数は増えません。同じ名前のグラフ専用シートがある場合も追加前に中止します。
- 7
保護されている場合:ブックの構成保護を検出して中止します。コードで保護は解除しません。構成保護と個別ワークシートのセル保護は別の設定です。