マクロで「列の削除」をすると列番号はアルファベット表現が必要な「Columns」が記録されます。繰り返し処理をしたいので、列番号を数値で指定できたら良いのに。
みなさん、こんにちは。セルネッツ竹本です。
今回は、「列番号を数値にし、複数列の繰り返し削除する」をテーマに、解説をしたいと思います。
◆「見出名に”予備”が含まれている列だけ削除したい」こんな時どうする?
サンプルでは、わずか3列なのでプログラムを使うまでもありません。
が、ファイルフォーマットによっては、数100列の中から、不要列だけを削除したいケースがあります。
こんな場合は、必ず後ろから前方向に向かった処理が必要になります。
これが逆だとプログラムは、列番号の変化に対応できないためです。
まずは、マクロ記録の結果を見てみましょう。
◆【H列を削除】したマクロ記録の結果
マクロ記録の結果は、以下のようになりました。
Columns(“H:H”).Select
Selection.Delete Shift:=xlToLeft
操作の工程で、H列を選択したため、プログラム処理では不要な記述「Select」まで一つのアクションとして記録されました。
ここで問題は、列番号がアルファベット表記となっていること。
「これじゃアルファベット変換しないとLoopできない?」
そうですね。
こんなときは、次のようにも表現できるので、試してみましょう。
【Point】Columns(アルファベット)を数値の列番号で置き換えるだけ!
Public P_11Fin列n As Long
‘※※※※※※※※※※※※※※※※※※※
Private Sub B_列を連続削除_Click()
‘※※※※※※※※※※※※※※※※※※※
Dim S_列No As Long
P_11Fin列n = O_11.Cells(1, O_11.Columns.Count).End(xlToLeft).Column 'Fin列基点で左へ
For S_列No = P_11Fin列n To 1 Step -1
If InStr(Cells(1, S_列No), "予備") > 0 Then
‘(A)以下は、アルファベット列番号で削除する場合、列番号の変換が必要
‘Columns(“H:H”).Delete Shift:=xlToLeft
‘(B)以下なら、数値カウンターが利用できるので、列番号の変換不要!
‘ Columns(S_列No).Delete Shift:=xlToLeft ’
Debug.Print “デバッグ” & vbCrLf & _
“P_11Fin列n= ” & P_11Fin列n & vbCrLf & _
“S_列No = ” & S_列No & vbCrLf & _
“見出し = ” & Cells(1, S_列No) & vbCrLf
Else
End If
Next S_列No
End Sub
【注意】上記は、要な削除の部分をコメントアウトしている状態です。
次のデバッグプリントで正しい取得を確認できてからの本番処理とします。
◆Debug.Printしたイミディエイトウィンドウの出力結果
デバッグ
P_11Fin列n= 10
S_列No = 8
見出し = 予備3
デバッグ
P_11Fin列n= 10
S_列No = 7
見出し = 予備2
デバッグ
P_11Fin列n= 10
S_列No = 6
見出し = 予備1
正しく見出しを識別し取得できていますね。
では、実行してみましょう。
無事に、期待値を得ることができました。
今回のテーマは、「列番号を数値にし、複数列の繰り返し削除する」について、解説を行いました。
本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。