【Excel VBA】複数行をまとめてコメントアウトする方法(一括・一斉に・ブロックコメント・コメント解除も) | モアイライフ(more E life)

【Excel VBA】複数行をまとめてコメントアウトする方法(一括・一斉に・ブロックコメント・コメント解除も)

Excelのスキルアップ
本サイトでは記事内に広告が含まれています

エクセルVBAでコードを書いていると、デバッグや一時的な処理の無効化のために複数行をまとめてコメントアウトしたい場面が頻繁に出てきます。

1行ずつ手動でシングルクォート(’)を追加していくのは手間がかかり、行数が多いほど作業時間も増えてしまいます。

VBAには複数行を一括でコメントアウトする専用の機能が用意されており、使い方を覚えておくと開発効率が大きく向上します。

この記事では【Excel VBA】複数行をまとめてコメントアウトする方法(一括・ブロックコメント・コメント解除も)について解説していきます。

ポイントは

・VBEのツールバーから「コメントブロック」ボタンで一括コメントアウトできる
・ツールバーに「コメントブロック」が表示されていない場合はカスタマイズで追加する
・コメント解除も同様に「非コメントブロック」ボタンで一括解除できる

です。

それでは詳しく見ていきましょう。

 

 

スポンサーリンク

VBAで複数行をコメントアウトする基本【コメントブロック機能】

VBAのコメントアウトは1行ずつ行頭にシングルクォート(’)を追加することで実現しますが、複数行を対象にする場合は手作業では非効率です。

VBE(Visual Basic Editor)には複数行を選択して一括でコメントアウトできる「コメントブロック」機能が標準で搭載されています。

この機能を使えば10行でも20行でも、選択するだけでまとめてコメントアウトが完了します。

まず、今回解説で使用するサンプルコードを確認しましょう。

Sub SampleMacro()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Range("A1").Value = "マグロ"
    ws.Range("A2").Value = "カツオ"
    ws.Range("A3").Value = "ハラス"
    ws.Range("B1").Value = 1200
    ws.Range("B2").Value = 800
    ws.Range("B3").Value = 980
End Sub

Sheet1のA列に商品名、B列に価格を書き込む処理を持つこのコードを元に解説します。

 

 

コメントブロックボタンをツールバーに追加する方法

VBEを開いた直後の状態では、コメントブロックボタンが表示されていない場合があります。

その場合はまずツールバーのカスタマイズで追加する必要があります。

VBEのメニューバーから「表示」→「ツールバー」→「編集」を選択すると、編集ツールバーが表示されます。

この編集ツールバーの中に「コメントブロック」と「非コメントブロック」の2つのボタンが含まれています。

ツールバーが表示されるとVBE画面上部にボタン群が追加され、以降はワンクリックで一括コメントアウトが実行できる状態になります。

 

【ポイント】VBEを初めて使う場合は編集ツールバーが非表示になっていることが多いです。
「表示」→「ツールバー」→「編集」の手順でツールバーを表示しておくと、コメントアウト作業だけでなくインデントの整理なども効率化できます。

 

 

複数行を選択してコメントブロックを実行する手順

コメントブロックの使い方はシンプルで、対象の行をマウスまたはキーボードで選択してからボタンを押すだけです。

まずVBE上でコメントアウトしたい行の先頭から末尾までをドラッグして選択します。

行全体を選択する必要はなく、対象行のどこかにカーソルが触れていれば問題ありません。

選択が完了したら編集ツールバーの「コメントブロック」ボタンをクリックします。

このマクロを実行すると、選択したすべての行の行頭に自動的にシングルクォート(’)が追加された状態になります。

たとえばサンプルコードのws.Range行を4行まとめて選択してコメントブロックを実行すると、以下のような状態になります。

処理前 処理後
ws.Range(“A1”).Value = “マグロ” ‘ws.Range(“A1”).Value = “マグロ”
ws.Range(“A2”).Value = “カツオ” ‘ws.Range(“A2”).Value = “カツオ”
ws.Range(“B1”).Value = 1200 ‘ws.Range(“B1”).Value = 1200
ws.Range(“B2”).Value = 800 ‘ws.Range(“B2”).Value = 800

行頭にシングルクォートが追加されたことでVBAはこれらの行をコメントと認識し、マクロ実行時に処理がスキップされます。

コードは残ったままなので、後から復元したい場合も元の記述がそのまま確認できる状態です。

 

【ポイント】行を選択する際は完全に行全体を選択していなくても構いません。
対象行のどこか1文字でも選択範囲に含まれていればコメントブロックの対象になります。

 

 

VBAで複数行のコメントアウトを一括解除する方法【非コメントブロック】

コメントアウトした行を元に戻したい場合は、「非コメントブロック」ボタンを使うことで一括解除できます。

手作業で1行ずつシングルクォートを削除していく必要はありません。

 

 

非コメントブロックの使い方

使い方はコメントブロックとまったく同じ手順です。

解除したいコメント行を選択してから、編集ツールバーの「非コメントブロック」ボタンをクリックします。

このマクロを実行すると、選択した行の行頭にあるシングルクォートがすべて自動的に削除され、通常のコードとして実行できる状態に戻ります。

先ほどコメントアウトした4行を選択して非コメントブロックを実行すると、行頭の(’)がすべて取り除かれ、元のコードが復元された状態になります。

コメントアウトと解除を素早く切り替えられるため、デバッグ作業での特定処理の有効・無効の切り替えが非常にスムーズになります。

 

 

コメント行が混在している場合の挙動

選択範囲の中にすでにコメントアウトされている行とそうでない行が混在している場合、コメントブロックを実行するとすべての行に一律でシングルクォートが追加されます。

つまり、すでにコメント行だった行には二重にシングルクォートが付いてしまうことがあります。

