Excel VBA_シートを扱う方法まとめ
この記事ではVBAでシートを扱う方法をまとめます。下記のブックを例にシートを操作する様々な方法について書いていきます。
実際のシートについては下記のGitHubを使ってみて下さい。
シートを指定する方法
まずワークシートを指定するには2つの方法があります。
Worksheets("シート名")
Worksheets(番号)
下記では2つの方法で「1月」という名前のシートをアクティブにしています。
Worksheets("1月").Active
Worksheets(1).Active
複数のシートの中から操作対象のモノを指定したい場合、Activeはよく使われます。シートが複数があった場合、開かれているシートがアクティブなモノとみなされる点に注意して下さい。
(名前を指定したパターンの方がわかりやすいので、ここからはこちらのパターンで書き方を統一していきます。)
他のシートにあるセルを指定
他のシートにあるセルを指定するには下記のように記述します。操作したいシート名の次に、対象のセルを指定している点に注目して下さい。
Worksheets("2月").Range("E3").Value = 15000
シートを扱う色々な関数
ここからはシートを扱う色々な関数をご紹介していきます。
シートの追加(Addメソッド)
シートを追加するAddメソッドですが、引数によって挿入場所は微妙に異なります。
Worksheets.Add 'アクティブシートの前に挿入
Worksheets.Add Before:=Worksheets("合計") '「合計」シートの前に挿入
Worksheets.Add After:=Worksheets("合計") '「合計」シートの後に挿入
(行を追加する場合もそうですが)アクティブなモノの「前」に挿入されるのが基本動作です。その上で対象シートを指定したり、後ろに追加することもできます。
シートの削除(Deleteメソッド)
シートを削除するにはDeleteメソッドを使います。対象シートを指定して削除を行います。
Worksheets("合計").Delete
「このシートは完全に削除されます。続けますか?」という警告が表示され、「削除」をクリックするとシートが削除されます。
警告の表示/非表示(Application.DisplayAlerts)
Application.DisplayAlertsというプロパティを使用すると、Excelの警告表示のON/OFFを設定できます。デフォルトではTrueつまりONになっていますが、Flaseを設定するとOFFにできます。
Application.DisplayAlerts = False
Worksheets("練習").Delete
Application.DisplayAlerts = True
警告を表示したくない箇所に一度使って、その後は設定を戻しておくのが基本です。警告をOFFに設定した後、ONに戻すことを忘れないように注意しましょう。
シート名の読み書き(Nameプロパティ)
シートの名前を変更するにはNameプロパティをしようします。対象シートを指定して、読み書きが可能となります。
Worksheets("練習").Name = "練習用シート"
Worksheets("合計").Range("A1").Value = Worksheets("合計").Name
シートを大量に複製する際、よく使われるプロパティとなっています。
シートを挿入してすぐに名前を設定
実務でもよくあるのが、名前を指定しながらシートを挿入するという使い方です。まだ現時点では存在していないシートに名前を設定するにはどうすれば良いのでしょうか。新しいシートを挿入した直後、その新しいシートがアクティブな状態になることがポイントになります。
Worksheets.Add Before:=Worksheets(1)
ActiveSheet.Name = "新しいシート名"
ここでは1番目のシートの直前(=先頭の場所)に新しいシートを挿入しました。するとその追加した新しいシートがアクティブなシートとなります。そこでActiveSheetを使って直前に追加したシートの名前を設定しました。シートの追加と名前の設定が同時にできるのですごく便利な手法です。
シートをコピー(Copyメソッド)
シートに関する操作で、実務でもよく使われるのがコピーです。まずは手始めにシートの内容を丸ごとコピーします。
' 合計シートの「前」にコピー
Worksheets("1月").Copy Before:=Worksheets("合計")
' 合計シートの「後」にコピー
Worksheets("1月").Copy After:=Worksheets("合計")
上記では1月
シートを丸ごとコピーし、合計
シートの前後に配置しています。
シートの内容を一部コピー
次にシートの内容を一部コピーします。ここでは1月
シートにあるセルC3~C12をコピーし、合計
シートのセルC3を貼り付け先としています。
Worksheets("1月").Range("C3:C12").Copy Worksheets("合計").Range("C3")
シートが複数あるのでシート名を指定しながら操作している点に注目して下さい。(シートからシートへの転記だけでなく、ブックを跨いだコピーもよく行われます。)
シートの移動(Moveメソッド)
シートを移動するにはMoveメソッドを使います。
' 合計シートの「前」に移動
Worksheets("1月").Move Before:=Worksheets("合計")
' 合計シートの「後」に移動
Worksheets("1月").Move After:=Worksheets("合計")
シートの一括処理
シートをまとめて一括で処理する場面は実務でも多くあります。シートの最大数を数える必要があるのですが、その場合にはFor~Next構文とCountプロパティが組み合わせて使用されます。
Dim i As Long
For i = 1 To Worksheets.Count
Worksheets(i)に対する処理
Next
Worksheets.Countによってシートの全枚数を取得できる点に注目して下さい。
Discussion