こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
突然ですが、こんな想像をしたことはありませんか?
- 「一生懸命書いたマクロが、誰かが行を追加したせいで動かなくなった…」
- 「エラーの原因を探したら、セルの場所がずれていただけだった…」
終わってみれば大したことないんですが、それまでが大変なんですよね。
今日は、そんな「セルの位置ずれによるエラー」を0(ゼロ)にするテクニックの1つ「セルの名前定義」を紹介します。
「場所」ではなく「名前」で呼ぶ
通常、VBAでセルを指定するときは、以下のように書くことが多いですよね。
Range("B2").Value = 100
これ、「B列の2行目」という「住所」を指定しています。
でも、もし誰かがA列に行を挿入したら?B2にあったデータはC2に移動してしまいます。
すると、VBAは空っぽになった新しいB2を見に行き、「あれ?データがない!」とエラーや計算ミスを起こすのです。
これを防ぐ方法の1つが今回紹介する「名前定義」です。
セルに特定のあだ名(名前)をつけておけば、そのセルがどこに移動しても、VBAは必ずそのあだ名を追いかけてくれます。
たった3秒!設定は超かんたん
VBAを書く前に、Excelシート上で準備をします。
- 名前をつけたいセルを選択する(例:消費税率が入っているセル)。
- 数式バーの左にある「名前ボックス」をクリックする。
- 好きな名前(例:TaxRate)を入力してEnterキーを押す。
これで、そのセルはもう「B2」ではなく「TaxRate」という固有の存在になりました。
VBAでの書き方(コピペOK)
では、実際にVBAでどう書くか見てみましょう。
とても直感的になります。
×セルを指定する書き方
Sub OldStyle()
Dim tax As Double
tax = Range("B2").Value
MsgBox "現在の税率は " & tax & " です"
End Sub
B2が消費税率だなんて、このコードからは読み取れませんよね
◎ 名前定義を使った書き方
Sub NewStyle()
Dim tax As Double
tax = Range("TaxRate").Value
MsgBox "現在の税率は " & tax & " です"
End Sub
いかがでしょうか?
Range(“名前”) と書くだけ。ダブルクォーテーションで囲む必要があります。
これだけでTaxRateという名前なら、セルがどこに移動しても大丈夫です。
この方法のメリット
この「名前定義」を使うと、以下のメリットがあります。
- メンテナンス時間:ほぼ0秒
レイアウト変更があってもコードを書き直す必要がありません。 - コードの可読性:120%アップ
Range(“C5”) よりも Range(“GokeiKingaku”) の方が、何をしているか一目瞭然ですよね。
最後に
「いかに自分が楽をするか」「いかにミスを防ぐか」を考えて、こういう地味な機能を使うことが多いです。
最初は「B2」と書く方が早く感じるかもしれません。
でも、未来の自分や他人がメンテナンスする際に冷や汗をかかないために、よければ「名前定義」を使ってみてください。
「言われた通りに作るだけ」から「運用まで考えられる」への第一歩になるはずです。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。


コメント