2020年6月11日木曜日

[VBA] 08. シートの操作

シートの操作について。今回は 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 件のコメント:

コメントを投稿