アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルで、アクティブにしているセルの行のA列からL列のみを削除というマクロを組みたいのですが、どのように記述したらいいのでしょうか?

アクティブなセルはA列~L列のどこにあっても、その行のA列-L列を削除というようにしたいです。

(例1)
A1がアクティブだった場合、A1~L1が削除される
(例2)
B4がアクティブだった場合、A4~L4が削除される

すみませんが、お分かりになる方がいましたらよろしくお願いいたします。

A 回答 (7件)

削除とは、セルを削除するのですか?それともセルに入力されたデータを消去するのでしょうか?


データの消去だとして回答します。

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列でした。
よろしくお願いいたします。

補足日時:2010/01/07 11:18
    • good
    • 0

データを消すだけなら


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

参考まで

この回答への補足

>セルを削除して上へ詰める
やりたいのはこちらでしたので、実行してみたのですがエラーになってしまいました。
私のやり方が間違っているのかもしれないのですが、、

補足日時:2010/01/07 11:20
    • good
    • 0

こんばんは。



以下のマクロは、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列にはすべてデータが入っているわけではなく、空欄でも削除できるようにしたいのですが、可能でしょうか?

補足日時:2010/01/07 11:12
    • good
    • 0

こんにちは。



>.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
----------------------------------------

この回答への補足

Wendy02様
記述いただいた内容でできました!
一つ問題が起きてしまったのですが、1行目~5行目までに説明書きや列のタイトル名などあり、この行に関しては削除実行できないようにしたいのですが可能でしょうか?

6行目以降にも数式があり、削除するために1度シートの保護を解除してしまうため、シート保護の機能を使用することはできず、1~5行目にカーソルがあった場合は、削除できませんというメッセージボックスをだしたいなと思っています。
私自身も調べつつ試してみているのですが、失敗してしまいます。
すみませんが、もしよろしければ教えてください。

補足日時:2010/01/12 16:39
    • good
    • 0
この回答へのお礼

ありがとうございます!
目下勉強中です、1列増えたのでどこを修正したらいいのかは調べてみてわかったのですが、ご指摘いただきありがとうございました。

突然このようなVBAを必要とするものを作らなければならず、奮闘中です。Wendy02さんにはとても助けられています。ありがとうございます。

お礼日時:2010/01/08 18:39

No1 merlionXXです。



> すみません、A列~L列でではなくA列~M列でした。

Sub test01()
Range("A1:M1").Offset(ActiveCell.Row - 1).Delete Shift:=xlUp
End Sub

でいかがですか?
シートが保護されていると削除できませんが。

この回答への補足

おっしゃるとおりでした。
すみません、締め切りが迫りあせりすぎていました。
ありがとうございます!

補足日時:2010/01/08 18:36
    • good
    • 0

> 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
    • good
    • 0
この回答へのお礼

MsgBoxの顔文字に笑ってしまいました^^*
業務用じゃなければ顔文字までいれてそのまま使用したいくらいです(笑)

ありがとうございました!助かりました。

お礼日時:2010/01/13 17:00

#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
'-------------------------------------------
    • good
    • 0

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