こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も業務効率化のアイデアを発信していきますっ!
全10回の連載でエクセルのデータ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。今回はその第7回目です。
前回お伝えした「CountA関数でシート内の空白行を一括で削除」に続いて、今回は「空白行をまとめて一括で非表示にする方法」するテクニックをご紹介します。
前回は空白行を削除するプログラムでしたが、削除しないで非表示にしたという場合もあると思います。そこで前回のプログラムをちょこっと修正して、空白行を非表示にする機能を追加していきたいと思います。
目次
空白行をまとめて非表示にするプログラムの作成
前回作った空白行の削除ボタンにチェックボックスを追加する
毎度のことですが作業効率を考え、前回使ったプログラムを再利用します。デスクトップにある「一括変換.xls」を開きます。
UserFrom1を開いて新たに「空白行の削除」ボタンの下に、チェックボックスとラベルを追加します。ラベルのCaptionは「非表示」とします。
チェックスボックスの追加については過去の記事を参考にしてみてください。
サンプルコードを貼り付ける
「空白行の削除」ボタンをダブルクリックしてコードウィンドウを開きます。「CommandButton4_Click()」の下に以下のコードを貼り付けます。
このプログラムコードは「CountA関数でシート内の空白行を一括で削除」で作ったコードを元にして、空白行を非表示にする処理を追加しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
'空白行の削除 Private Sub CommandButton4_Click() Dim tmp Dim Col As Long Dim Row_Start As Long Dim Row_End As Long Dim y As Long '処理開始行 Row_Start = 2 '最終行を取得 With ActiveSheet.UsedRange Row_End = .Rows(.Rows.Count).Row End With For y = Row_End To Row_Start Step -1 'CountAを使って行のデータの個数をカウント If Application.WorksheetFunction.CountA(Rows(y)) = 0 Then If CheckBox3.Value = True Then '行を非表示 Rows(y).Hidden = True Else '行を削除 Rows(y).Delete End If End If Next y End Sub |
プログラムコードの解説
重要なポイントに要点を絞って説明していきます。今回の「空白行をまとめて一括で非表示にするプログラム」はワークシート全体に対して処理をするプログラムです。そのため列を指定するInputboxは必要ないのでコードから削除しています。
For文の使い方について
前回の「空白行の削除プログラム」では行を削除することで、処理している行番号が変わってしまい上手く処理が行われないため、最終行から開始行に向けて処理するようにしました。
1 |
For y = Row_End To Row_Start Step -1 |
今回の場合は非表示なので、開始行から最終行に向けて行う通常の処理でよいのですが、削除と非表示で処理を分けるとコードが煩雑になるのであえて変更はしません。最終行から開始行に向けて処理をしても特に問題はないからです。
hiddenプロパティを使うと行または列を非表示にすることができます。Trueを指定すると非表示、Falseを指定すると表示させることができます。
非表示のチェックボックスにチェックがついているときは、空白行を非表示、チェックがついていないときは空白行を削除というように処理を分岐させています。
1 2 3 4 5 6 7 |
If CheckBox3.Value = True Then '行を非表示 Rows(i).Hidden = True Else '行を削除 Rows(i).Delete End If |
上記のコードで29行目から35行目にあたります。
コードの解説は以上です。
空白行をまとめて非表示にするプログラムの動作確認
それでは実際に出来上がったプログラムを動かしてみましょう。
ワークシートの起動ボタンを押します。
空白行を非表示にしたいシートに移動し、非表示のチェクボックスをONにします。すると「空白行の削除」ボタンが「空白行の非表示」に変わるので「空白行の非表示」ボタンを押します。
空白行である4,6,9行目が非表示になりました。
まとめ
いかがでしたか?今回の内容をまとめます。
- チェックボックスのONOFFで行を削除するか非表示を切り分ける
- hiddenプロパティで行を非表示にできる
時短のおつまみ
今日のおつまみはコレです!
検索もよく使いますが、置換えも頻繁に使う機能ですよね~。エクセルだけでなく他のアプリケーションでも使える場合が多いので覚えておくと便利ですっ。
それではまた~。
[連載記事 全10回] エクセルVBAで文字列変換ツールを作る
全角半角の変換をしたり、空白行や改行を削除したり。データ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。1つの記事で1機能ずつ追加していきますので、少しずつVBAを学びながら進めることができます。
- エクセルVBAでセル内の文字列に含まれる改行を一括で削除する方法
- エクセルVBAでセル内の文字列を操作して全角文字を半角に一括変換する方法
- エクセルVBAでチェックボックスのONOFFでボタン表示を変える方法
- エクセルVBAでセル内文字列の前後の空白をまとめて一括で削除する方法
- エクセルVBAのReplace関数でセルの文字列内の空白をまとめて一括削除する
- エクセルVBAのCountA関数でシート内の空白行をまとめて一括で削除する方法
- エクセルVBAで空白行を削除しないでまとめて一括非表示で隠す方法 (本記事です)
- エクセルVBAで条件付き書式を使わず1行おきに色を付ける方法
- エクセルVBAで集計や並び替えを使わず1行おきに空白行を一括で挿入する方法
- エクセルVBAで同じデータが切り替わる項目ごとに空白行を挿入する方法