【VBA入門】『ActiveSheet』と『Me』の使い分けを解説

【業務効率化】VBA
スポンサーリンク

突然ですが、あなたが一生懸命書いたコードを動かしている最中にうっかりマウスで別のシートをクリックしたら…「あ!違うシートのデータが消えちゃった!」なんて経験、ありませんか?

これは、ActiveSheet(アクティブシート)を使っていることが原因であるケースが非常に多いです。

ActiveSheet = 「今、画面で見えているシート」

これ、人間で言うと「あそこにいる人」と呼んでいるようなものです。

あなたがAさんの方を向いていればAさんですが、Bさんの方を向けばBさんになってしまいますよね。

パソコンも同じです。処理中に画面が切り替わると、パソコンは「あ、今見ているのはこっちのシートか」と判断し、意図しないシートを書き換えてしまいます

これ、致命的なミスになりかねません。怖いですよね。

【業務効率化】VBAの記事を見る

救世主「Me」キーワードの正体

そこで登場するのが「Me」です。

これは、「私自身」という意味です。

Me = 「このコードが書かれている場所(自分自身)」

例えば、「請求書シート」のモジュール(シートの裏側にあるコード記述欄)や、ユーザーフォームの中に書くコードで使います。

もし「請求書シート」の中に Me と書けば、ユーザーがどのシートを見ていようと、必ず「請求書シート」のことを指します。

「あそこにいる人」ではなく、「私(請求書シート)」と名乗るわけですから、絶対に間違いようがありません。

使い分けルール

「じゃあ、全部 Me にすればいいの?」

と思うかもしれませんが、標準モジュール(Module1など)では Me は使えません コンパイルエラーになります。

使い分けをまとめるとこうなります。

  1. ユーザーフォーム・シートモジュールの場合
  • 迷わず Me を使う!
  • 絶対に参照先がブレないから。
  1. 標準モジュールの場合
  • ActiveSheet は極力使わない!
  • 代わりにWorksheets(“シート名”) と名前を指名する。

これだけで、シートの指定ミスによる事故はほぼゼロにできます。

コピペで使える!安全なコード比較

実際にコードを見てみましょう。

どちらも「A1セルに日付を入れる」コードですが、安全性が段違いです。

❌ 操作ミスしやすいコード(ActiveSheet利用)

Sub DangerCode()
    ' マクロ実行時に表示されているシートに書き込まれます
    ActiveSheet.Range("A1").Value = Date
End Sub

実行中にうっかり別のシートをクリックすると、そっちに書き込まれます…!

⭕ 安心・安全なコード(Me利用)

※これは「シートモジュール」や「ユーザーフォーム」に貼り付けてください。

Sub SafeCode_Me()
    ' どのシートが開かれていても、必ず「このコードが書かれているシート」に書き込みます
    Me.Range("A1").Value = Date
End Sub

⭕ 標準モジュールで書く場合

Sub SafeCode_Standard()
    ' シート名で指定します
    Worksheets("Sheet1").Range("A1").Value = Date
End Sub

適切なシートの指定方法を選べば、他のPC作業に支障をきたさないようにすることは可能です。

よければ上記のコードをコピペで使ってみて、ぜひ使い分けをマスターしてください。

【業務効率化】VBAの記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました