ユーザーが指定した列を削除したい
単純に列削除は下記のどちらかで可能です。
Columns(“A”).Delete
Columns(1).Delete
プログラム内に組み込めば特に難しい処理ではありませんが、
削除する列をユーザー側に指定させる組み方を推奨します。
プログラムは開発者の独りよがりになり、完成して終わりでは悲しいものです。
ユーザーが円滑に進める事が大事と考えています。
ただ、ユーザーからの問い合わせは極力避けたいため、ユーザーが簡単に使える設定を入れる必要があります。
ユーザーが指定した列を削除するサンプルコード
アクティブシートのA2~A列最終行までに入力された指定列の削除を行うサンプルです。
Public Sub sample_user_defined_column_delete() Dim ws As workshet: Set ws = ThisWorkbook.ActiveSheet Dim arr As Variant Dim i As Long Dim k As Long: k = 0 '■ユーザー指定した列を配列に入れる ReDim arr(k) For i = 2 To Call_LastRowWs(5, ws) '5列目2行目から最終行 arr(k) = Call_ColConv(ws.Cells(i, 5)) '5列目 k = k + 1 ReDim Preserve arr(k) Next i ReDim Preserve arr(k - 1) '■配列を昇順並替 Call Call_QuicksSort(arr, LBound(arr), UBound(arr)) '■指定したシートの列削除(今回はwsDel) For i = UBound(arr) To LBound(arr) Step -1 wsDel.Columns(arr(i)).Delete Next i End Sub
注意点
- 上記コードだけでは動きません。下記プロシージャ(関数)も入れてください。
一次元配列を昇順並び替え(ソート)する【クイックソート】【ExcelVBA】
「アルファベットから列番号/数値からアルファベット」相互変換【ExcelVBA】
ExcelVBAマクロ-他ブック他シートの「最終行」「最終列」取得処理をパーツ化する - 上記コードはws.Cells(i, 5)といったマジックナンバーがある為、定数化をお勧めします。
【VBA基本】Constでの定数宣言と定数一覧
関連記事
ワークシート名を変数にSetし、短い名前で利用する【マクロ初級者必読】
指定行(ヘッダー行)以下を全て削除する【ExcelVBA】
ループ中に条件を満たす列の列削除を行う【ExcelVBA】
ループ中に条件を満たす行の行削除を行う【ExcelVBA】
コメント