「なんで私のコードはこんなに読みにくいんだろう…」
オフィスでモニターを見つめながら、そうため息をついたことはありませんか?
私も自分の書いたコードが読みづらいと感じたことは何度もあります。
例えば、こんなコードを書いていませんか?
【Before】悪い例:目が滑る長いコード
Sub BadCode()
' A1セルの文字を太字にする
Worksheets("Sheet1").Range("A1").Font.Bold = True
' A1セルの文字色を赤にする
Worksheets("Sheet1").Range("A1").Font.Color = vbRed
' A1セルの背景色を黄色にする
Worksheets("Sheet1").Range("A1").Interior.Color = vbYellow
' A1セルに"重要"と書き込む
Worksheets("Sheet1").Range("A1").Value = "重要"
End Sub
正直、これを見るだけで「うっ…」となりますよね。
Worksheets(“Sheet1”).Range(“A1”) という呪文を4回も繰り返しています。
もしシート名が「Sheet1」から「売上管理」に変わったら?
…そう、4箇所すべて修正しなければなりません。1つでも忘れたらエラーです。考えただけで胃が痛くなります。
そこで登場するのが、オブジェクト変数という考え方です。
難しそうに聞こえますが、簡単に言うと「あだ名をつける」ということです。
Worksheets(“Sheet1”).Range(“A1”) という長い住所に、myCell(私のセル)という短いあだ名をつけてあげるのです。
このときに使うのがSet(セット)という命令です。
では、あだ名を使った「スッキリ版」を見てみましょう。コピペして動かしてみてください。
【After】良い例:Setを使ってスッキリ!
Sub GoodCode()
Dim myCell As Range
Set myCell = Worksheets("Sheet1").Range("A1")
With myCell
.Font.Bold = True ' 太字
.Font.Color = vbRed ' 文字色:赤
.Interior.Color = vbYellow ' 背景:黄色
.Value = "重要" ' 文字入力
End With
' 片付け(必須ではないです)
Set myCell = Nothing
End Sub
いかがですか?
文字数は減りましたし、何より「どこを操作しているか」が一目瞭然ですよね。
もし操作するセルが変わっても、Set myCell = … の1行を変えるだけで、あとの処理はすべて新しいセルに適用されます。修正の手間は4分の1です。
ここがポイント!
数値や文字を入れるときは x = 1 のように書きますが、セルそのもの(オブジェクト)を変数に入れるときは、必ず先頭Setをつけます。
「この変数は、ただの数字じゃなくて、もっと偉いモノ(オブジェクト)が入るぞ!」と特別扱いしてあげるイメージです。
まとめ
- 長いセル範囲には Set であだ名をつける。
- コードが短くなり、読むストレスが減る。
- 修正箇所が1箇所で済むので、ミスが激減する。
最初は「Setって書くの忘れた!」なんてこともあると思います。私も100回くらいやりました。
この書き方を習得すれば、スッキリしたコードが書けるようになっていきます。
メンテナンスも少し楽しくなっていくので、ぜひ試してみてください。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。


コメント