電子書籍の厳選無料作品が豊富!

教えて下さい。

Excelのマクロで列を削除するマクロを作りたいと考えています。
動作としては、
「操作シート」の2行目のA2セルから1個1個に「A」「C」「E」と削除したい列番語を入力。
「データベースシート」のA列・C列・E列を削除する。
「操作シート」の2行目では、0~60個の列番号を指定し、列番号を指定する途中では空白は入らない。
0の場合は、「列番号が指定されていません。」とメッセージボックスを表示する。
としたいです。

ですので、
Columns(***).Delete
の***の部分を操作シートのA2セルから参照していき、空白が出るまで繰り返す。
といった処理をしたいのですが、どのように記述すれば可能なのでしょうか?

ご教授いただければ幸いです。

A 回答 (1件)

こんにちは!



>Columns(***).Delete
>の***の部分を操作シートのA2セルから参照していき、空白が出るまで繰り返す。

のような操作にする場合、
行・列削除を順に行う場合は最終の行(列)から順に行う必要があります。
(頭から削除してしまうと、行・列が繰り上がってしまい、元の行(列)番号とずれてしまうため)
今回は一気にやる方法です。
標準モジュールにしてください。

Sub Sample1()
Dim i As Long, str As String
Dim myRng As Range, wS As Worksheet
Set wS = Worksheets("データベース")

With Worksheets("操作")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
str = .Cells(i, "A")
If myRng Is Nothing Then
Set myRng = wS.Cells(1, str)
Else
Set myRng = Union(myRng, wS.Cells(1, str))
End If
Next i
If Not myRng Is Nothing Then
myRng.EntireColumn.Delete
Else
MsgBox "列番号指定なし"
End If
End With
End Sub

※ 「操作」SheetのA列は必ず存在する列番号のアルファベットが入っているという前提です。

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 2
この回答へのお礼

tom04 様
ご回答ありがとうございます。
頂いた内容で、A列に記述した列番号を纏めて削除する事が出来ました。

また、頂いた内容を自分なりに確認して以下のように改変し、2行目に記述した列番号を削除する事も出来ました。

最終行(列)の指定や、Rangeを変数として宣言する事、Unionセクションでの集約など、
まだまだ理解が足りない所もありますが、頂いた内容を見直しながら勉強していきたいと思います。

この度は、誠にありがとうございました。

Sub Sample()


Dim i As Long, str As String
Dim myRng As Range, wS As Worksheet
Set wS = Worksheets("データベース")

With Worksheets("操作")
For i = 1 To .Cells(2, Columns.Count).End(xlToLeft).Column
str = .Cells(2, i).Value
If myRng Is Nothing Then
Set myRng = wS.Cells(2, str)
Else
Set myRng = Union(myRng, wS.Cells(2, str))
End If
Next i
If Not myRng Is Nothing Then
myRng.EntireColumn.Delete
Else
MsgBox "列番号指定なし"
End If
End With

End Sub

お礼日時:2015/05/27 03:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!