非表示の行や列を探すには

Excelで大量のデータを扱っていると、「どこかに非表示の行や列があるはずだけど見つからない…」という経験はありませんか?

Excelの非表示機能は便利ではありますが、見た目では非表示になっていることが分かりにくいため探すのが結構大変です。手作業で1行ずつ確認するのは非効率ですし、見落としのリスクもあります。

そこで、ここではVBAを使って非表示になっている行や列を見つける方法を紹介します。

行と列の非表示はコードとしては大体同じですが、実際に使う場合は「列だけ」もしくは「行だけ」の場合が多いため、それぞれを分けて紹介します。

非表示を判定する基本:Hiddenプロパティ

VBAで行や列の非表示状態を確認するには、Hiddenプロパティを使います。

  • Rows(行番号).Hidden = True → 非表示
  • Rows(行番号).Hidden = False → 表示中
  • Columns(列番号).Hidden = True → 非表示
  • Columns(列番号).Hidden = False → 表示中

このプロパティを使ってシート全体をチェックすることで、非表示箇所を特定できます。

非表示の行を探す方法

非表示の行を探すには、「Rows(行位置).Hidden」プロパティの値を確認します。HiddenプロパティがTrueの場合は非表示、Falseの場合が表示と判定します。

以下の関数はアクティブシートのセル編集範囲の先頭行目から最終行までで、非表示の行があればイミディエイトウィンドウに出力します。

UsedRangeオブジェクトを使って検索範囲を編集セルしている箇所に限定しています。単純に1行目から1048576行目まで検索すると性能が良いPCでも数秒程度は掛かりますが、この方法は編集セル範囲に限定されることによりループ回数がその行数分しか行わないため高速に終了します。

非表示の列を探す方法

非表示の列を探すには、「Columns(列位置).Hidden」プロパティの値を確認します。Hiddenプロパティは行の場合と同様で、Trueの場合は非表示、Falseの場合が表示と判定します。

以下の関数はアクティブシートの1列目から一番右の列までで、非表示の列があればイミディエイトウィンドウに出力します。

上の行の場合と異なりUsedRangeは使っていませんが、Excelの列数は少ないためそこまで速度低下はないことと、列の場合はUsedRangeを使うと範囲外の非表示列を検出できない問題があるため1列目から最終列まで検索する方法を採用しています。

関数が2つありますが、2つ目の関数は列の位置を英字で出力したい場合のための、列数字→英字の変換関数です。変換が不要であればコメントアウトしている数字での出力でOKです。

非表示の行・列を一括で再表示する

検出した非表示箇所をすべて表示状態に戻したい場合は、以下のようにHidden = Falseを設定します。