🥨

Excel VBA_シートを扱う方法まとめ

2022/12/25に公開約3,100字

この記事ではVBAでシートを扱う方法をまとめます。下記のブックを例にシートを操作する様々な方法について書いていきます。

実際のシートについては下記のGitHubを使ってみて下さい。

https://github.com/masahirotoba/VBA_zenn/blob/main/2022/12/sample.xlsm

シートを指定する方法

まずワークシートを指定するには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

ログインするとコメントできます