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
VBAActivate、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)
VBAThemeColor、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)
VBABefore、Afterで位置を指定する。
移動したシートがアクティブ化される。
移動(開いている別ブックへ)
ThisWorkbook.Worksheets("[シート名]").Move Before:=Workbooks("[移動先ブック名]").Worksheets(1)
VBA同じブック内で移動する時と考え方は同じ。
Before、Afterで別ブックのシートを指定すれば良い。
移動(新規ブックへ)
ThisWorkbook.Worksheets("[シート名]").Move
VBABefore、Afterを指定しないと新規ブックを作って移動する。
移動したシートがアクティブ化される。
複製(ブック内)
' 先頭に複製
ThisWorkbook.Worksheets("[シート名]").Copy Before:=ThisWorkbook.Worksheets(1)
' 末尾に複製
ThisWorkbook.Worksheets("[シート名]").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
VBABefore、Afterで位置を指定する。
複製されたシートがアクティブ化される。
複製(開いている別ブックへ)
ThisWorkbook.Worksheets("[シート名]").Copy Before:=Workbooks("[移動先ブック名]").Worksheets(1)
VBA同じブック内で複製する時と考え方は同じ。
Before、Afterで別ブックのシートを指定すれば良い。
複製(新規ブックへ)
ThisWorkbook.Worksheets("[シート名]").Copy
VBBefore、Afterを指定しないと新規ブックを作って複製する。
複製されたシートがアクティブ化される。