Excel 最終セルを求めて不要な行・列を削除する(2)VBAでやってみる

Excel マクロ、VBA

スポンサーリンク

前回、Excelの最終セルに関して扱った。
それを今回は、Excel VBAの場合についてはどうなるか述べていく。

Excel 最終セルを求めて不要な行・列を削除する(1)通常Excel操作

単純に最終セルにジャンプする

VBAで、Excelシートの最終セルを単純に取得するのは
Cells.SpecialCells(xlCellTypeLastCell)
を使う。

だからExcelの通常操作で
Ctrl + End
をするのと同様に、アクティブシートの最終セルにジャンプしたいなら
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Select
で良い。

さてこの場合、
SpecialCells(xlCellTypeLastCell)
でジャンプする最終セルは、下図でいうと茶色のセルとか罫線の関係でJ500000セルとなる。

実用上の最終セルを求めたい

しかし通常は最終セルとしてジャンプしたいのは、一覧表の最終点であるG6セルのはずだ。
これを「実用上の最終セル」と呼ぶことにするが、これをVBAでどう求めるかというのが今回の本題だ。

この「実用上の最終セル」の求め方に、完璧な正解と言えるものは無いはずではある。
Excelシートがもっと複雑でデータがあちこち点在している場合などは、どこを「実用上の最終セル」と言うのかは、意見が分かれるケースもあるはずだ。

今回はその解答の一つとして、何らかの文字が見つかる最終セルを探し出す手法による。
上図のG500000セルのように、色だけが付いていて文字も数式もないセルは、最終セルとしての認識から外すということだ。

ソースコード

それではソースコードを載せる。
今回は、シート上で何らかの文字があるセルを検索するのに、Findメソッドを使用している。

もっとも私は、配列とかを多用するし、セルを愚直に検索するFindメソッドはあまり好んで使用しない。
だからFindメソッドについて、今回はあれこれ述べはしない。

ただ、Findメソッドを普通に使うと結果としてRangeオブジェクト(要はセルのこと)が返ってきてそのセルにジャンプしてしまう。
だからそういう余計なジャンプとかを防ぐために、Findメソッドの最後にRowとか付けて、数値だけが結果として返るようにするというのも、他のマクロでも使える技のはず。

下のマクロで「deleteExtraRowColumn」というやつが、不要な行・列を削除する処理まで含んだ一連のマクロだ。

そしてその途中で呼び出す「findEndRC」というやつも、単純に実用上の最終セルを求めたいだけなら単体で使えるマクロだ(中に引数を入れる必要はあるが)。

スポンサーリンク