🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel VBA のコメント — コードのコメントアウト、アポストロフィのルール、そして決して実行されない理由

|

Excel VBA のコメント — コードのコメントアウト、アポストロフィのルール、そして決して実行されない理由

TL;DR — 行の先頭にアポストロフィ ' を置くと、それ以降はすべて コメント になります。 コンパイラはマクロが走る前にそれを削除します。仕事は 2 つ — メモを残すか、コードを消さずに 一時的に無効化する かです。/* */ のようなブロック構文はありません。ブロック全体をオフにするには、 各行の先頭に ' を付けます(Edit toolbar の Comment Block ボタンがまとめてやってくれます)。 コメントは なぜ を書き、決して 何を は書かない — コードをなぞり直すだけのコメントは、コードが 変わった瞬間に嘘へと変わります。

Sub CommentBasics()
    ' この行はまるごとメモ — コンパイラは無視する
    Dim total As Long
    total = 100            ' 末尾コメントは「何を」ではなく「なぜ」を説明する

    ' MsgBox total         <- 無効化しただけで削除ではない: ' を消せば元に戻る
End Sub

この記事で学べること

  • 考え方の軸 — コメントは、決して実行されないと保証された唯一の行
  • ソースだけに効く 3 つのトークンと、初心者がそのすべてを見くびる理由
  • アポストロフィ ' と古参の Rem、それぞれがいつ合法か
  • ブロック全体をコメントアウトする方法(と、ボタンが隠れている場所)
  • コメントが行継続を壊す理由 — そして、その罠が静かである理由
  • ソースコメントと、セルの Comment / Note オブジェクト — 別物である 2 つ
  • 意見:ピクセルに見合う唯一のコメント

考え方の軸:決して実行されない唯一の行

あなたが書く他のすべての行は、マクロへの指示です。コメントはそうではありません。VBA コンパイラは アポストロフィを見た瞬間、その行の残りを捨てます — 決して解析されず、コンパイルされず、実行されません。 このたった 1 つの保証こそがすべてであり、コメントが担う 2 つの仕事を支えています。

  1. 次に読む人間(多くの場合は未来のあなた)に 意図を説明する
  2. コードを削除せずに 無効化する — だから変更を試したあと、キーストローク 1 つで元の行を戻せる。

コメントはコンパイラから見えないので、行をコメントアウトすることは VBA で最も安全な編集です。何も 失われず、何のリスクもありません。そして、コンパイラから見えないからこそ、間違った コメントは決して 捕まりません — エラーも警告も、永遠に出ません。この 2 つを頭に入れておけば、このガイドの残りはおのずと 腑に落ちます。

マクロが決して実行しない 3 つのトークン

コメントは孤立した機能ではありません — 走っているマクロが決して実行しない、あなたが打ち込む 3 つの ものの 1 つです。これらは実行ではなく ソースコンパイル を形づくります。だからこそ初心者は 些末なものと切り捨てるのですが、実際には、保守できる VBA と腐っていく VBA を分けるのがこの 3 つです。

トークン ソースに対して何をするか 実行時のコスト
' コメント メモを残し、コンパイラが削除するコードを無効化する なし — 決して実行されない
_ 行継続 1 つの長い文を複数行に分割する なし — コンパイル前にパーサーが消し去る
Option Explicit すべての名前に宣言を強制する コンパイル 時に走るので、タイプミスはマクロが始まる前に死ぬ

3 つを使いこなせば、タイプミスは走る前に死に、300 文字の行は画面の外へスクロールして消えなくなり、 死んだコードはアポストロフィ 1 つで切り替わります。このガイドはその最初の 1 段 — 残りの 2 つは、 クリック 1 つ先にあります。

アポストロフィと Rem:アポストロフィを使う

VBA にはコメントの目印が 2 つありますが、両者は対等ではありません。

' アポストロフィはどこでも効く — 行全体でも、行の末尾でも
x = 5          ' この代入を説明する

