プロが教えるわが家の防犯対策術!

エクセル2010です。

プログラムの関係上、セルを削除されないよう、ロックした上でシート保護をし、
非表示として処理を
しております。

ドラッグにて範囲指定をしてDEL(消去)をすると、ロックしたセルも含まれて
消去できないため、ワンクリックで消去できるよう、マクロを組んで、コマンドボタンを
当てております。

シート保護解除
選択範囲の可視セルを選択
消去
シート保護

-------------------------------
Sub Macro1()
ActiveSheet.Unprotect
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.ClearContents
ActiveSheet.Protect
End Sub
-------------------------------

この場合、クリック前に選択範囲があると問題なく消去できるのですが、選択範囲がなく、
一つのセルが選択された状態であると、シート内全て消去になっていまいます。
範囲が選択されていない場合、マクロを無効(中断)させることは可能でしょうか?
または、別法で可能であれば、そちらでも構いません。

言葉足らずのところがありましたら、ご指摘ください。
よろしくお願いします。

A 回答 (2件)

求めている回答とは異なると思うが、一応アドバイス。


非表示にしているセルを別のシートに移し、そのシートを非表示にしてはどうか。
これなら都度マクロを作る必要もなくなる。
    • good
    • 0
この回答へのお礼

残念ながら、その作業では難しいのが現状です。

お礼日時:2015/10/13 18:25

こんにちは。



>Selection.SpecialCells(xlCellTypeVisible).Select
>クリック前に選択範囲があると問題なく消去できるのですが
状況が分からないままでの反応ですから、この辺りは曖昧ですが、Excelでは、ふつうは、このような書き方はしません。

>ドラッグにて範囲指定をしてDEL(消去)をすると、
シートプロテクトまでしてあるのに、任意の範囲でというよりも、規定の範囲のほうが良いような気がします。たいてい、Excelではデータ範囲が決まっていますから、Selection ではなく、Endプロパティを使い、その範囲を指定します。場合によっては、CurrentRegion, UsedRangeを用います。

>範囲が選択されていない場合、マクロを無効(中断)させることは可能でしょうか?
これ自体は、以下のように書けばよいのです。

'//
Sub Macro1()
Dim Rng As Range
 ActiveSheet.Unprotect
 If TypeName(Selection) = "Range" Then  'セルを選択しているか?
   If Selection.Cells.Count = 1 Then Exit Sub '選択されているセルの数は1個以上か?
  Else
  Exit Sub 'マウスカーソルがセルにない場合は、マクロは終了
 End If
 Set Rng = Selection.SpecialCells(xlCellTypeVisible) '可視セルを変数に入れて、
 Rng.ClearContents  '値の消去(変数に入れずに直接でも良い)
 ActiveSheet.Protect
End Sub
'///
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
マクロの記録をそのまま登録したものを改変していたので、中断の条件が思い浮かばず、ご提示いただいた内容で解説があったため、大変参考となりました。
ありがとうございました。

お礼日時:2015/10/13 18:24

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