ワークシートの編集
VBAでワークシートを編集するには
- Worksheets【ワークシーツ】コレクション
- Worksheet【ワークシート】オブジェクト
- Tab【タブ】オブジェクト
の各プロパティやメソッドを使用して、ワークシートを編集します。
ワークシート単位での編集操作には、追加、削除、移動、コピー、シート名変更、シートタブ色変更などがあります。これらの編集操作をするプロパティやメソッドについて詳細に解説します。
ワークシートを編集するプロパティ・メソッド一覧
メソッド・プロパティ | 内容 |
---|---|
Add【アド】メソッド | ワークシートを追加します。 |
Delete【デリート】メソッド | ワークシートを削除します。 |
Move【ムーブ】メソッド | ワークシートを移動します。 |
Copy【コピー】メソッド | ワークシートをコピーします。 |
Name【ネーム】プロパティ | ワークシート名を取得または設定します。 |
Count【カウント】プロパティ | ワークシートの数を数えます。 |
Color【カラー】プロパティ | シート見出しの色を取得または設定します。 |
Add【アド】メソッド
新しいワークシートを追加するには、Worksheets【ワークシート】コレクションまたは、Sheets【シーツ】コレクションのAdd【アド】メソッドを使用します。Add【アド】メソッドでシートを追加すると、そのシートがアクティブになります。
Add【アド】メソッドの書式と設定値(引数)の説明
[]内は省略可能です。
オブジェクト.Add([Before,After,Count])
- オブジェクト(必須)
Worksheets【ワークシーツ】コレクションまたは、Sheets【シーツ】コレクションを指定します。Worksheet【ワークシート】オブジェクトは指定できません。 - Before【ビフォア】(省略可)
指定したワークシートの前(左側)に新規追加します。 - After【アフター】(省略可)
指定したワークシートの後(右側)に新規追加します。 - Count【カウント】(省略可)
追加するワークシートの枚数を指定します。
※引数Before Afterを省略した場合は、アクティブシートの前(左側)に追加されます。
シートの末尾に新規シートを2枚追加するコード例
Sub シート追加() Worksheets.Add After:=Worksheets(Worksheets.Count), Count:=2 End Sub
引数After【アフター】に指定するシートはCount【カウント】メソッドで取得したシートの枚数をインデックス番号にして最終(右側)のシートを参照しています。
Delete【デリート】メソッド
指定したワークシートを削除するにはWorksheet【ワークシート】オブジェクトのDelete【デリート】メソッドを使用します。複数のワークシートを参照して、まとめて削除することもできます。
Delete【デリート】メソッドの書式と設定値の説明
オブジェクト.Delete
- オブジェクト(必須)
Worksheet【ワークシート】オブジェクトを指定します。指定したワークシート名が存在しない場合はエラーになります。ワークシートを削除すると左側から順に振られているインデックス番号が振りなおされます。インデックス番号で指定する場合は、参照するワークシートがずれることがあるので注意が必要です。
ワークシートsheet1を削除するコードと解説
Sub シート削除() Application.DisplayAlerts = False Worksheets("sheet1").Delete Application.DisplayAlerts = True End Sub
※削除したシートの復元はできません。
Move【ムーブ】メソッド
Copy【コピー】メソッド
指定したワークシートを移動するには、Move【ムーブ】メソッドを使用します。
指定したシートをコピーするにはCopy【コピー】メソッドを使用します。
Move【ムーブ】Copy【コピー】メソッドの書式と設定値(引数)の説明
[]内は省略可能です。
オブジェクト.Move([Before,After])
オブジェクト.Copy([Before,After])
- オブジェクト(必須)
Worksheet【ワークシート】オブジェクトまたはWorksheets【ワークシーツ】コレクションSheets【シーツ】コレクションを指定します。 - Before【ビフォア】(省略可)
指定したワークシートの前(左側)に移動またはコピーします。 - After【アフター】(省略可)
指定したワークシートの後(右側)に移動またはコピーします。
※引数Beforeと引数Afterを同時に指定することはできません。
※移動先またはコピー先となる引数BeforeとAfterを省略した場合は、新規ブックが作成され、新規ブックに移動またはコピーされます。
ワークシートを別ブックに移動するコードと解説
コードが記述されているブックのシート「移動シート」を同じパスにあるブック「Book1.xlsx」の一番左側に移動するコード例です。
Sub 別ブックに移動() Dim 移動先 As String 移動先 = "Book1.xlsx" Workbooks.Open Filename:=ThisWorkbook.Path & "¥" & 移動先 ThisWorkbook.Activate Worksheets("移動シート").Move Before:=Workbooks(移動先).Worksheets(1) End Sub
2行目【Dim 移動先 As String】
移動先のブック名を格納する変数「移動先」を文字列型(String)で宣言します。
3行目【移動先 = “Book1.xlsx”】
変数「移動先」に移動先のブック名を代入して格納します。
4行目【Workbooks.Open Filename:=ThisWorkbook.Path & “¥” & 移動先】
workbooks【ワークブックス】コレクションのOpen【オープン】メソッドでこのブックのパスにある
移動先となる「Book1.xlsx」を開きます。
5行目【ThisWorkbook.Activate】
このコードが記述されているブックをアクティブにします。
6行目【Worksheets(“移動シート”).Move Before:=Workbooks(移動先).Worksheets(1)】
Move【ムーブ】メソッドを使用いして、このコードが記述されているブックの「移動シート」を変数「移動先」に格納されている「Book1.xlsx」のインデックス番号「1」のシートに移動します。
※移動先に同じ名前のシートが存在していた場合は「移動シート(2)」のようにシート名の後に自動的に番号が振られます。
同じブック内で別シートとしてコピーするコードと解説
Sub シートコピー() Worksheets("原本").Copy Before:=Worksheets("原本") ActiveSheet.Name = "No" & Worksheets.Count - 1 End Sub
複数のシートを移動またはコピーする方法
配列を表すArray【アレイ】関数を使用して
Worksheets(Array(“Sheet1″,”sheet2”)).Copy
のように記述して複数シートを指定します。
全シートの場合は
Worksheets.Copy
のようにWorksheets【ワークシーツ】コレクションを使用します。
Name【ネーム】プロパティ
ワークシートのシート名を取得または設定するには、Worksheet【ワークシート】オブジェクトのName【ネーム】プロパティを使用します。
Name【ネーム】プロパティの書式と設定値の説明
【取得】
オブジェクト.Name
【設定】
オブジェクト.Name = 設定値
- オブジェクト(必須)
シート名を取得または設定するWorksheet【ワークシート】オブジェクトを指定します。 - 設定値(必須)
ワークシート名を文字列で指定します。ワークシート名は31文字以内で指定します。空白を使用することはできません。すでにあるシート名は使用できません。以下の記号を含めることはできません。「:」「¥」「/」「?」「*」「[]」
ワークシートの追加と同時にシート名を設定する方法
Add【アド】メソッドにより追加したシートにはWorkbook【ワークブック】オブジェクトが返ります。
これを利用して
Workbooks.Add.Name = “追加”
と記述するとシート追加と同時にシート名を設定できます。
シート名を設定するときに同じシート名がないか確認する方法
同一のブック内に同じ名前のシートを作成することはできません。シート名を設定するときに、設定したいシート名がすでに存在するかどうかを確認するには
For Each【フォーイーチ】ステートメントとIf【イフ】ステートメント(条件分岐)を使用して以下のように記述することができます。InputBox【インプットボックス】関数でユーザーにシート名を入力してもらい、繰り返し処理の中で同じシート名があった場合はGoTo【ゴゥトゥ】ステートメントでInputBox関数の処理まで戻り同名シートが無かった場合はシート原本をコピーして、コピーしたシート名をユーザーが入力したシート名にするコードです。
同じシート名があるか条件分岐するコード例
Sub 同名シート確認() Dim シート名 As String Dim シート As Worksheet 移動: シート名 = InputBox("シート名を入力してください。") For Each シート In Worksheets If シート.Name = シート名 Then MsgBox シート名 & "と同じシート名があります。" GoTo 移動 End If Next Worksheets("原本").Copy Before:=Worksheets("原本") ActiveSheet.Name = シート名 End Sub
指定したシートだけ残してほかのシートを削除する方法
For Eath【フォーイーチ】ステートメントの繰り返し処理の中でIf【イフ】ステートメントで条件分岐を行い、シート名を確認しながら、シート原本だけを残してシートを削除します。
コード例
Sub 指定シート以外削除() Dim シート As Worksheet For Each シート In Worksheets If シート.Name <> "原本" Then Application.DisplayAlerts = False シート.Delete Application.DisplayAlerts = True End If Next End Sub
Count【カウント】プロパティ
指定したシート数や選択しているシート数を取得するには、Worksheets【ワークシーツ】コレクションのCount【カウント】プロパティを使用します。最後(右端)のシートのインデックス番号を取得したり、シートの数だけ繰り返し処理をする場合などに利用されます。非表示になっているシートも数えます。
Count【カウント】プロパティの書式と設定値の説明
オブジェクト.Count
- オブジェクト(必須)
Worksheets【ワークシーツ】コレクションまたは、複数のシートを参照しているWorksheet【ワークシート】オブジェクトを指定します。
※単一のWorksheet【ワークシート】オブジェクトに対してのCount【カウント】プロパティを使用することはできません。
グラフシートも含めた全シート数を取得する方法
すべてのシート数を取得するには、Sheets【シーツ】コレクションを対象にし
「Sheets.count」
と記述します。
また、グラフシートの数を取得するには、Charts【チャーツ】コレクションを対象にし
「Charts.Count」
と記述します。
表示されているシートのみ数える方法
Count【カウント】プロパティは非表示のシートもカウントします。表示しているシートのみ数えるにはシートの表示・非表示を取得、設定するVisible【ビジブル】プロパティを使って以下のように記述します。
表示されているシートだけカウントするコード例
Sub 表示シートカウント() Dim カウント As Integer Dim シート As Worksheet For Each シート In Worksheets If シート.Visible = True Then カウント = カウント + 1 End If Next MsgBox "表示されているワークシート数は" & カウント End Sub
Color【カラー】プロパティ
シート見出しの色を取得または設定するにはWorkSheet【ワークシート】オブジェクトのTab【タブ】プロパティで取得したワークシートの見出しを表すTab【タブ】オブジェクトに対してColor【カラー】プロパティを使用します。
Color【カラー】プロパティの書式と設定値の説明
【取得】
オブジェクト.Color
【設定】
オブジェクト.Color = RGB値
- オブジェクト(必須)
Worksheet【ワークシート】オブジェクトのTab【タブ】プロパティで取得したシート見出しを表すTab【タブ】オブジェクトを指定します。 - 設定値(必須)
RGB関数を使用して値を設定します。
先頭のシートの見出しを赤にするコード例
Sub 見出し色変更() Sheets(1).Tab.Color = RGB(255, 0, 0) End Sub
シート見出しの色の設定を解除する方法
ColorIndex【カラーインデックス】プロパティを使用して値をxlNone【エックスエルナン】に設定します。例えば、アクティブシートの見出しの色を解除する場合は
Activesheet.Tab.colorIndex = xlNone
と記述します。
以上で、ワークシートを編集するプロパティ・メソッドについての解説を終了します。 ありがとうございました。