入力済み最終行まで不要な行を非表示にする

不要な行非表示 VBA
スポンサーリンク

表やデータリストなどで印刷をするのに、不要な行だけ無くしたい時ってありませんか?

とはいえ、行を削除はしたくないので非表示で対応しようと思った時に、入力済み最終行まで1行ずつ目で追って調べて非表示を繰り返すのは面倒で時間の無駄なので、エクセルVBAの「Cells(Rows.Count, 1).End(xlUp).Row」を活用して、自動的に処理して作業効率化しましょう。

スポンサーリンク

条件に合致するセルを入力済み最終行まで調べて非表示にする

入力済み最終行を取得すると、行番号がわかり、エクセル関数で条件に合った場合とそうでない場合をIF関数で表しておいて、VBAで変数を活用すれば条件に合った行だけ非表示にすることが自動的に出来るようになります。

特定のセルに入力済みか空欄かを調べる

表の参照したいセル(ここではA列とします)が入力済(使用済み)なのか、使用していない(空欄)なのかを、セルZ列にIF関数を利用して振り分けます。

表の欄外のセルZ列にそれぞれ記述

=IF(A2=””,0,1)

これで、セルZ2にセルA2が空欄だったら「0」そうでなかったら(データがある)「1」が入力され、これを使用している40行目まで関数を書いておきます。

次にVBAでZ列の「0」「1」を入力済み最終行まで調べて「0」であれば使用していないので、非表示にします。

とりっぷぼうる
とりっぷぼうる

この方法ならば、IF関数のここでは空欄を選んでいますが”社外秘”とすれば、この条件に合う行だけ非表示にしておくことができますよ!

非表示のHiddenと整数型変数Dim・Long

行や列を表示したり非表示にするには、Hiddenプロパティを使用して、表示するにはFalseを、非表示にTrueに設定するだけです。

VBAコードでの自動化の作業の手順としては下記の通りです。

  1. 入力済み最終行の行番号を取得
  2. 1行目から最終行まで条件に合うセルの行だけを表示、それ以外は非表示

それではこの手順に従って変数Dimと繰り返し処理のFor~Nextを組み合わせた実際に使用しているユーザーフォームのコマンドボタンに記述したVBAコードです。

VBAコード

Private Sub CommandButton1_Click()
Dim R As Long
Dim i As Long
R = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To R
If Cells(i, 26) = “” Then Rows(i).Hidden = True
Next i
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. 整数型の変数「R」を宣言
  3. 整数型の変数「i」を宣言
  4. 変数「R」はA列の入力済み最終行の行番号を取得する
  5. 繰り返し処理で変数「i」は1行目~最終行番号「R」行目まで繰り返す
  6. もしセル「i」行目の26列目(Z列)が空欄だったら「i」行目は非表示にする
  7. 「i」行目まで繰り返す
  8. マクロ記録終了

これで不要な行だけ非表示することができたので、印刷する時に紙の下が余白になってしまうので、見栄えが悪くなるのであれば、8行目にマクロ記録終了する前に文字の大きさや行の高さを調整して、見栄え良くすることをおススメしますよ!

表の入力済みデータのセルの数を数えるのは、表の欄外の空いているセルに置いておけば簡単で、使用するエクセル関数はCOUNTA関数です。

この他にもフィルター機能をVBAで書いてしまえば同じように非表示が簡単にできますよ!

この他にも最終行に関して活用できると作業効率化できますよ。