Rem Rem 文は「文まるごと」としてしか効かない
x = 5 : Rem コードのあとに Rem を置くにはコロンが要る
Rem x = 5      ' <- Rem はコロンなしで行末に座れない

アポストロフィ ' は現代的で万能な目印です。行の先頭に置いても、どんな文の末尾 にぶら下げても 合法です。Rem は初期の BASIC の名残 — これは なので、文の先頭に来なければならず、コードの あとに置くにはコロンの区切り(x = 5 : Rem note)が要ります。新しいコードで Rem に手を伸ばす理由は ありません。アポストロフィを覚え、Rem の存在は忘れてしまいましょう — 他人のマクロで受け継いでしまう、 その 1 回を除いては。

ブロックをコメントアウトする:ボタンは隠れている

VBA には /* ... */ のブロックコメント構文が ありません。複数行を無効化するには、各行 の先頭に アポストロフィを置きます。

'    total = 0
'    For i = 1 To n
'        total = total + data(i)
'    Next i

これを手作業でやるのは面倒です。だから初心者は、問題の原因かどうかを試すためにコードを 削除 し — そして元に戻せなくなります。やめましょう。VBA エディタには Comment BlockUncomment Block の ボタンが備わっていて、選択した全行に一括でアポストロフィを付けたり外したりできます。落とし穴はこれ。 ボタンは Edit toolbar にあり、既定では表示されていません。表示 > ツール バー > 編集 で一度 表示させれば、10 行のブロックを無効化するのが「選んでクリック」だけになります。これは VBA で最も 役に立つデバッグ習慣です。理屈を試すのにコードを削除してはいけません — コメントアウトして、実行し、 それからコメントを外すのです。

静かな罠:コメントが行継続を殺す

午後を丸ごと溶かすのがこれです。_ の継続で複数行に分割された文の途中にコメントを置くことはできません。 アポストロフィが 論理的な 行を終わらせ — そして _ もろとも飲み込んでしまうからです。

' 壊れている例 — コメントが継続を食べてしまう
total = price _   ' 基本価格を足す
      + tax        ' <- "+ tax" はいまや独立した壊れた文になっている

' 正しい例 — 継続行にコメントを置かない、または上の行に置く
' 基本価格に税を足す
total = price _
      + tax

ぱっと見では何もおかしく見えず、エラーメッセージ — + tax の行の Expected: end of statement、あるいは 黙って変わった結果 — は間違った場所を指します。ルールはこう。_ 行継続とコメントは、同じ物理行を 共有できません。説明は文の上の 専用の コメント行に置きましょう。(ここは、3 つのソーストークンの うち 2 つがぶつかる継ぎ目です。行継続のガイド がもう半分を扱っています。)

ソースコメントと、セルの Comment オブジェクト

まったく別の 2 つのものが comment という言葉を共有していて、検索してここへたどり着く人は、その どちらかを指しています。

  • ソースコメント(この記事)— VBA コード の中のアポストロフィです。エディタの中に住み、 コードを説明したり無効化したりし、ワークシートには決して現れません。
  • セルの Comment / Note — グリッド上の セル に貼りつく黄色いメモで、コードでは Range("A1").AddComment "text"(旧式)や Range("A1").NoteText / 現代のスレッド化された Comments API で追加します。これはシート上のデータで、ファイルを開いた誰にでも見えます。

コード に注釈をつけに来たのなら、そのまま読み進めてください — 上のすべてが当てはまります。マクロから セル にメモを落とすつもりだったなら、それは AddComment / NoteText のオブジェクトモデルで、まったく 別の話題です。この 2 つが混同されやすいのは、まさに Excel が同じ言葉を使い回したからです。

意見:なぜを書き、何をは決して書かない

