Excel 横方向の数値が全て0の行を削除する(3)VBA・2次元配列で簡易的に実施する

Excel マクロ、VBA

スポンサーリンク

はじめに

Excel 横方向の数値が全て0の行を削除する方法(2)VBAを作ってみた

以前の記事で、横方向の数値が全て0の行を削除するマクロを書いた。

しかしこれ、別に間違ったソースコードでもないつもりだが、実際に会社のPCで使ってみたら、10万行程度のデータになるとキツくなった。

このマクロでは、横方向が全て0の行を見つけるたびに、律儀に1回ずつ削除するので、削除の回数が多くなると処理負荷が大きくなる。

それでも10万行程度ならイケると思っていたのだが、処理途中で固まってまともに使えないマクロとなってしまった。

処理を軽くするには、VBAの2次元配列を使えば良いと分かってはいるのだが、元々のシートの書式や数式を崩したくないとこだわって、処理が重くもっさりしたマクロになってしまった。

そこで今回は、

  • 表の見出し行が必ずA1セルから始まり1行目にある。
  • 計算式は入っていなくて値のみ。書式なども気にしなくて良い。

といった単純な表を対象にすると割り切って、2次元配列を使ってより軽快に動くマクロにしてみた。

動作イメージ

では簡単に、マクロの動作イメージを。
マクロを起動すると、セル範囲を選ばせるInputBoxが出る。

これに対し、横方向が全て0のデータを除外したい列を選ぶ。
列全体を選択しても良いし、単一セルの選択でも良い。

上図の例では$F$2:$H$3のセル範囲を選んでいるが、この場合なら、F列~H列の数値が全て0の行を削除する処理をかけることになる。
結果、削除されず残るのは№02(B社)・№03(C社)の2行になる。

ソースコード

ではマクロのソースコードを。
やたら長ったらしいけど、特に要領良く書いてるわけでもなく、中身は力技です。

関連記事等

このマクロ「remakeWithoutAllZeroRows」を、個人用マクロブックに登録して使うと良いだろう。

個人用マクロブックとかについては、ここを展開。

オリジナルのマクロをリボンに追加する方法はこちら

個人用マクロブックについては、こちらこちらで述べています。

 

力技のマクロではあるが、それなりに色々なVBAの技は使っているので、改めて詳説はしませんが関連記事を思いつく限り並べときます。

Excel VBA 配列について(4)要素数が不定の配列

Excel VBA 配列について(3)2次元配列はExcelシートの値を扱うのに強力

Excel VBA InputBox(2)キャンセル処理の決定版・・・だと思う

Excel VBA InputBox(1)InputBoxの基本形

Excel VBA MsgBoxについて(3)アイコンとタイトルも追加する

Excel VBA MsgBoxについて(2)選択肢があるタイプのMsgBox

Excel VBAの入り口 MsgBoxについて(1)OKボタンしか無い単なるメッセージボックス

Excel 個人用マクロブック(Personal.xlsb) 最初に必ず入れておく高速化用コード

スポンサーリンク