Excel VBAで列の追加・行の削除を自動化!InsertとDeleteの使い方を初心者向けに徹底解説
生徒
「エクセルで毎日、決まった場所に新しい列を挿入したり、不要な行を削除したりする作業があるのですが、これを自動化する方法はありますか?」
先生
「それならVBAの Insert と Delete という命令を使えば一瞬ですよ!手動で右クリックして操作する手間が完全になくなります。」
生徒
「行や列を増減させるのは少し難しそうですが、初心者でも書けますか?」
先生
「大丈夫です。基本的なルールさえ覚えれば、パソコンをあまり触ったことがない方でも簡単に使いこなせるようになりますよ!」
1. 行と列の操作を自動化するメリットとは?
Excel(エクセル)での事務作業において、データの形を整えるために「行を消す」「列を増やす」という操作は非常に頻繁に行われます。これを手作業でやっていると、間違えて必要なデータを消してしまったり、挿入する場所を一行間違えたりといったミスが起こりやすくなります。また、何十箇所も操作が必要な場合、かなりの時間が奪われてしまいます。
VBA(ブイビーエー)というプログラミング言語を使ってこの作業を自動化すると、人間がやるよりも正確に、そして瞬時に処理を終わらせることができます。プログラミング未経験の方にとって、最初の壁は「コードを書くこと」かもしれませんが、一度書いてしまえば、後はボタン一つでパソコンがあなたの代わりに働いてくれるようになります。業務効率化への第一歩として、非常に価値のあるスキルです。
2. Insertメソッドで行や列を追加する方法
新しく行や列を差し込みたいときに使うのが Insert(インサート) という命令です。英語で「挿入する」という意味ですね。使い方はとてもシンプルで、どの行や列に挿入したいかを指定して、その後にドット(.)を付けて Insert と書くだけです。
例えば、3行目の上に新しい行を挿入したいときは Rows(3).Insert と書きます。列の場合は Columns("B").Insert のように書きます。エクセルのルールとして、新しい行は指定した行の「上」に、新しい列は指定した列の「左」に追加されることを覚えておきましょう。これは、私たちがエクセルの画面上で右クリックして「挿入」を選んだときと同じ動きです。
Sub AddNewColumnAndRow()
' B列の左側に新しい列を1本追加します
Columns("B").Insert
' 5行目の上に新しい行を1本追加します
Rows(5).Insert
End Sub
3. Deleteメソッドで行や列を削除する方法
不要なデータが入っている行や列を取り除きたいときは Delete(デリート) という命令を使います。これは「削除する」という意味です。Insert と同じくらい頻繁に使う非常に重要な命令です。
使い方も Insert とほぼ同じです。Rows(10).Delete と書けば、10行目が丸ごと消えます。列を消したいときは Columns("D").Delete のようにアルファベットで指定します。削除をすると、その下にある行や右にある列が自動的に詰められます。これもエクセルの標準的な機能と同じですが、一度削除してしまうとVBAでは「元に戻す」ボタンが効かないため、実行前に大切なデータが消えないかよく確認することが大切です。
Sub DeleteUnnecessaryParts()
' A列を丸ごと削除します(B列以降が左に詰まります)
Columns("A").Delete
' 1行目(見出しなど)を削除します
Rows(1).Delete
End Sub
4. 複数の行や列をまとめて操作するテクニック
一行ずつ、一列ずつ操作するだけでなく、まとめてガバッと追加・削除することも可能です。これには Range(レンジ) という言葉を組み合わせて使います。Rangeは「範囲」という意味で、複数のマス目(セル)を指定するときに役立ちます。
例えば、2行目から4行目までを一度に消したいときは Rows("2:4").Delete と書きます。列の場合も同様に Columns("B:D").Insert と書けば、3本分の列が一度に挿入されます。大量のデータを整理する場合、この「まとめ操作」を知っているだけで、プログラムのコードが非常に短く読みやすくなります。パソコンに「ここからここまでやって!」と一度に指示を出す感覚です。
Sub MultiOperation()
' 2行目から4行目までの合計3行を一気に削除します
Rows("2:4").Delete
' C列からE列までの場所に、新しく3本分の空列を挿入します
Columns("C:E").Insert
End Sub
5. 特定のセルを基準に行や列を操作する
行全体(Rows)や列全体(Columns)という言葉を使わずに、特定のセルを基準にして操作することもできます。例えば「A1セルがある行を消したい」という場合です。これには EntireRow(エンタイア・ロウ) や EntireColumn(エンタイア・カラム) という言葉を使います。
EntireRow は「そのセルが含まれる行全体」という意味です。Range("A1").EntireRow.Delete と書けば、A1セルがどこにあろうとその行を丸ごと消してくれます。これの便利な点は、場所が「A1」のようにセル名でわかっているときに、わざわざ行番号を調べ直さなくて済むことです。実務では「特定の文字が入っているセルを見つけて、その行を消す」という高度な自動化への足掛かりになります。
6. 条件に合わせて行を削除する際の注意点
ここで、初心者の方が必ずと言っていいほど躓く「落とし穴」についてお話しします。それは「上から順番に行をチェックして削除していくと、ズレが発生する」という問題です。例えば、2行目を消すと、もともと3行目だったデータが2行目に繰り上がります。しかし、プログラムは次に「3行目」を見に行くので、繰り上がってきたデータを飛ばしてしまうのです。
これを防ぐためには、行を削除するときは 「下から上に向かって」 処理を進めるのが鉄則です。これを「ステップをマイナスにする」と言ったりします。少し難しい話に聞こえるかもしれませんが、今は「行を消すときは下から上にやるのが安全なんだな」というイメージだけ持っておいてください。こうしたちょっとしたコツが、エラーのない正確な自動化ツールを作る秘訣です。
7. Shift引数で挿入・削除後の動きを指定する
通常、行を挿入すれば下へ、列を挿入すれば右へデータが移動します。この移動の方向を詳しく指定することもできます。これを 引数(ひきすう) と呼びます。引数は、命令に付け加える「詳細オプション」のようなものです。
Insert Shift:=xlDown と書けば「下にずらして挿入」、Delete Shift:=xlToLeft と書けば「左に詰めて削除」という意味になります。もっとも、行全体や列全体を操作する場合はエクセルが自動的に適切な方向を判断してくれるので、最初はあまり気にしなくても大丈夫です。まずは「Insertで追加」「Deleteで削除」という基本をしっかりマスターしましょう。
Sub ShiftOperation()
' セルA1からB2の範囲だけを削除して、右側のセルを左に詰めさせます
Range("A1:B2").Delete Shift:=xlToLeft
End Sub
8. 変数を使って動的に行や列を操作する
最後に、より実践的な使い方をご紹介します。毎回同じ場所を操作するのではなく、その時々で場所を変えたい場合があります。ここで活躍するのが 変数(へんすう) です。変数は、数字や文字を入れておくための「箱」のようなものです。
例えば、targetRow という名前の箱に「5」という数字を入れておけば、Rows(targetRow).Insert と書くことで5行目を操作できます。この箱の中身を「10」に変えれば、同じコードで10行目を操作できるようになります。これを使えば、「データが入力されている一番下の行に新しい行を追加する」といった、状況に合わせた柔軟な自動化が可能になります。
Sub DynamicInsert()
Dim targetRow As Integer
' 操作したい行番号を変数に入れます
targetRow = 10
' 変数を使って、その行の上に新しい行を挿入します
Rows(targetRow).Insert
End Sub
9. オブジェクト指定を忘れずに正確な操作を
VBAでシートを操作するとき、最も大切なのは「どのシートに対して操作しているか」を明確にすることです。単に Rows(1).Delete と書くと、今たまたま画面に表示されているシートの1行目が消えてしまいます。もし別の作業をしていたら、大変なことになりますよね。
Worksheets("Sheet1").Rows(1).Delete のように、シート名をセットで書く癖をつけましょう。これを「オブジェクトを修飾する」と言います。パソコンは非常に正直なので、指示が曖昧だと予期せぬ動きをすることがあります。逆に言えば、丁寧に正しく指示を出せば、これほど頼りになる相棒はいません。一つひとつの命令を大切に書いて、安全で便利なエクセル自動化を楽しんでください!