- ベストアンサー
編集を許可しているセルの削除がマクロで出来ない
エクセル2013でC12:J536まで「範囲の編集を許可」して、シートを保護しています。 入力に関しては意図したとおりに保護、入力ができるのですが、許可範囲だけを指定した下記のマクロで削除しようとすると Selection.ClearContentsが黄色ハイライトして止まります。 保護を解除するとマクロで削除できるのですが。 何がまずいのでしょう? Sub 削除() ' ' 削除 Macro Range("C12:J536").Select Selection.ClearContents End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
やってみましたが、問題なく動きました。 ロックを外していない所があるのではないですか。 まずは、もう一度、ロックを外して見て下さい。 以下のマクロで、確認して下さい。1つセルを指定して消すので、問題のあるセルで止まります。 これがまともに動くようになったら不要です。 ' Sub Macro1() ' Dim Cell As Range ' For Each Cell In [C12:J536] Cell.Select Cell.ClearContents Next Cell End Sub
その他の回答 (2)
- HohoPapa
- ベストアンサー率65% (455/693)
マクロのコードに誤りはありませんし、 おそらく、問題はそれ以前にあるものと思います。 まず、次の点を確認、説明してみてください。 (1)エラーのなるときのエラーメッセージが未詳です。 (2)シートを保護する時に選択しているチェックボックスがどれなのか未詳です。 (3)C12:J536まで「範囲の編集を許可」しているわけですが、 これが1つの範囲なのか、複数範囲の集まりなのかが未詳です。 (4)順当なら、提示されたコードを実行すると パスワードを求めてくるわけですが このパスワードを求めてくるのかどうかが未詳です。 (5)マクロを使わず手作業なら動作するのかが未詳です。 つまり、C12:J536を選択しようとしたときに C12:J536が選択状態になるのか? さらに、選択した状態でDeleteキーを押したときに 期待通りセルたちを空にできるのか? なお、私だったら Range("C12:J536").Select Selection.ClearContents ではなく Range("C12:J536").ClearContents とします。 以下、可能性 (1)C12:J536の範囲に、 この範囲以外のセルと結合しているセルがある可能性 (2)C12:J536の範囲の中だけで結合しているセルの内 結合によって見かけ上選択できないセルがロック状態で、 かつ、シートの保護を行うときに 「ロックされたセル範囲の選択」が許可されていない可能性 (3)C12:J536を複数の範囲に分けて 「範囲の編集を許可する」を行っている可能性
お礼
いつもお世話になっております。 一応既報の通り、マクロで最初に、保護解除→削除→再度保護で解決したのですがやはりどこが悪いのか気になる処で、Hohopapaさんと#1さんのご回答で原因は(マクロで止まるところが最初の)結合セル(C12:C26)とのことだったので、先ずはこのセルの結合を解除してみたらシート保護のままでちゃんと動きました。 次に再度C12:C26を結合セルに戻してみたところ、今度は問題なく動きました。 ということでC12:C26の結合セルに問題があったことが分かり、最初の質問のマクロで動くようになりました。 2枚目以降のシートは機械的にC12:C26の結合セルで「セルの結合」を2回クリック(元の結合セルに戻す)だけで正常に動くことも確認しました。 当方には原因が分かりませんが、それなりにスッキリしました。 毎度のことですが、煩わせてしまい申し訳ありませんでした。
補足
毎度お世話になります。 未詳部分下記の通りです。 (1)エラーのなるときのエラーメッセージが未詳です。 ・「マクロ”Job.xlms”削除”を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。」 (2)シートを保護する時に選択しているチェックボックスがどれなのか未詳です。 ・「校閲」から「シートの保護」でOKでパスワード設定せず。 意図しない変更の防止目的のためにパスワードは不要です。 (3)C12:J536まで「範囲の編集を許可」しているわけですが、 これが1つの範囲なのか、複数範囲の集まりなのかが未詳です。 ・C12:J536は1つの範囲です。 他にD2が編集可能にしてあります。 編集可能な範囲はこの2つだけです。 (4)順当なら、提示されたコードを実行すると パスワードを求めてくるわけですが このパスワードを求めてくるのかどうかが未詳です。 ・(2)の通りパスワードは設定していないためパスワードの要求はないです。 (5)マクロを使わず手作業なら動作するのかが未詳です。 つまり、C12:J536を選択しようとしたときに C12:J536が選択状態になるのか? さらに、選択した状態でDeleteキーを押したときに 期待通りセルたちを空にできるのか? ・手作業では問題なく選択も削除もできます。 マクロを設定するまで手作業で削除してました。 範囲が広いので選択が面倒になりマクロにしてみました。 >なお、私だったら Range("C12:J536").Select Selection.ClearContents ではなく Range("C12:J536").ClearContents とします。 ありがとうございます。 マクロの記録がベースですので気づきませんでした。 明らかに無駄と思われる(非常に多くの)行は削除したのですが、ご指摘のの自動記録のコードは当方にはわかりやすく、何も感じませんでした。 いわれてみればなるほど、とわかるのですが。。。
- imogasi
- ベストアンサー率27% (4737/17069)
自信はないですが Sub test03() ActiveSheet.Unprotect Cells.Locked = False Range("C12:J536").Select Selection.ClearContents End Sub をやってみて、結果はどうでしょう。
お礼
マクロの記録で一旦保護を解除してから削除して、C12に戻って再度保護をかけてみたら解決できました。 最後に試行錯誤して不要な行を削除して下記にたどり付きました。 ご回答は参考になりました。 ありがとうございました。 Sub 削除() ' ' 削除 Macro ' ' ActiveWindow.SmallScroll Down:=-3 ActiveSheet.Unprotect Range("C12:J536").Select Selection.ClearContents Range("C12:C26").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub
補足
早々のご回答ありがとうございます。 削除はできたのですが、シートの保護が外れてしまいました。 同時に数式の入った全てのセルの左上隅に「!」が入って「このセルには数式が含まれますが、ロックされていないため変更されないように保護することができません」となります。
お礼
マクロの記録で一旦保護を解除してから範囲選択し、削除して、C12に戻って再度保護をかけてみたら解決できました。 最後に不要な行を試行錯誤で削除して下記にたどり付きました。 ご回答は参考になりました。 ありがとうございました。 Sub 削除() ' ' 削除 Macro ' ' ActiveWindow.SmallScroll Down:=-3 ActiveSheet.Unprotect Range("C12:J536").Select Selection.ClearContents Range("C12:C26").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub
補足
結合セルで止まるようです。 C列はC12から下に15行ごとの結合セルになっていて、C12はC12:C26までの結合セルで、最初の1歩で止まるようです。