ほとんどのコメントはノイズで、最悪のものは積極的に有害です。i = i + 1 ' i に 1 を足す は、コードが すでに言っていること以上を何も教えてくれません。そして誰かがこの行を i = i + step に変えた日、その コメントは、どんなコンパイラも決して指摘しない になります。コードをなぞり直すだけのコメントは、 コードそのものより速く腐ります。

ピクセルに見合うコメントは、コードには 言えない ことを言うコメントです。

  • 何を、ではなく、なぜ' 仕入先は日付をテキストで送ってくる。比較する前にパースする は判断を説明します。
  • 単位と前提' 金額はドルではなくセント単位 は本物のバグを防ぎます。
  • エッジケースと落とし穴' 空のシートでは Empty を返す — 呼び出し側で処理すること
  • 理由と日付つきの無効化コード' 2026-09: リトライを削除。API はもう安定している

そして多くの場合、最良のコメントは「コメントなし」です。totalCents という名前の変数は total ' セント単位 に勝りますし、Option Explicit をオンにして本物の宣言を書くほうが、一段落の 散文よりも意図をはっきり示します。コメントが少なくて済むようにコードを書き、残す数少ないコメントは なぜ についてのものにしましょう。

本当の仕事が、注釈づけではなくマクロの理解のとき

コメントは、すでに手元にあるコードを読む助けになります。しかし半分の場合、実際の仕事は逆です — あなたは、 コメントのない 300 行の受け継いだマクロをにらみつけ、変更に踏み切る前にそれが 何をする のかを 解き明かそうとしています。1 行ずつ読み、Debug.Print を撒き、ロジックを手で組み立て直す作業は、変更 そのものより高くつくことがあります。ExcelMaster なら、それを飛ばせます。欲しいものを普通の言葉で説明するだけ — 「この列をきれいにして、重複を消して、 残りを月ごとに合計して」 — すれば、まずファイルをバックアップしたうえで、コードを書いて実行します。 他人の無注釈な VBA を解読しなくても結果が手に入り、生成されるコードは実際に読めるくらい小さいのです。

よくある質問

VBA で行をコメントアウトするには?

行の先頭(またはその行のどこでも — アポストロフィ以降はすべて無視されます)にアポストロフィ ' を 置きます。複数行を一度にコメントアウトするには、それらを選択して Edit toolbar の Comment Block を クリックします(表示 > ツール バー > 編集 で表示)。選択した全行にアポストロフィが付きます。

VBA のアポストロフィと Rem の違いは何ですか?

どちらもコメントを示しますが、アポストロフィ ' はどこでも効きます — 行の先頭でも、文の末尾に ぶら下げても — 一方 Rem は文であり、文の先頭に来なければならず、コードのあとに続けるにはコロンが 要ります(x = 5 : Rem note)。アポストロフィを使いましょう。Rem はレガシーコードの中でしか 生き残りません。

VBA でブロック全体をコメントアウトするには?

/* */ のブロック構文はありません。行を選択して Edit toolbar の Comment Block ボタンで各行に アポストロフィを付け、Uncomment Block で外します。ボタンが見当たらなければ 表示 > ツール バー > 編集 でツールバーを表示しましょう。

コメントを足すとコードが壊れるのはなぜですか?

ほぼ必ず、_ 行継続で終わる行にコメントを置いたからです。アポストロフィが論理的な文を終わらせて _ を 飲み込むので、次の行が独立した壊れた文になります。コメントを、継続された文の上の専用行へ移しましょう。

VBA のコメントとセルのコメントは同じですか?

いいえ。VBA(ソース)コメントはコード中のアポストロフィで、エディタの中にだけ存在します。セルの Comment / Note はワークシートのセルに付く黄色い注釈で、コードでは Range.AddCommentRange.NoteText で追加し、グリッド上に見えます。名前は同じですが、無関係です。

検証環境

検証環境: Excel 365 (Windows 11), VBA 7.1 — 最終確認 2026-09-06.

関連ガイド: VBA Option Explicit · VBA Line Continuation · VBA Dim · VBA Debug.Print · VBA MsgBox