- ベストアンサー
VBA アクティブ行の削除
エクセルで、アクティブにしているセルの行のA列からL列のみを削除というマクロを組みたいのですが、どのように記述したらいいのでしょうか? アクティブなセルはA列~L列のどこにあっても、その行のA列-L列を削除というようにしたいです。 (例1) A1がアクティブだった場合、A1~L1が削除される (例2) B4がアクティブだった場合、A4~L4が削除される すみませんが、お分かりになる方がいましたらよろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> 1~5行目にカーソルがあった場合は、削除できませんというメッセージボックスをだしたいなと思っています。 No1-5 merlionXXです。 これでどうですか? Sub test02() If ActiveCell.Row > 5 Then Range("A1:M1").Offset(ActiveCell.Row - 1).Delete Shift:=xlUp Else MsgBox "1~5行目は削除しちゃだめ!!", , " Σ( ̄ロ ̄lll) " End If End Sub
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
#4の回答者です。 >1~5行目にカーソルがあった場合は、削除できませんというメッセージボックスをだしたいなと思っています。 すでに回答が出ていますが、一行を足せば、可能です。 '------------------------------------------- Sub Test1b() If ActiveCell.Row < 6 Then MsgBox "そこは削除できません", 48: Exit Sub With ActiveCell.EntireRow.Resize(, 13) If Not Intersect(.Cells, ActiveCell) Is Nothing Then .Delete End If End With End Sub '-------------------------------------------
- merlionXX
- ベストアンサー率48% (1930/4007)
No1 merlionXXです。 > すみません、A列~L列でではなくA列~M列でした。 Sub test01() Range("A1:M1").Offset(ActiveCell.Row - 1).Delete Shift:=xlUp End Sub でいかがですか? シートが保護されていると削除できませんが。
補足
おっしゃるとおりでした。 すみません、締め切りが迫りあせりすぎていました。 ありがとうございます!
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >.Deleteのところで引っかかっているようです。 どのようにマクロを置こうとも、このぐらいの初歩的な内容で、マクロコード自体にエラーになる原因はないはずです。 削除するマクロの部分の考え方は、#2さんのコードと同じですが、特殊な設定やシートのプロテクトをするなどしなければ、#2さんのコードがエラーになるはずはありませんし、こちらも同様です。 If Application.CountA(.Cells) > 0 Then これは、データがひとつ以上あれば、という条件です。まったく空欄を削除しても、行の繰上になるだけだと思います。不要なら If ~ End If の削除すればよいです。 If Not Intersect(.Cells, ActiveCell) Is Nothing Then というのは、ActiveCell(セルひとつ--二つあっても、白く反転しているセル)が、A~L(M)の範囲の行に、セルがあれば、それを削除するという内容ですから、例えば、セルが、Z列にあっても、マクロで削除しません。 エラーがありましたら、エラーの内容を表示してください。おそらく、以下のように直しても、現状のままではうまく行かないとは思いますが、提示だけしておきます。 フリーの掲示板で利用する場合は、もう少し提供されたマクロを、ご自身で訂正できるぐらいのVBAの知識はあったほうが良いかと思います。L列がM列になっただけなら、列を1増やすだけで良いと思います。 #2様のなら、 Cells(ActiveCell.Row, 1).Resize(1, 13).Delete '------------------------------------------- Sub Test1a() With ActiveCell.EntireRow.Resize(, 13) If Not Intersect(.Cells, ActiveCell) Is Nothing Then .Delete End If End With End Sub ----------------------------------------
お礼
ありがとうございます! 目下勉強中です、1列増えたのでどこを修正したらいいのかは調べてみてわかったのですが、ご指摘いただきありがとうございました。 突然このようなVBAを必要とするものを作らなければならず、奮闘中です。Wendy02さんにはとても助けられています。ありがとうございます。
補足
Wendy02様 記述いただいた内容でできました! 一つ問題が起きてしまったのですが、1行目~5行目までに説明書きや列のタイトル名などあり、この行に関しては削除実行できないようにしたいのですが可能でしょうか? 6行目以降にも数式があり、削除するために1度シートの保護を解除してしまうため、シート保護の機能を使用することはできず、1~5行目にカーソルがあった場合は、削除できませんというメッセージボックスをだしたいなと思っています。 私自身も調べつつ試してみているのですが、失敗してしまいます。 すみませんが、もしよろしければ教えてください。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 以下のマクロは、ActiveCell が、A列~L列上にあって、なおかつ、セルにデータがある場合に、A列~L列まで削除を行う、ということです。 それぞれ、試してみるとよいと思います。 '------------------------------------------- Sub Test1() With ActiveCell.EntireRow.Resize(, 12) If Not Intersect(.Cells, ActiveCell) Is Nothing Then If Application.CountA(.Cells) > 0 Then .Delete ''データの消去は、.ClearContents End If End If End With End Sub '-------------------------------------------
補足
ありがとうございます、A~M(LではなくMでした、すみません)のデータだけでなく行ごと削除したいと思ってます。 記述いただいた内容を実行してみたところ、できませんでした。 .Deleteのところで引っかかっているようです。 A~M列にはすべてデータが入っているわけではなく、空欄でも削除できるようにしたいのですが、可能でしょうか?
- hige_082
- ベストアンサー率50% (379/747)
データを消すだけなら Sub test_Clear() Cells(ActiveCell.Row, 1).Resize(1, 12).ClearContents End Sub セルを削除して上へ詰める Sub test_Delete() Cells(ActiveCell.Row, 1).Resize(1, 12).Delete End Sub 参考まで
補足
>セルを削除して上へ詰める やりたいのはこちらでしたので、実行してみたのですがエラーになってしまいました。 私のやり方が間違っているのかもしれないのですが、、
- merlionXX
- ベストアンサー率48% (1930/4007)
削除とは、セルを削除するのですか?それともセルに入力されたデータを消去するのでしょうか? データの消去だとして回答します。 Sub test01() Dim myRng As Range Set myRng = Range("A1:L1") myRng.Offset(ActiveCell.Row - 1).ClearContents End Sub データのみならず書式まで消去させるなら ClearContentsをClearに変えてください。 もしほんとにセルを削除して下から上に詰めるなら ClearContentsをDeleteに変えてください。
補足
ありがとうございます、セルを削除して上に詰めたいと思っています。 すみません、A列~L列でではなくA列~M列でした。 よろしくお願いいたします。
お礼
MsgBoxの顔文字に笑ってしまいました^^* 業務用じゃなければ顔文字までいれてそのまま使用したいくらいです(笑) ありがとうございました!助かりました。