シンプル・スマートな画面録画ソフト EaseUS RecExperts
Excel最新版が使える「Microsoft 365」を最安で購入するなら

2024/07/22時点のExcelの最新バージョン2406 17726.20160はMicrosoft 365にて利用可能です。

Microsoft 365は、現在『Amazonのオンラインコード版』が最安購入値となっています。
(Microsoft公式より1,490円お得)

Excelについて詳しく解説します

  • Excel VBAで新規シートを作成する方法を教えて欲しい
  • まずはとりあえず動けばいいので、コピペだけで動くコードをください!

この記事では、以上の疑問にお答えします。

 

この記事では、Excel VBAを使って新規シートを作成するサンプルコードを10個ご紹介します。

基本的な書き方から、シート名の設定、複数シート一括作成など、実用的なノウハウを惜しみなくお伝えします。

ぜひ、このコードを活用して、Excel操作を自動化してくださいね。

 

  当記事の内容は、2024年7月にMicrosoft 365のExcel最新版(2405 17628.20144)にて動作を確認しています。

 

この記事のポイント!

【コード①】VBAで新規シートを作成するコード

VBAで新規シートを作成するには、「Worksheets.Add」メソッドを使います。

その基本的なコードは以下のとおりです。

このコードを実行すると、Excelファイルの最後に新しいシートが追加されます。

Worksheets.Addメソッドには引数を指定することもできますが、省略した場合は既定の設定で新規シートが作成されるわけです。

Sub CreateNewSheet()
#ワークシート作成
Worksheets.Add
End Sub

【コード②】既存シートの前後に挿入するコード

新規シートを追加する位置を指定したい場合は、Worksheets.Addメソッドの引数「Before」「After」を利用します。

具体的には、以上のように既存のシートを指定することで、その前後に新規シートを挿入できます。

Sub CreateNewSheet()
' 既存シートの前に挿入 
Worksheets.Add Before:=Worksheets("Sheet1") 
' 既存シートの後に挿入 
Worksheets.Add After:=Worksheets("Sheet3")
End Sub

【コード③】先頭・末尾にシートを挿入するコード

さらに、Sheetsコレクションのインデックス番号を使えば、ファイル内の任意の位置に新規シートを割り込ませることも可能です。

以下は、先頭と末尾にそれぞれシートを挿入するコードです。

Sub CreateNewSheet()
' 先頭に挿入 
Worksheets.Add Before:=Sheets(1) 
' 末尾に挿入 
Worksheets.Add After:=Sheets(Sheets.Count)
End Sub

【コード④】複数シートを一度に作成するコード

もう一つ、覚えておくと便利なのが、複数の新規シートを一気に追加する方法です。

Worksheets.Addメソッド「Count」引数に数値を指定することで、複数のシートを同時に作成できます。

この例では、Excelファイルの末尾に3枚の新規シートが連続して追加されます。

複数のシートを使う必要があるときには、このテクニックを活用すれば手間が省けて便利ですね。

Sub CreateNewSheet()
' 新規シートを3枚追加 
Worksheets.Add Count:=3
End Sub

【コード⑤】新規シートに名前を付けるコード

新規シートを作成したら、分かりやすいシート名を付けておきたいものです。

VBAでは、シートのNameプロパティを使って、シート名を自由に設定できます。

Sub CreateNewSheet()
Dim ws As Worksheet 
Set ws = Worksheets.Add 
ws.Name = "集計データ"
End Sub

この例では、新規シートを作成し、その参照をws変数に代入しています。

その後、wsのNameプロパティに「集計データ」という文字列を設定することで、シートに名前を付けているのです。

 

変数を使う利点は、シート参照を使い回せることにあります。

一連の処理の中で同じシートを繰り返し操作する場合は、このようにシート参照を変数に入れておくと便利ですよ。

【コード⑥】シートを表示・非表示するコード

シート名の設定に関連して、シートを非表示にしたり、再表示することも可能です。

ユーザーインターフェースを整理したり、特定のシートを非表示にしたりする際に役立ちます。

' シートを非表示にする 
Sheets("Sheet1").Visible = xlSheetHidden 
' シートを再表示する 
Sheets("Sheet1").Visible = xlSheetVisible

【コード⑦】シートを保護設定にするコード

また、重要なデータを含むシートを誤って編集されないように保護することも可能です。
これらのテクニックを組み合わせることで、シートの管理をより細かく制御できます。

' シートを保護する(パスワードなし)
Sheets("ImportantData").Protect
' シートを保護する(パスワードあり) 
Sheets("ConfidentialData").Protect Password:="SecretPass123" 
' シートの保護を解除する
Sheets("ImportantData").Unprotect

【コード⑧】重複した名前のエラーを回避するコード

新規シートを作成する際には、シート名の重複に気をつける必要があります。

すでに同じ名前のシートが存在する状態で、同名の新規シートを作ろうとすると、実行時エラーが発生してしまいます。

 

こうしたエラーを防ぐには、新規シート作成前に、同名シートの存在チェックを行うのが確実です。

以下のようなコードを使えば、シート名の重複を回避できます。

Dim ws As Worksheet
Dim wsName As String 
wsName = "集計データ" 
' 同名シートの存在チェック 
On Error Resume Next 
Set ws = Worksheets(wsName)
On Error GoTo 0
If ws Is Nothing Then
  ' 同名シートがなければ新規作成
  Set ws = Worksheets.Add 
 ws.Name = wsName 
Else 
 ' 同名シートがある場合はそのシートを選択 
 ws.Activate 
End If

 

このコードでは、新規シートに付けたい名前をwsName変数に代入しておきます。

その上で、On Error構文を使って、同名シートの存在チェックを行っています。

もし同名のシートがなければ、新規シートを作成し、wsNameを設定します。一方、同名のシートが見つかった場合は、そのシートをアクティブにするだけで、新規作成がスキップされます。

こうしたエラー処理を行う癖を付けておけば、予期せぬエラーに悩まされずに済みますね!

【コード⑨】新しく作成したシートに既存のデータをコピーするコード

エラー処理に加えて、効率的なシート操作のためには、シート間のデータコピーや複数シートに対する一括処理のテクニックも重要です。

新しく作成したシートに既存のシートからデータをコピーする場合、上記のようなコードが使えます。

' "SourceSheet" から "NewSheet" にデータ範囲をコピー 
Sheets("SourceSheet").Range("A1:D10").Copy
Destination:=Sheets("NewSheet").Range("A1")

【コード⑩】ループ処理でシートを作成するコード

また、複数のシートに対して同じ操作を行いたい場合、For Each ループを使用すると便利です。

これらの応用テクニックを活用することで、VBAを使ったシート操作の可能性が大きく広がります。

例えば、月次レポートの自動生成や、大量のデータシートの一括処理など、より複雑な自動化タスクも実現可能になります。

Dim ws As Worksheet 
For Each ws In ThisWorkbook.Worksheets 
  ws.Range("A1").Value = "Updated" 
Next ws

まとめ

VBAを使えば、新規シートの作成からシート名の設定、複数シートの一括追加まで、自由自在にシート操作ができることがお分かりいただけたかと思います。

しかも、エラー処理のテクニックを身につければ、シート操作の自動化を安定して行えるようになります。

ぜひ今回紹介したテクニックを実際のコードに活かして、Excelシート操作の効率化・省力化を進めてみてください。

最初は戸惑うかもしれませんが、これらのテクニックをマスターすれば、VBAによるシート操作が楽しくなるはずです!