Excel VBA 逆引き集 | テーブルをセル範囲に戻す

Excel VBA
スポンサーリンク

テーブルをセル範囲に戻す

Excelの「テーブル(ListObject)」を通常のセル範囲へ戻すには、Unlist を使います。見た目(色・罫線・幅)をどう扱うかでコツが変わるため、初心者向けに安全テンプレートと例題で詳しく整理します。基本は ListObject.Unlist(テーブル機能の解除)、見た目も消したい場合は TableStyle を空にしてから Unlist です。


基本:テーブルを通常の範囲へ戻す

Sub TableToRange_Basic()
    'アクティブシートの1つ目のテーブルを範囲に戻す
    ActiveSheet.ListObjects(1).Unlist
End Sub
VB
  • ポイント:
    • Unlist: テーブル機能(フィルター/見出しのドロップダウン/構造化参照)を解除し、普通のセル範囲に変換します。
    • データは残る: セルの値や書式は基本的に残ります。機能だけが外れます。

見た目も初期化してから範囲へ(スタイルを外して解除)

Sub TableToRange_RemoveStyle()
    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects(1)
    tbl.TableStyle = ""   'テーブルの配色・罫線などのスタイルを解除
    tbl.Unlist            'テーブル機能を解除して通常範囲へ
End Sub
VB
  • ポイント:
    • TableStyle=””: テーブル固有のスタイル(帯色・罫線)を外してから Unlist すると、よりプレーンな見た目で通常範囲に戻せます。
    • プレーンに戻したい時: 提出用に“素の表”にしたい場合の定番手順です。

名前指定・選択セル基準で確実に操作

Sub TableToRange_ByName()
    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects("顧客データ") 'テーブル名を指定
    tbl.Unlist
End Sub

Sub TableToRange_FromActiveCell()
    Dim tbl As ListObject
    Set tbl = ActiveCell.ListObject 'アクティブセルが属するテーブル
    If Not tbl Is Nothing Then tbl.Unlist
End Sub
VB
  • ポイント:
    • 名前指定: 複数テーブルがあるシートでは名前で特定すると安全です。
    • ActiveCell.ListObject: 選択中セルのテーブルだけを解除できます。

シート内の全テーブルを一括で範囲へ戻す

Sub TableToRange_AllInSheet()
    Dim lo As ListObject
    For Each lo In ActiveSheet.ListObjects
        lo.Unlist
    Next
End Sub
VB
  • ポイント:
    • 一括解除: 数十テーブルがあっても一度に範囲へ変換できます。
    • 安全策: 先にバックアップを取るか、対象シートを限定して実行しましょう。

Unlist と Delete の違い(重要)

  • Unlist:
    • 効果: テーブル機能だけ解除し、セルのデータは通常範囲として残る。見た目も基本残る(必要に応じて TableStyle=”” で外す)。
    • 用途: 構造化参照や自動行増加などの“テーブル特性”を外したいとき。
  • Delete:
    • 効果: テーブルそのもの(セル範囲)をシートから削除。データも消える。
    • 用途: テーブルごと不要なときのみ。誤操作に注意。

例題で練習

例題1:指定テーブルのスタイルを外してから通常範囲へ

Sub Example_UnlistClean()
    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects("売上テーブル")
    With tbl
        .TableStyle = ""
        .Unlist
    End With
End Sub
VB

例題2:選択中のテーブルを範囲へ、できなければメッセージ

Sub Example_UnlistFromSelection()
    Dim tbl As ListObject
    Set tbl = ActiveCell.ListObject
    If tbl Is Nothing Then
        MsgBox "選択セルはテーブルではありません。"
    Else
        tbl.Unlist
    End If
End Sub
VB

例題3:シート上の全テーブルを一括解除(ログ付き)

Sub Example_UnlistAllWithLog()
    Dim lo As ListObject, cnt As Long
    For Each lo In ActiveSheet.ListObjects
        lo.Unlist
        cnt = cnt + 1
    Next
    MsgBox cnt & " 件のテーブルを通常範囲に戻しました。"
End Sub
VB

実務の落とし穴と対策

  • 見出しのドロップダウンが消える: テーブル解除でフィルターのUIが外れます。必要なら解除後に範囲にフィルターを設定し直してください。
  • スタイルが残る/消えるの調整: 見た目も消したいときは TableStyle=”” を先に実行。見た目を維持したいなら Unlist だけにする。
  • 誤って Delete: Delete はデータごと消えます。通常範囲に戻したいときは必ず Unlist を使う。
  • 複数テーブルの混在: 名前で特定、または ActiveCell.ListObject を使うと誤対象を避けられます。
タイトルとURLをコピーしました