エクセルはデータ解析・管理を行うツールとして非常に機能が高く、上手く使いこなせると業務を大幅に効率化できるため、その扱いに慣れておくといいです。
ただ機能が充実しているあまり初心者にとっては処理方法がよくわからないことも多いといえます。
例えばエクセルのVBA(マクロ)にてすく数列や、指定の1列、連続でない(1列おき)の列の削除を行う方法について理解していますか。
ここでは、このクセルのVBA(マクロ)にて列の削除方法として「指定の1列、複数列の削除方法、連続でない(1列おき)の列の削除方法」について解説していきますので、参考にしてみてください。
エクセルのVBAでの列の削除方法【1列のみ:、\マクロのDelete】
それでは以下のサンプルを用いて、エクセルのVBAでの列の削除方法として、まずは指定の1列の削除を行ってみましょう。
サンプルコードは以下の通りです。今回は3列目、つまりC列を指定し削除してみましょう。
Worksheets(“Sheet11”).Columns(3).Delete
End Sub
マクロの画面をalt+F11にて開き、以下のよう入力します。
上のコードの意味を確認していきます。
Sub 列削除()
→マクロ名を「列削除」として、定義しています
Worksheets(“Sheet11”).Columns(3).Delete
エクセルシートを指定(今回はSheet11という名前)、Columnsにて列番号(C列)の指定、Deleteで削除
としています。
End Sub
終了
という意味になります。
VBAの画面を閉じ、マクロを実行させましょう。
この操作の実行によって指定の列(今回は元の3列目)のみを削除することができました。
後のマクロでの1列飛ばしでの削除を行う方法など、応用を聞かせるには上の列番号で指定する方法がおすすめですね。
マクロにて列名の指定でも削除できる【ローマ字の列】
上では列の数値で列を指定したもの、ローマ字(A列、B列)の指定でも同様に処理できます。
ただおすすめは上の数値での書き方ですのですが、念のため覚えておくといいです。
サンプルコードは以下の通り。
Worksheets(“Sheet11”).Columns(“C”).Delete
End Sub
この時、ローマ字での列番号指定では、” “(ダブルクォーテーション)にて括ることを忘れないようにしましょう。
エクセルのVBA(マクロ)にて複数列を削除する方法
なお、指定の1列のみでなく複数列を一気に消したいこともあるでしょう。
この場合では、より応用が利く形のfor文を用いたマクロで処理するのが、個人的におすすめです。
サンプルコードは以下の通り。
Dim i, lRow As Long
maxcol = Worksheets(“Sheet11”).Cells(1, Columns.Count).End(xlToLeft).Column
For i = maxcol – 1 To 2 Step -1
Columns(i).Delete
Next i
End Sub
コードの意味は以下の通りです。
Sub 複数列削除()
→マクロ名の定義
Dim i, lRow As Long
→for文の使うiの定義
maxcol = Worksheets(“Sheet11”).Cells(1, Columns.Count).End(xlToLeft).Column
→マクロでは順々に削除するため、番号が若い列から消すと、後の番号が変更されるため、最終列を取得して後ろから削除する必要あり、
ここではsheet11の1行目における最終列を取得。
For i = maxcol – 1 To 2 Step -1
Columns(i).Delete
Next i
For文を用いて、今回は最終列の1列手前から、2列目までをすべて削除。
End Sub
→終了
となります。
すると以下のようにVBAにおける複数列の削除が完了となるのです。
ただこの場合は最終列からの位置関係などがわかりやすい場合(列数が少ないなど)に特におすすめです。
VBAにて列番号を指定して複数列を削除する
なお、for文を組みたくない場合や直接列番号を指定してマクロで複数列を削除したいこともあるでしょう。
このような場合では、ローマ字の列名にて複数範囲を指定すればOKです。
Sub 複数列削除2()
Worksheets(“Sheet11”).Columns(“C:E”).Delete
End Sub
単純にVBAにおける1列削除のコードにて、複数列を選択しているだけともいえますね。
なお、この時「開始列:終了列」といったように、コロン:を用いるのがポイントです。
結果として以下のようマクロにて複数列の削除が完了します。
エクセルのVBA(マクロ)にて1列おきに複数列を削除する方法【連続でない】
なお上ではVBAにて連続する複数列の削除を行ったものの、1列おきなどの連続でない複数列を削除したいケースもあるでしょう。
この場合のサンプルコードは以下の通り。
Dim i, lRow As Long
maxcol = Worksheets(“Sheet111”).Cells(1, Columns.Count).End(xlToLeft).Column
For i = maxcol To 2 Step -2
Columns(i).Delete
Next i
End Sub
上にてfor文を用いて複数列を削除したものの応用ともいえますが、今回はFor i = maxcol To 2 Step -2にて、現在の最終列から2つずつの列(1列おき)の列を2列目(B列)まで削除する操作を繰り返しているわけです。
ただマクロではさまざまな記載方法があるため、あくまでコードは一例と覚えておきましょう。
まとめ VBA(マクロ)にて列の削除(複数や1列おきなど)を行う方法【エクセル】
ここでは、エクセルのVBA(マクロ)にて列の削除方法として「指定の1列、複数列の削除方法、連続でない(1列おき)の列の削除方法」について解説しました。
基本的には、一つ一つのコードの意味を理解し流れを考えてスクリプトを組めばいいです。
エクセルでのさまざまな処理になれ、日々の業務を効率化させていきましょう。
コメント