【VBAリファレンス】Excel VBAでシートの行列番号を非表示に!DisplayHeadingsプロパティを徹底解説

スポンサーリンク

### 概要

Excelで作業をしていると、シートの左端に表示される「行番号」と、上部に表示される「列見出し(A, B, C…)」が作業の邪魔に感じられることがあります。特に、マクロで作成した表を印刷したり、特定のレイアウトで表示したい場合に、これらの行列番号は不要な場合が多いでしょう。

Excel VBAを使えば、この行列番号を簡単に非表示にすることができます。本記事では、Excel VBAの`DisplayHeadings`プロパティに焦点を当て、その使い方、具体的なコード例、そして実務での活用方法について、ベテラン講師の視点から詳しく解説します。このプロパティをマスターすれば、より洗練されたExcelシートの表示制御が可能になります。

### 詳細解説:DisplayHeadingsプロパティとは

`DisplayHeadings`プロパティは、Excelのシートオブジェクト(`Worksheet`オブジェクト)が持つプロパティの一つです。このプロパティを`True`に設定すると行列番号が表示され、`False`に設定すると非表示になります。

**構文:**

expression.DisplayHeadings

* `expression`: `Worksheet`オブジェクトを表す変数、または`Sheets(“シート名”)`や`ActiveSheet`などのオブジェクト指定。

**プロパティの値:**

* `True`: 行番号と列見出しを表示します。(デフォルト設定)
* `False`: 行番号と列見出しを非表示にします。

このプロパティは、シート単位で設定されます。つまり、特定のシートの行列番号だけを非表示にしたり、逆に表示させたりすることが可能です。

#### どのシートに適用できるのか?

`DisplayHeadings`プロパティは、標準シート(Worksheet)に適用できます。グラフシートやダイアログシートなど、他の種類のシートには適用できません。

#### 実行タイミング

このプロパティは、VBAコードの実行中にいつでも変更できます。マクロの開始時に非表示にし、終了時に元に戻す、といった制御も可能です。

### サンプルコード

ここでは、`DisplayHeadings`プロパティを使った具体的なVBAコード例をいくつかご紹介します。

#### 1. アクティブシートの行列番号を非表示にする

現在アクティブになっているシートの行列番号を非表示にする最も基本的なコードです。

Sub HideHeadings_ActiveSheet()
    ' アクティブシートの行列番号を非表示にする
    ActiveSheet.DisplayHeadings = False
    MsgBox "アクティブシートの行列番号を非表示にしました。", vbInformation
End Sub

このコードを実行すると、現在開いているアクティブなシートの行番号と列見出しが消えます。

#### 2. 特定のシートの行列番号を非表示にする

シート名を指定して、そのシートの行列番号を非表示にする方法です。「Sheet1」という名前のシートの行列番号を非表示にする例です。

Sub HideHeadings_SpecificSheet()
    Dim ws As Worksheet

    ' 非表示にしたいシートを設定
    On Error Resume Next ' シートが存在しない場合のエラーを回避
    Set ws = ThisWorkbook.Sheets("Sheet1")
    On Error GoTo 0

    If Not ws Is Nothing Then
        ' シートの行列番号を非表示にする
        ws.DisplayHeadings = False
        MsgBox ws.Name & " の行列番号を非表示にしました。", vbInformation
    Else
        MsgBox "指定されたシートが見つかりませんでした。", vbExclamation
    End If
End Sub

`On Error Resume Next` を使用しているのは、指定したシート名が存在しない場合にエラーでマクロが停止するのを防ぐためです。`If Not ws Is Nothing Then` でシートが正しく取得できたか確認しています。

#### 3. 全てのシートの行列番号を非表示にする

ブック内の全てのシートに対して、行列番号を非表示にするコードです。

Sub HideHeadings_AllSheets()
    Dim ws As Worksheet

    ' ブック内の全てのシートをループ処理
    For Each ws In ThisWorkbook.Worksheets
        ' シートの行列番号を非表示にする
        ws.DisplayHeadings = False
        Debug.Print ws.Name & " の行列番号を非表示にしました。" ' イミディエイトウィンドウに表示
    Next ws

    MsgBox "ブック内の全てのシートの行列番号を非表示にしました。", vbInformation
End Sub

`ThisWorkbook.Worksheets` コレクションを使うことで、ブックに含まれる全ての標準シートを一度に処理できます。

#### 4. 行列番号を一時的に非表示にし、元に戻す

マクロ処理の間だけ行列番号を非表示にし、処理が終わったら元に戻す、というシナリオは非常に実用的です。

Sub ProcessWithHiddenHeadings()
    Dim ws As Worksheet
    Dim originalDisplayHeadings As Boolean

    ' 対象シートをアクティブシートとする(必要に応じて変更)
    Set ws = ActiveSheet

    ' 現在の設定を一時保存
    originalDisplayHeadings = ws.DisplayHeadings

    ' 行列番号を非表示にする
    ws.DisplayHeadings = False
    Debug.Print "行列番号を非表示にしました。"

    ' --- ここに、行列番号を非表示にした状態で行いたい処理を記述 ---
    ' 例: 特定の範囲にデータをコピーする、グラフを作成するなど
    MsgBox "行列番号非表示状態で、本来の処理を実行します。OKをクリックして続行してください。", vbInformation

    ' 処理が終わったら、元の設定に戻す
    ws.DisplayHeadings = originalDisplayHeadings
    Debug.Print "行列番号を元の設定に戻しました。"

    MsgBox "処理が完了し、行列番号を元の状態に戻しました。", vbInformation
