VBA(エクセルのマクロ)で作業を自動化する時、多くの場合最終行と最終列を知る必要があるよね
最初に最終行・列を取得しない場合なら、使用セルをカウントアップして空白セルまでループしていく等
通常のリストやテーブルであれば、1行目が項目で1列目はシリアル番号であったり日付であったりで、更新していく度に1行目、1列目はカウントアップして埋まり(いわゆるインクリメント)、空白セルができたりしないよね
でも、マクロの特性を知らない使用者が、なんらかの理由で1行目、1列目セルの途中の値を消去してしまうという事が起こり得る
マクロ作成者であれば、1行目、1列目セルの削除が必要となった場合でも、「削除済み」と入力する等の対策をとるが、使用者がそこまで考えてくれるとは限らない
そんな時によく用いるのが、エクセルの最終行からカウントダウンして降りて行って使用セルまで辿り着く方法
じゃあこんな場合どうだろう
1行目、1列目の最終セル範囲外に値が入力されている場合(画像のD6とF2セル)
ひねくれ過ぎかもしれないが、あり得なくもない
これで最終セルから降りてくる(カウントダウン)マクロを実行してみる
※Sub test ()を実行
6行目、6列目の値は当然見つけられないので5行5列となってしまいます
こんな時は SpecialCells メソッド(オブジェクトを返すメソッド)で引数に xlLastCell (使用している最後のセル)を指定してやればよい
ついでに行は番号だけだとさみしいので対応するアルファベットに変換した値も表示するようにした
実行してみる
※Sub test ()を実行
これで目的が果たせた
どうかな。osamushi