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
ポイント
- 最初に
Set
を使ってシートを変数に代入します。 - その後は変数名(ここでは
ws
、ws2
、ws3
)を使ってコードを記述します。
メリット
上記のコードでは、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ステートメントのメリットとデメリット
メリット:
- 記述が短くなる: 長いコードが簡潔になる。
- 修正が簡単: シート名の変更に柔軟に対応できる。
デメリット:
- 変数に入れるという考え方が難しい場合がある
- どのシートをどの変数に入れたのか、変数を覚えておく必要がある。
Set解除方法:メモリの解放
利用が終わった変数は次のように解放(クリア)することができます。
Set ws = Nothing
これはメモリ解放と呼ばれる操作で、動作をわずかに軽くする効果があります。
動作中にこのSetがあることによって、パソコン上で「記憶」し続ける必要があるので、人間の頭でもそうですが、「これを覚えておいてください!忘れないで!」と言われて、覚え続けておいて、「先ほどの文はもう忘れていいですよ!」と言われたら、それを忘れても良いので、気分が軽くなりませんか?
そのようなイメージです。
ただし、特別な理由がない限り、実はこの操作は必須ではありません。覚えておくと言っても、膨大な量を覚えさせるのであれば、途中で解放した方が良いですが、通常、マクロが終了すると自動的に解放されます。
まとめ
- Setステートメント を使うと、複数回使用するシートを変数に代入でき、コードの読みやすさが向上します。
- シート名の変更があった場合でも、Setの部分だけを修正するだけで対応できます。
- メモリ解放を利用することで、少し動作が軽くなります。
シートの指定において、「シート名」で指定する場合に、将来的にシート名が変更になる可能性がある場合には、Setステートメントを活用してみてください!
コードが簡潔になり、効率的な作業が可能になります。
コメント