Excelシート上のデータを、列方向から削除するサンプルコードです。
経験上、VBAコードによる行削除に比べて、使う頻度としてはかなり少ないのですが、行削除同様、基礎的なVBAコードです。
また、行削除と同じアルゴリズムになりますが、列削除としての変数の設定方法が異なります。
では、サンプルファイルを用意してから、VBAコードを真似て書いてみましょう。
それでは、実行してみてください。今回はシートからすべてのデータが消えてしまいましたよね。
では、続いてコードのお話しです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Option Explicit '列削除 Sub Sample028() Dim lngECol As Long 'データ範囲の最終列番号用変数 Dim c As Long '列方向ルーチン処理用変数 'データ範囲の最終列番号取得 lngECol = Range("XFD1").End(xlToLeft).Column 'データ範囲最終列番号からA列まで実行 For c = lngECol To 1 Step -1 '列全体を削除 Cells(1, c).EntireColumn.Delete Next End Sub |
列を削除する考え方は、行削除の紹介をした記事と同じで、データ範囲の最終列から1列づつ列を削除しています。ただ、変数の設定が異なりますので、詳しくお話ししていきますね。
5行目:Dim lngECol As Long
6行目:Dim c As Long
列に関係する変数定義になります。5行目のデータ範囲の最終列番号を入れる変数名「lngECol」の「Col」は、「列」を意味する英語「Column」から取りました。
また、6行目の繰り返し処理用の変数「c」も、列を意味する英語の「Column」から頭文字を取って名前をつけました。
ちなみに、行方向の処理に使う変数名「lngERow」、「r」も考え方は同じで、「行」を意味する英語の「Row」から拝借して変数名をつけています。
9行目:lngECol = Range("XFD1").End(xlToLeft).Colum
ここでデータ範囲の最終列番号を取得しています。話しを分かりやすくするために、下の図も用意しましたのでご覧ください。
VBAコードの9行目、右辺の説明です。まずExcelシートの最終列1行目のセルRange("XFD1")を出発点(黄色セル)にします。
そこから、「Ctrl + ←」キーを押した時のジャンプ先のセルが「Range("XFD1").End(xlToLeft)」(緑色セル)、すなわち「データ範囲の最終列に含まれるセル(Range("G1")」になります。
「Range("XFD1").End(xlToRight)」の「.Column」は列番号ですから、VBAコード9行目の右辺で求めている値は、「7」が答えになります。よって、lngECol = 7、すなわちlngEColには7が代入されます。
12~17行目:For c = lngECol To 1 Step -1 ~ Next
繰り返し処理の範囲になります。行削除の記事で紹介したアルゴリズムと同様に、列削除をする場合も、データ範囲の最終列番号から先頭列に向かって削除処理をするのが基本になります。
15行目:Cells(1, c).EntireColumn.Delete
For ~ Next文のにある繰り返し実行されるVBAコードになります。既に登場している「.EntireRow」が、Rangeオブジェクトの「行全体」を指すのに対し、今回の「.EntireColumn」はRangeオブジェクトの「列全体」を指します。
そして、「.Delete」は行削除の記事でお話ししたものと同じになります。今回の場合は、「.Delete」の対象は列全体ですから列削除を実行します。
まとめ
今回は、VBAコードで列を削除する方法についてお話ししました。考え方のポイントは、行削除と同様、データ範囲の最終列から削除していくことです。また、初登場の「.EntireColumn」と「.End(xlToLeft)」についてもお話ししましたね。