この場合は非コメントブロックで解除すると二重になっていたシングルクォートのうち1つだけが削除され、元のコメント行の状態に戻ります。

混在している範囲を一括処理する際は処理前の状態をよく確認してから実行することをおすすめします。

【ポイント】コメントと通常コードが混在する範囲に対してコメントブロックを実行すると、コメント行にさらにシングルクォートが追加されてしまいます。
意図しない二重コメントを避けるため、範囲の選択には細心の注意を払いましょう。

 

 

VBAで手動コメントアウトをコードで自動化する方法

VBEのボタンを使わずに、VBAコード自体でコメントアウト状態を管理したい場面もあります。

たとえばデバッグ用の処理を本番環境では自動的にスキップするような仕組みを作りたい場合などが該当します。

このような場合はコメントアウトではなく、フラグ変数を使って処理のON・OFFを切り替える方法が実用的です。

 

 

フラグ変数で処理のON・OFFを切り替えるコード

Sub SampleWithFlag()
    Dim ws As Worksheet
    Dim debugMode As Boolean
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    debugMode = False  'Trueにするとデバッグ処理が実行される
    
    ws.Range("A1").Value = "マグロ"
    ws.Range("A2").Value = "カツオ"
    ws.Range("A3").Value = "ハラス"
    
    If debugMode Then
        MsgBox "A1の値:" & ws.Range("A1").Value
        MsgBox "A2の値:" & ws.Range("A2").Value
        MsgBox "A3の値:" & ws.Range("A3").Value
    End If
End Sub

このマクロの動作を詳しく説明します。

「Dim debugMode As Boolean」でBoolean型の変数debugModeを宣言しています。

Boolean型はTrueまたはFalseの2値だけを格納できる型で、処理の有効・無効を管理するフラグに最適です。

「debugMode = False」でフラグをFalseに設定しているため、通常実行時はIfブロック内のMsgBox処理がすべてスキップされます。

デバッグが必要になったときは「debugMode = True」に書き換えるだけで、コードを変更せずにデバッグ用のメッセージボックスが表示されるようになります。

このマクロをdebugMode = Falseの状態で実行すると、A1にマグロ・A2にカツオ・A3にハラスが書き込まれるだけでメッセージボックスは一切表示されない状態になります。

debugMode = Trueに変更して実行した場合は、書き込み処理の後に各セルの値を確認するメッセージボックスが順番に3回表示された状態になります。

コメントアウトと異なり、フラグの値を変えるだけで動作を切り替えられるため、コードの可読性と保守性が高まります

【ポイント】デバッグ専用の処理はコメントアウトで管理するよりもフラグ変数で管理する方が安全です。
コメントアウトの解除忘れによって意図せずデバッグ処理が本番で実行されるリスクを防ぐことができます。

 

 

VBAでコメントアウトをショートカットキーで効率化する方法

VBEにはコメントアウト専用のショートカットキーはデフォルトでは設定されていませんが、マクロにショートカットを割り当てることで擬似的に実現できます。

また、よく知られていないもののVBEの編集ツールバーのボタンにはキーボードからアクセスする方法もあります。

 

 

Remキーワードによるコメントアウト

VBAではシングルクォート(’)のほかに「Rem」キーワードを使ってコメントを記述することもできます。

Remはリマークの略で、行頭にRemと記述するとその行全体がコメントとして扱われます。

ただし、Remはシングルクォートと異なり行の途中には使えないという制限があります。

現在のVBA開発ではシングルクォートが主流で、Remが使われる場面はほとんどありませんが、古いコードを読む際に知っておくと役立ちます。

 

コメントアウトの活用シーンと注意点

コメントアウトが特に役立つのは、新旧2つの処理を比較しながら開発する場面です。

古い処理をコメントアウトして残しておき、新しい処理と並べて動作を確認することで、安全にリファクタリングを進めることができます。

ただし、コメントアウトしたコードを長期間放置すると、コードが冗長になり可読性が低下する原因になります。

最終的に不要と判断したコードは削除し、必要なものはGitなどのバージョン管理ツールで履歴として残す運用が理想的です。

【ポイント】コメントアウトしたコードをそのまま残し続けるのは可読性の観点から好ましくありません。
デバッグ目的で一時的にコメントアウトした箇所は、作業完了後に削除するか正式なコメントに書き直す習慣をつけましょう。

 

 

まとめ VBAで一括コメントアウトする方法(一括・一斉に・ブロックコメント・コメント解除も)

Excel VBAで複数行をまとめてコメントアウトする方法をまとめると

・コメントブロック:VBEの「表示」→「ツールバー」→「編集」でツールバーを表示し、対象行を選択して「コメントブロック」ボタンをクリック
・コメント解除:同じツールバーの「非コメントブロック」ボタンで選択行のコメントを一括解除できる
・混在時の注意:コメント行と通常行が混在する範囲に実行すると二重シングルクォートが発生する場合があるため、範囲選択を慎重に行う
・フラグ変数による代替:デバッグ用処理の有効・無効管理はコメントアウトよりBoolean型フラグで管理する方が保守性が高い
・Remキーワード:シングルクォートと同様の働きをするが現在は主流でなく、古いコードの読解時の知識として覚えておく

コメントブロック機能を使いこなすだけで、VBAの開発・デバッグ作業のスピードが大きく変わります。

まずはVBEの編集ツールバーを表示させることから始め、コメントブロックと非コメントブロックの両方のボタンの場所を確認しておきましょう。

長期的な保守を見据えた開発では、コメントアウトの多用を避けフラグ変数を活用する設計を意識することで、読みやすく管理しやすいコードが書けるようになります。

ぜひ今回紹介した方法を日々の開発作業に取り入れてみてください。

コメント

スポンサーリンク
タイトルとURLをコピーしました