スポンサーリンク
テーブルの行削除を何度もやるのは面倒
前回の記事で、テーブルの行を削除する時は、Deleteキーで消すのではなく行ごと削除するようにと述べた。
しかし、普通の人はどうか知らないが私がテーブルを使用する場合は、
→テーブルのデータをクリアする
→他のExcelファイルからコピーしてきたデータをテーブルに貼り付ける
→テーブルのデータをクリアする
→他のExcelファイルから・・・
というのを短時間で何度も繰り返すことが多い。
そのたびに、行削除を手作業で毎回やるのは面倒だし、ましてそれを他の人にやってくれとは言いにくい。
だから私は、行削除を頻繁にやる必要があるExcelテーブルを設置する際には、その行削除のためのマクロを作成することにしている。
そして、そのマクロの起動ボタンを設置し、ボタン一発ですぐ行削除できるようにしている。
テーブル特有の配慮はやはり必要
その行削除マクロを設ける配慮じたいは、テーブルに限らず普通のExcel表でも、やることは多い。
しかし普通のExcel表なら、「普段やっているようにDeleteキーでデータを消せばいいよ」と言えば良い、というか特に言わなくても良いところだが、テーブルではそうはいかない。
「Deleteキーでは駄目で、行削除をしなきゃいけない」ということ自体が、テーブルを使い慣れない人には何とも受け入れ難いものだ。
それを意識させないためにもやはり、マクロの設置は必要になってくる、と思う。
私はテーブルを多用したいのだが、他者へも配布する場合には慎重になる。
それは、この行削除に関する面倒さが大きな原因だ。
計算式がある先頭行は削除せず残す
そして、テーブルの行削除においては、少なくとも私がやるに当たっては気をつけなければならない点がもう一つ。
私はテーブルの計算式補完機能を使いまくるのだが、それに当たっては、先頭行の計算式だけは消さずに残しておくことが絶対条件だ。
↓の動画でいうと、F3セルに書かれた
単価×数量
の数式だけは、行を削除した後も残しておかなければならない。
だから、「テーブル(の、タイトルを除くデータ部分)がExcelシートの2行目から始まっているなら、3行目以降を削除して、2行目だけ残しておく」ことになる。
もっと厳密に言うと、「3行目以降を削除して、2行目は計算式の箇所だけを残しておき他はクリアする」ということになるけど、まあそこまでは面倒だからやらないことが多い。
テーブルの行削除をするマクロ(手抜き)
では、その行削除するマクロを書くなら具体的にどうするか。
これはもう、「テーブル(のデータ部分)が2行目から始まっている」ことは既知の前提条件として、
1 2 3 4 5 |
Dim ws As Worksheet Set ws = ActiveSheet Range(ws.Cells(3, 1), ws.Cells(Rows.Count, 1)).EntireRow.Delete |
という短いコードで、3行目以降を削除するという風にすることが多い。
このやり方は、テーブルをきちんと使っている人から見れば顰蹙ものかもしれない。
なぜなら、テーブルの行だけをスマートに削除するならば
EntireRow.Delete
なんて行全体を削除するのではなく、ListRowsというものを削除する記述にするのが正攻法だ(?)。
そして近い内に別の記事で取り上げるが、テーブルを扱う際には本当は、ListObjectsというものを使うからだ。
しかし正直、それらの正攻法を使わなくても実際に支障が出ることは、少なくとも私は経験していないので、前述の手抜きなマクロを使っている。
もし正攻法のマクロで、ソースコードが短くて済めばよいのだけど、恐らくループとか使ってちょっと長いコードを書かないといけないはず。
要は、手間をなるべく掛けずに目的が最低限果たせれば良いので、正攻法とはズレた手抜きのものであっても、特に問題はないと思う。
スポンサーリンク