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

Excel マクロ、VBA

スポンサーリンク

前回、横方向の数値が全て0の行を、COUNTIFS関数を使って削除する方法について述べた。

Excel 横方向の数値が全て0の行を削除する方法(1)計算式を使用

今回は、これをVBAに書いてみたので載せてみる。

ソースコード

今回のVBAのソースコードが、下記の通り。

解説等

  • 「deleteAllZeroRows」というのが本体のマクロで、「appSet」「appReset」というのはExcelの描画を省略するなどVBAの高速化に関係するもの。

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

  • GoToというのを使って無理やり最後のfinishという場所に飛ばす処理を入れているが、もう少しスマートにすべきなのだろう。
    このGoToは通常、あまり推奨はされない手法だ。
  • ループ変数rを使ったループは、
    step -1
    という書き方で、大きい数から小さい数へ逆順にループさせている。
    特に行の削除などという処理は、行削除したときに行番号が変化してしまうのを防ぐために、こうやって一番下の行から削除していくのがセオリーだ。
  • 横方向が全て0の行を削除するということだが、通常のExcel関数などでは面倒な、「空白セルの場合も0として扱う」処理を
    arr(r, c) * 1 = 0
    みたいに、結果に1を乗じるという方法で記述した。
    これなら空白の場合も掛け算の結果は0になるということで、これは通常のExcelの計算式においても使える技だ。
  • 2次元配列というのを使っているが、それはこちらの記事を参照。

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

スポンサーリンク