make is.dev make it simple. development.
2024年11月20日

WorkSheet操作

EXCEL VBAでのWorkSheet操作で、よく使うものチートシート。

使用環境

・Windows11
・EXCEL 2019

存在確認

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If ws.Name = "[確認するシート名]" Then
        Debug.Print "指定したシートが存在"
    End If
Next ws
VBA

シートの存在を確認する関数はないので、順次シート名を確認して存在を確認する必要がある。

シート取得

' シート名で取得する場合
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("[シート名]")

' シート番号で取得する場合
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets([シート番号(1~)])
VBA

アクティブシート取得

Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
VBA

アクティブ化

' Activateを使用
ThisWorkbook.Worksheets([シート名]).Activate

' Selectを使用
ThisWorkbook.Worksheets([シート名]).Select
VBA

Activate、Selectどちらでも出来るが、Selectはブックがアクティブ状態でないとエラーになる。
Acrivateだとブックも併せてアクティブ状態になる。

一方で、複数シートをアクティブにしたい場合はSelectじゃないと出来ない。

追加

' 選択しているシートの前に追加
ThisWorkbook.Worksheets.Add

' 先頭にシート追加
ThisWorkbook.Worksheets.Add Before:=ThisWorkbook.Worksheets(1)

' 末尾にシート追加
ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)

' 追加して取得
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets.Add
VBA

シートの追加はAddを使う。
引数のBefore、Afterを使って追加する位置を調整する。

また、追加されたシートは自動的にアクティブになる。

複数のシートを追加する場合、Countを指定して追加することも出来る。

ThisWorkbook.Worksheets.Add Count:=3
VBA

複数まとめて追加する場合は、追加される順番に注意。
Sheet1,2,3…の順ではなく、…3,2,1の順になる。

アクティブになるのも、最後に作成されたものになる。
(末尾に追加した場合、最後のシートがアクティブにならない)

削除

ThisWorkbook.Worksheets(["シート名"]).Delete
VBA

名前の取得/変更

' シート名を取得
Dim sheetName As String
sheetName = ThisWorkbook.Worksheets([シート番号(1~)]).name

' シート名を変更
ThisWorkbook.Worksheets(sheetName).name = "[新シート名]"
VB

見出しの色変更

' ThemeColor(1~10)で指定する
' TintAndShadeは -1~1の範囲で指定。中間色は0。
' UIでの色選択時の値は上から、0、0.8、0.6、0.4、-0.25、-0.5
With ThisWorkbook.Worksheets("[シート名]").Tab
    .ThemeColor = 1
    .TintAndShade = 0.8
End With

' ColorパレットのIndex(1~56)で指定する
ThisWorkbook.Worksheets("[シート名]").Tab.ColorIndex = 3

' RGBで指定する
ThisWorkbook.Worksheets("[シート名]").Tab.Color = RGB(255, 0, 0)
VBA

ThemeColor、ColorIndex、Color、いずれも指定するとTintAndShadeは0に戻る。
そのため、TintAndShadeで明るさ調整する場合はその後で指定する必要がある。

表示/非表示

' 非表示
ThisWorkbook.Worksheets("[シート名]").Visible = False

' 再表示
ThisWorkbook.Worksheets("[シート名]").Visible = True
VBA

移動(ブック内)

' 先頭に移動
ThisWorkbook.Worksheets("[シート名]").Move Before:=ThisWorkbook.Worksheets(1)

' 末尾に移動
ThisWorkbook.Worksheets("[シート名]").Move After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
VBA

Before、Afterで位置を指定する。
移動したシートがアクティブ化される。

移動(開いている別ブックへ)

ThisWorkbook.Worksheets("[シート名]").Move Before:=Workbooks("[移動先ブック名]").Worksheets(1)
VBA

同じブック内で移動する時と考え方は同じ。
Before、Afterで別ブックのシートを指定すれば良い。

移動(新規ブックへ)

ThisWorkbook.Worksheets("[シート名]").Move
VBA

Before、Afterを指定しないと新規ブックを作って移動する。
移動したシートがアクティブ化される。

複製(ブック内)

' 先頭に複製
ThisWorkbook.Worksheets("[シート名]").Copy Before:=ThisWorkbook.Worksheets(1)

' 末尾に複製
ThisWorkbook.Worksheets("[シート名]").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
VBA

Before、Afterで位置を指定する。
複製されたシートがアクティブ化される。

複製(開いている別ブックへ)

ThisWorkbook.Worksheets("[シート名]").Copy Before:=Workbooks("[移動先ブック名]").Worksheets(1)
VBA

同じブック内で複製する時と考え方は同じ。
Before、Afterで別ブックのシートを指定すれば良い。

複製(新規ブックへ)

ThisWorkbook.Worksheets("[シート名]").Copy
VB

Before、Afterを指定しないと新規ブックを作って複製する。
複製されたシートがアクティブ化される。