【Excelマクロ】シートを繰り返し使う Set

Excelマクロ

Setステートメントの活用場面

マクロで複数のシートを操作する際、何度も同じシート名を記述する必要が出てきます。

これがコードの「読みやすさを低下させる原因」になったり、あとでシート名を変更した場合、そのシート名において、指定しているコードを全て変更する必要が出てきたり、処理が複雑になります。

例えば、次のようなコードを考えてみましょう。

Sheets("Sheet2").Cells(1, 1).Value = Sheets("Sheet1").Cells(1, 1).Value
Sheets("Sheet3").Cells(1, 1).Value = Sheets("Sheet1").Cells(2, 1).Value

このコードでは Sheets("Sheet1") というシート名が複数回登場しています。

もし、Sheet1 のシート名を「一覧」に変更した場合、コード内のすべての「Sheets("Sheet1")」を修正する必要が出てきます。

Setステートメントとは

このような問題を解決する方法として、Setステートメント を利用する方法があります。

これにより、シートを変数に代入することで、コードを短くし、修正をしやすくすることができます。

基本的な使い方

次の内容は、シートを変数に代入して操作する例です。

Set ws = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
Set ws3 = Sheets("Sheet3")

ws2.Cells(1, 1).Value = ws.Cells(1, 1).Value
ws3.Cells(1, 1).Value = ws.Cells(2, 1).Value
ポイント
  1. 最初に Set を使ってシートを変数に代入します。
  2. その後は変数名(ここでは wsws2ws3)を使ってコードを記述します。
メリット

上記のコードでは、Sheets("Sheet1") の代わりに「ws」を使っているため、記述が短くなります。

さらに、シート名が変更された場合でも、「Set ws = Sheets("Sheet1")」の部分だけ修正すれば済むので、修正がとても簡単になります。

今回の場合、コードが短いため、変更後の方が長くなっていることにより、難しくなっているように感じます。

しかし、修正をする場合や、この後にも何度も「シートの指定」が出てくることを考えると、最初の「Setステートメント」にて指定をして、その部分だけ修正するだけで済むので全体で見ると効率よくコードを書くことができます。

変更前

Sheets("Sheet2").Cells(1, 1).Value = Sheets("Sheet1").Cells(1, 1).Value
Sheets("Sheet3").Cells(1, 1).Value = Sheets("Sheet1").Cells(2, 1).Value

変更後

Set ws = Sheets("一覧")
Set ws2 = Sheets("Sheet2")
Set ws3 = Sheets("Sheet3")

ws2.Cells(1, 1).Value = ws.Cells(1, 1).Value
ws3.Cells(1, 1).Value = ws.Cells(2, 1).Value

Setステートメントのメリットとデメリット

メリット:

  1. 記述が短くなる: 長いコードが簡潔になる。
  2. 修正が簡単: シート名の変更に柔軟に対応できる。

デメリット:

  1. 変数に入れるという考え方が難しい場合がある
  2. どのシートをどの変数に入れたのか、変数を覚えておく必要がある。

Set解除方法:メモリの解放

利用が終わった変数は次のように解放(クリア)することができます。

Set ws = Nothing

これはメモリ解放と呼ばれる操作で、動作をわずかに軽くする効果があります。

動作中にこのSetがあることによって、パソコン上で「記憶」し続ける必要があるので、人間の頭でもそうですが、「これを覚えておいてください!忘れないで!」と言われて、覚え続けておいて、「先ほどの文はもう忘れていいですよ!」と言われたら、それを忘れても良いので、気分が軽くなりませんか?

そのようなイメージです。

ただし、特別な理由がない限り、実はこの操作は必須ではありません。覚えておくと言っても、膨大な量を覚えさせるのであれば、途中で解放した方が良いですが、通常、マクロが終了すると自動的に解放されます。

まとめ

  • Setステートメント を使うと、複数回使用するシートを変数に代入でき、コードの読みやすさが向上します。
  • シート名の変更があった場合でも、Setの部分だけを修正するだけで対応できます。
  • メモリ解放を利用することで、少し動作が軽くなります。

シートの指定において、「シート名」で指定する場合に、将来的にシート名が変更になる可能性がある場合には、Setステートメントを活用してみてください!

コードが簡潔になり、効率的な作業が可能になります。

コメント