シートの操作について。今回は Sheets を主に使っているが、Sheets を WorkSheets に置き換えるとワークシートのみを対象とできる。(Sheets はグラフシートも対象。)
シートの選択
'左端のシートを選択する
Sheets(1).Select
'Sheet1 を選択する
Sheets("Sheet1").Select
'Sheet1-3 を選択する
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
'Sheet1 をアクティブにする
Sheets("Sheet1").Activate
シート数を調べる
Dim num As Long
'シート数を調べる
num = Sheets.Count
'ワークシート数のみを調べる
num = WorkSheets.Count
シート名の取得/変更
'左端のシート名を取得
Debug.Print Sheets(1).Name
'アクティブシート名を取得
Debug.Print ActiveSheet.Name
'左端のシート名を変更
Sheets(1).Name = "New_Sheet"
シートの存在確認
私の場合は存在確認したシートに対して何かしらの処理を行う場合がほとんどなので、以下の確認方法となることが多い。
'エラー処理を無効化
On Error Resume Next
'"Sheet1" をアクティブ化
Sheets(sheetName).Activate
If Err.Number = 0 Then
<存在する場合の処理>
Else
<存在しない場合の処理>
End If
'エラー処理を通常に戻す
On Error GoTo 0
全シートと比較したいなら For Each - Next でもいいと思う。部分一致したい時なんかはこっち。
Dim ws As Variant
Dim boo As Boolean 'default: False
'"Sheet1" が存在する?
For Each ws In Sheets
If ws.Name = "Sheet1" Then
boo = True
End If
Next
'結果
If boo = True Then
Debug.Print "存在する"
Else
Debug.Print "存在しない"
End If
シートの移動
'Sheet1 を左端に移動
Sheets("Sheet1").Move Before:=Sheets(1)
'Sheet1 を右端に移動
Sheets("Sheet1").Move After:=Sheets(Sheets.Count)
'Sheet1 を Sheet3 の前に移動
Sheets("Sheet1").Move Before:=Sheets("Sheet3")
'Sheet1 を Sheet3 の後ろに移動
Sheets("Sheet1").Move After:=Sheets("Sheet3")
シートのコピー
'Sheet1 を Sheet3 の前にコピー
Sheets("Sheet1").Copy Before:=Sheets("Sheet3")
'Sheet1 を Sheet3 の後ろにコピー
Sheets("Sheet1").Copy After:=Sheets("Sheet3")
ActiveSheet.Name = "NewName" 'コピーしたシート名を変更
シートの挿入
'アクティブシートの前に挿入
Sheets.Add
'Sheet1 の前に挿入
Sheets.Add Before:=Sheets("Sheet1")
'Sheet1 の後ろに挿入
Sheets.Add After:=Sheets("Sheet1")
'Sheet2 の後ろに 3 シート挿入
Sheets.Add After:=Sheets("Sheet2"), Count:=3
'名前を指定して追加
Sheets.Add.Name = "NewName1"
Sheets.Add(Before:=Sheets("Sheet1")).Name = "NewName2"
シートの削除
'Sheet1 を削除
Sheets("Sheet1").Delete
上記でシートの削除を行うと確認メッセージが出てくる。確認メッセージ無しで削除したい場合は以下のようにする。
Application.DisplayAlerts = False
Sheets("Sheet1").Delete
Application.DisplayAlerts = True
シートの表示/非表示
'Sheet1 を表示
Sheets("Sheet1").Visible = True
'Sheet1 を非表示
Sheets("Sheet1").Visible = False
Withステートメント
同じシートに対して連続する処理を行う場合、Withステートメントを使用してまとめて記述する事ができる。
'マクロが書かれているブックのシート"Sheet1"をアクティブ化
ThisWorkbook.Worksheets("Sheet1").Activate
'アクティブシートを編集
With ActiveSheet
'列の幅を調整
.Columns("A").ColumnWidth = 2
.Columns("B").ColumnWidth = 30
.Columns("C").ColumnWidth = 10
'セル範囲"B4:D10"をC列を基準に昇順ソート
'→ 最初の並び替えフィールド: B7
.Range(.Cells(4, "B"), .Cells(10, "D")).Sort Key1:=.Columns("C"), order1:=xlAscending
'3行目にフィルター付与
.Rows(3).AutoFilter
'セルA1を選択
.Range("A1").Select
End With
シートの繰り返し
全てのシートに対して順番に処理する方法について、シート名の取得を例に記載する。
Dim ws As Variant
'全てのシート名を順に取得
For Each ws In Sheets
Debug.Print ws.Name
Next
For - Next を使いたい場合は以下のようになる。
Dim i As Long
'全てのシート名を順に取得
For i = 1 To Sheets.Count
Debug.Print Sheets(i).Name
Next
0 件のコメント:
コメントを投稿