End Sub

このコードでは、処理開始前の `DisplayHeadings` の状態を `originalDisplayHeadings` 変数に保存し、処理終了後にその値に戻しています。これにより、ユーザーが意図しない状態のままシートが残ってしまうことを防ぎます。

#### 5. 特定の条件で表示/非表示を切り替える

例えば、特定のシート名の場合のみ行列番号を非表示にするといった制御も可能です。

Sub ConditionalHideHeadings()
    Dim ws As Worksheet

    ' 非表示にしたいシート名のリスト(例)
    Const SHEETS_TO_HIDE As String = "Report1,Summary,DataEntry"
    Dim sheetNames() As String
    Dim nameToHide As Variant

    ' カンマ区切り文字列を配列に変換
    sheetNames = Split(SHEETS_TO_HIDE, ",")

    ' ブック内の全てのシートをループ
    For Each ws In ThisWorkbook.Worksheets
        ' 非表示リストに含まれるシート名かチェック
        For Each nameToHide In sheetNames
            If Trim(nameToHide) = ws.Name Then
                ws.DisplayHeadings = False
                Debug.Print ws.Name & " の行列番号を非表示にしました。"
                Exit For ' 一致したら、このシートのチェックは終了
            End If
        Next nameToHide
    Next ws

    MsgBox "指定されたシートの行列番号を非表示にしました。", vbInformation
End Sub

`Split`関数を使って、カンマ区切りのシート名リストを配列に変換し、各シート名と比較しています。`Trim`関数で余分な空白を取り除いています。

### 実務アドバイス

`DisplayHeadings`プロパティは便利ですが、使用する際にはいくつか注意点があります。

#### 1. ユーザーへの配慮

行列番号は、Excelの基本的なUIの一部です。これを突然非表示にすると、特にExcelに慣れていないユーザーは混乱する可能性があります。

* **マクロ実行前の告知:** マクロを実行する前に、何が起こるのか(行列番号が消えること)をユーザーに伝えると親切です。
* **元に戻す機能:** マクロの終了時に必ず元の設定に戻すか、ユーザーが手動で元に戻せるような導線を用意することが重要です。
* **一時的な非表示:** 印刷用シートや特定のレポート作成時など、本当に必要な場合にのみ非表示にするのが賢明です。

#### 2. 印刷時の挙動

`DisplayHeadings`プロパティを`False`に設定すると、行列番号は非表示になるだけでなく、印刷プレビューでも表示されなくなります。もし、印刷時に特定のヘッダーやフッターのように行列番号を表示したい場合は、このプロパティだけでは実現できません。その場合は、印刷設定で「行番号と列見出しを印刷する」オプションを有効にする必要があります。VBAからこの印刷設定を変更するには、`ActiveSheet.PageSetup.PrintHeadings = True` のように `PageSetup` オブジェクトの `PrintHeadings` プロパティを使用します。

#### 3. 複数シートへの適用時の注意点

* **ブック全体の処理:** `For Each ws In ThisWorkbook.Worksheets` を使用する際は、標準シート以外のシート(グラフシートなど)が含まれているとエラーになる可能性があります。必要に応じて、`If ws.Type = xlWorksheet Then` のような条件分岐を追加しましょう。
* **シート保護との兼ね合い:** シートが保護されている場合、`DisplayHeadings` プロパティを変更できないことがあります。プロパティを変更する前に、シート保護を解除する必要があるかもしれません。

' シート保護の解除例
If ws.ProtectContents Then
    ws.Unprotect Password:="YourPassword" ' パスワードが必要な場合
End If

' ... DisplayHeadings の設定 ...

' シート保護の再設定例
ws.Protect Password:="YourPassword" ' パスワードが必要な場合

#### 4. 開発者ツールとしての活用

デバッグ作業などで、一時的にシートの見た目をシンプルにしたい場合に `DisplayHeadings = False` は非常に役立ちます。コードの実行結果を純粋なデータとして確認したいときなどに便利です。

### まとめ

Excel VBAの`DisplayHeadings`プロパティは、シートの行番号と列見出しをプログラムで制御するための強力なツールです。このプロパティを`False`に設定することで、シートの表示をすっきりとさせ、特定の目的に合わせたレイアウトを実現できます。

本記事では、以下の点について解説しました。

* `DisplayHeadings`プロパティの基本的な仕組みと構文
* アクティブシート、特定シート、全シートへの適用方法
* 処理前後の設定を元に戻すための実践的なコード
* 実務で役立つ注意点と応用的な使い方

このプロパティを理解し、適切に活用することで、Excel VBAによるシート操作の幅が大きく広がります。ぜひ、ご自身の業務で試してみてください。より洗練された、ユーザーフレンドリーなExcelアプリケーションを作成するための一助となれば幸いです。

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