1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

知らないと怖いExcelVBAの穴11~Book / Sheet オブジェクトの省略が招く事故~

Last updated at Posted at 2026-01-08

1. はじめに

Excel VBAは導入しやすく、実務でも使用しやすい言語です。
そして比較的ゆるい言語でもあります。

その「ゆるさ」は、
初心者にとっては優しさであり、
一方で実務では 処理対象が曖昧なままコードが動いてしまう
原因にもなります。

本記事では、
Excel VBAでよく行われがちな
Workbook / Worksheet オブジェクトの省略が、
なぜ実務で事故につながりやすいのかを整理します。

2. マクロの記録について

多くの人がVBAに触れる最初の入口は、「マクロの記録」 でしょう。

マクロを記録すると、次のようなコードが生成されます。

VBA
Sub macro1()
    
    Range("A1").Select
    Selection.Value = "TEST"

End Sub

このコードは動きますし、学習初期では「正しい書き方」に見えます。

しかしここに、実務で事故を生む前提が含まれています。

3. オブジェクトが省略されると何が起きるか

RangeCells
Workbook / Worksheet を指定せずに書いた場合、
VBAは暗黙的に次の対象を使います。

  • Range / Cells
     → ActiveSheet
  • Worksheets
     → ActiveWorkbook

つまり、

Range("A1").Value = "TEST"

は実際には、

ActiveSheet.Range("A1").Value = "TEST"

同義 です。

4. マクロの記録ではできないこと

マクロの記録は、

「今ユーザーが操作している対象」

をそのまま記録します。

  • アクティブなブック
  • 表示中のシート
  • 選択中のセル

これらは 画面操作としては十分 ですが、
ロジックとしては不十分 です。

マクロの記録は
「人の操作」を残す機能であり、
「安全な自動処理」を作る機能ではありません。

実務では操作をコード化して記述方法を確認するための機能であり、
それだけで完成するものではありません。

5. 実務で事故になる典型パターン

実務では次のような状況が普通に起きます。

  • ユーザーが別シートを表示したまま実行
  • 別ブックをアクティブにした状態で実行
  • マクロ実行中に画面を操作してしまう

この状態でオブジェクト省略コードがあると、

  • 想定外のシートを書き換える
  • 別ブックのデータを破壊する

といった事故につながります。

6. 事故につなげないための書き方①

オブジェクトを明示する

マクロ記録のコードは、
次のように書き換えられます。

ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = "TEST"

これで、

  • 対象ブック
  • 対象シート
  • 対象セル

がすべて明示されます。
ただし、毎度記述するのではコードが長くなりすぎる問題があるので、
変数を用いるのが一般的です。

7. 事故につなげないための書き方②

オブジェクトを変数に保持する

実務では、オブジェクトを変数に持たせるのが基本です。

VBA
Sub sample()
    Dim wb As Workbook
    Dim ws As Worksheet
    
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet1")
    
    ws.Range("A1").Value = "TEST"
End Sub

この書き方にすると、

  • 処理対象が固定される
  • 読みやすくなる
  • 修正に強くなる

というメリットがあります。
もちろん他のブック、シートの状態に左右されたり、
起動中にユーザーが別の操作をしたとしても影響されません。

8. まとめ

  • マクロの記録は省略コードを生成する
  • 省略コードは Active 状態に依存する
  • Activeの指定は実務では信用できない
  • オブジェクトを明示し、変数に持たせる
  • マクロの記録は「下書き」、実務コードは必ず書き直す

これを意識するだけで事故は大きく減ります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?