• ベストアンサー

編集を許可しているセルの削除がマクロで出来ない

エクセル2013でC12:J536まで「範囲の編集を許可」して、シートを保護しています。 入力に関しては意図したとおりに保護、入力ができるのですが、許可範囲だけを指定した下記のマクロで削除しようとすると Selection.ClearContentsが黄色ハイライトして止まります。 保護を解除するとマクロで削除できるのですが。 何がまずいのでしょう? Sub 削除() ' ' 削除 Macro Range("C12:J536").Select Selection.ClearContents End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (715/1481)
回答No.1

やってみましたが、問題なく動きました。 ロックを外していない所があるのではないですか。 まずは、もう一度、ロックを外して見て下さい。 以下のマクロで、確認して下さい。1つセルを指定して消すので、問題のあるセルで止まります。 これがまともに動くようになったら不要です。 ' Sub Macro1() '   Dim Cell As Range '   For Each Cell In [C12:J536]     Cell.Select     Cell.ClearContents   Next Cell End Sub

akira0723
質問者

お礼

マクロの記録で一旦保護を解除してから範囲選択し、削除して、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

akira0723
質問者

補足

結合セルで止まるようです。 C列はC12から下に15行ごとの結合セルになっていて、C12はC12:C26までの結合セルで、最初の1歩で止まるようです。

その他の回答 (2)

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

マクロのコードに誤りはありませんし、 おそらく、問題はそれ以前にあるものと思います。 まず、次の点を確認、説明してみてください。 (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を複数の範囲に分けて  「範囲の編集を許可する」を行っている可能性

akira0723
質問者

お礼

いつもお世話になっております。 一応既報の通り、マクロで最初に、保護解除→削除→再度保護で解決したのですがやはりどこが悪いのか気になる処で、Hohopapaさんと#1さんのご回答で原因は(マクロで止まるところが最初の)結合セル(C12:C26)とのことだったので、先ずはこのセルの結合を解除してみたらシート保護のままでちゃんと動きました。 次に再度C12:C26を結合セルに戻してみたところ、今度は問題なく動きました。 ということでC12:C26の結合セルに問題があったことが分かり、最初の質問のマクロで動くようになりました。 2枚目以降のシートは機械的にC12:C26の結合セルで「セルの結合」を2回クリック(元の結合セルに戻す)だけで正常に動くことも確認しました。 当方には原因が分かりませんが、それなりにスッキリしました。 毎度のことですが、煩わせてしまい申し訳ありませんでした。

akira0723
質問者

補足

毎度お世話になります。 未詳部分下記の通りです。 (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/17068)
回答No.2

自信はないですが Sub test03() ActiveSheet.Unprotect Cells.Locked = False Range("C12:J536").Select Selection.ClearContents End Sub をやってみて、結果はどうでしょう。

akira0723
質問者

お礼

マクロの記録で一旦保護を解除してから削除して、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

akira0723
質問者

補足

早々のご回答ありがとうございます。 削除はできたのですが、シートの保護が外れてしまいました。 同時に数式の入った全てのセルの左上隅に「!」が入って「このセルには数式が含まれますが、ロックされていないため変更されないように保護することができません」となります。

関連するQ&A

  • セル変更2回目以降マクロが走らない

    office2010 セル値変更でマクロ実行の件で質問です。 macroというシートのA11セルがプルダウンリストになっていて、その値を変更したらマクロ実行という構成を作成しました。 下記はmacroというシートに記載したマクロ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$11" Then Exit Sub Calculate Macro4 End Sub 下記は標準モジュールに記載したマクロ Sub Macro4() ' 'macroシートB11に表示されるNo.で抽出 Application.EnableEvents = False Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Sheets("Sheet1").Visible = True Sheets("Sheet2").Visible = True Sheets("Sheet3").Visible = True Sheets("Sheet4").Visible = True Sheets("work").Visible = True Sheets("Sheet3").Select Cells.Select Selection.ClearContents Selection.ClearContents Sheets("Sheet2").Select Cells.Select Selection.ClearContents Selection.ClearContents Sheets("Sheet1").Select Cells.Select Selection.AutoFilter Selection.AutoFilter ActiveSheet.Range("$A:$BA").AutoFilter Field:=3, Criteria1:=Sheets("macro").Range("B11") Sheets("kisyu_work").Select Cells.Select Selection.ClearContents Sheets("Sheet1").Select Columns("F:F").Select Selection.SpecialCells(xlCellTypeVisible).Select Application.CutCopyMode = False Selection.Copy ActiveWindow.ScrollWorkbookTabs Position:=xlLast Sheets("kisyu_work").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "kisyu_work!R1C1:R1048576C1", Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:="", TableName:= _ "ActiveSheet.Name", DefaultVersion:=xlPivotTableVersion14 Cells(1, 1).Select With ActiveSheet.PivotTables("ActiveSheet.Name").PivotFields("V_KISYU_CD") .Orientation = xlRowField .Position = 1 End With Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row - 2).Select ' Selection.Copy ActiveWindow.ScrollWorkbookTabs Position:=xlLast Sheets("kisyu_work").Select Range("B1").Select ActiveSheet.Paste ' Range("C1:C" & Range("B" & Rows.Count).End(xlUp).Row).Value = "=INDEX(M_KISYU!C[5],MATCH(RC[-1],M_KISYU!C,0))" Sheets("macro").Select End Sub A11セルの値を変更するとMacro4は実行されます。 しかしながら、2回以上続けてA11の値を変更するとMacro4が動作しません。 なぜなのでしょうか? なお、プルダウンリストの構成をやめると、連続してA11セル値変更しても動作します。

  • エクセル マクロの記憶で記憶する自動マクロの編集

    こんにちわ。 エクセルで、マクロを記憶させて実行しています。 この自動で操作をしてくれるマクロを、50回繰り返したいのですが、 マクロの編集で文字を出して、この文字に何かを付け足すことで 50回繰り返すことはできますでしょうか? 以下、文字を出した画面です。(適当な操作を記憶させただけです) Sub あき() ' ' あき Macro ' マクロ記録日 : 2011/8/20 ユーザー名 : user ' ' Range("A1").Select Selection.ClearContents Sheets("RESULT_B(1)").Select Selection.AutoFilter Field:=1, Criteria1:="=", Operator:=xlAnd Range("A3").Select Sheets("Sheet1").Select Range("C1").Select Selection.Cut Sheets("RESULT_B(1)").Select Range("A3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("D1").Select Selection.Cut Sheets("RESULT_B(1)").Select Range("H3").Select ActiveSheet.Paste Sheets("Sheet1").Select End Sub このすべての作業を繰り返したいのですが、 お手数ですが、ご存知の方、 どこにどういう言葉を入力したらよいのか教えて頂けませんでしょうか。 当方素人の為、訳の分からない文章になってしまい 申し訳ありません。 よろしくお願い致します。

  • EXCELマクロ セルに入力したシート名から参照

    よろしくお願いします。 複数のシートがあり、それぞれ 1109,1110,1111,1112,1201,1202,1203,1204,1205 と名前がついています。 それぞれのシートには月毎のデータが入っています。 Sub Macro1() Columns("F:J").Select Selection.ClearContents Sheets("1205").Columns("A:E").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("C4:E5"), CopyToRange:=Range("F2:J2"), Unique:=False End Sub ↑のマクロをSheet3で作りましたが、4行目の「Sheets("1205")」の1205の部分を可変で作れればと 思っています。Sheet3のC3セル内に入力したシート名(1109や1203等)でフィルタ出来ると助かります。 どうぞよろしくお願いします。

  • Excelでマクロを使いセルの内容をコピー貼り付け

    A1セルに111と入力してあるとします。 この時B1にaaa111aaaと入力するマクロを作りたいです。 A1に222があるとB1はaaa222aaaと入力したいです。 これをマクロで作ったのですが、次のようになり、A1の内容にかかわらず常にaaa111aaaとなってしまいます。 Sub Macro1() Range("A1").Select ActiveCell.FormulaR1C1 = "111" Range("B1").Select ActiveCell.FormulaR1C1 = "aaa111aaa" Range("B2").Select Application.Goto Reference:="Macro2" End Sub これのいらない行を削除し、コピーはA1の内容となるように修正して次のようにしました。 Sub Macro1() ActiveCell.FormulaR1C1 = Range("A1") Range("B1").Select ActiveCell.FormulaR1C1 = "aaa111aaa" Application.Goto Reference:="Macro2" End Sub まだペーストするときにA1の内容とならず直接入力となっています。 これをどう変更すればいいでしょうか?

  • Excelマクロを削除するマクロについての質問です。

    Excelマクロを削除するマクロについての質問です。 現在Excel2003で、記入に便利なようにマクロを使って「パソコンボランティア活動報告書」(以下"活動報告書")を作っています。 この活動報告書をセキュリティ警告(マクロを有効にする等)が出ないようにしてホームページに載せたいので、私なりに「新しいマクロの記録」を使って、「マクロ削除」のマクロを作ってみました。 しかしこれでは今までのマクロは削除されますが、「マクロ削除」マクロが残ってしまいます。 今までのマクロはもちろんのこと、「マクロ削除」マクロを消すためにはどうすればいいのでしょうか? Sub マクロ削除() ' ' マクロ削除 Macro ' ' ActiveSheet.Unprotect ActiveWindow.SmallScroll Down:=9 Range("Q27:R27").Select Selection.ClearContents ActiveWindow.SmallScroll Down:=-21 Sheets("リスト項目").Visible = True Application.DisplayAlerts = False Sheets("リスト項目").Delete Cells.Select With Selection.Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween .IgnoreBlank = True .InCellDropdown = True .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Range("E4:P4,J5:AG5,E6:N6,R6:AG6,F7:J7,O7:AG7,C15:AG17").Select Range("C15").Activate ActiveWindow.SmallScroll Down:=9 Range("E4:P4,J5:AG5,E6:N6,R6:AG6,F7:J7,O7:AG7,C15:AG17,I27:O27,C28:AG41"). _ Select Range("C28").Activate ActiveWindow.SmallScroll Down:=15 Range( _ "E4:P4,J5:AG5,E6:N6,R6:AG6,F7:J7,O7:AG7,C15:AG17,I27:O27,C28:AG41,C42:AG44"). _ Select Range("C42").Activate Selection.ClearComments ActiveWindow.SmallScroll Down:=-36 Range("AC4:AE4,F5:I5,J5:AG5,E6:N6,R6:AG6,F7:J7,O7:AG7").Select Range("O7").Activate Selection.ClearContents Range("E4:P4").Select ChDir "C:\work" ActiveWorkbook.SaveAs Filename:="C:\work\yyyymmddパソコンボランティア活動申請及び報告書.xls", _ FileFormat:=xlNormal, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False Range("E4:P4").Select End Sub

  • excel マクロ

    Sub Macro1() ' ' Macro1 Macro ' ' ActiveCell.Offset(-1, 0).Range("A1:G1").Select Selection.Copy End Sub マクロの記録だけでこのコードを作ることは可能でしょうか?

  • Excelのイベントマクロ

    Private Sub Worksheet_Activate()に関する質問です。 ワークシート1と2があるとします。 ワークシート1は普通のデータが記されており、それのソートを実行するマクロをMacro1、そのデータから重複したものを外してソートするマクロをMacro2とし、Macro1から呼び出してます。 今、シート2を開いたときは必ず、シート1でMacro1を実行するようにしたいのですが、以下のように記述すると、無限ループになってしまいうまくいきません。 どなたか、方法をお教えください。 Sheet2に記載したイベントマクロ Private Sub Worksheet_Activate() Sheets("Sheet1").Select Macro1 Sheets("Sheet2").Select End Sub 標準モジュールに記載したマクロ Sub Macro1() Dim team As Integer ActiveSheet.Unprotect ("pass") Range("A3:c18").Select Selection.Sort Key1:=Range("c3"), Order1:=xlAscending, Key2:=Range("A3") ,Order2:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal team = Range("b1").Value ActiveSheet.PageSetup.PrintArea = "$A$3:$c$" + CStr(team + 2) Macro2 Range("A1").Select ActiveSheet.Protect ("pass") End Sub Sub Macro2() Range("i3:j18").ClearContents Range("i3").Select Selection.Consolidate Sources:="R3C6:R18C7", Function:=xlMax, TopRow:=False,LeftColumn:=True, CreateLinks:=False Range("i3:k18").Select Selection.Sort Key1:=Range("k3"), Order1:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal Range("j3:j18").Select Selection.NumberFormatLocal = "0_);[赤](0)" End Sub

  • マクロが実行しない

     二行三列を一枡として月の勤務割表を作成しています。マクロで同じ事を しているのにMacro1の方が実行しません。お教え願えませんでしょうか。 (尚、図形を枠線上にコピペしています。) Sub Macro1()実行しません。 Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 10 To 103 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste End Select Next Next End Sub Sub Macro2()実行します。 ActiveSheet.Shapes.Range(Array("四角形1")).Select Selection.Copy Range("J11:K11").Select ActiveSheet.Paste End Sub

  • EXCELのマクロについて

    お世話になっております。 以下のマクロを1万行分繰り返したいのですが、回数を1万回と指定する構文を 教えてください。よろしくお願いします。 Sub Macro16() ' ' Macro16 Macro ' ' Keyboard Shortcut: Ctrl+Shift+Z ' ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(-1, 0).Range("A1:M1").Select Selection.Copy ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "7/5/1905" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "7/6/1905" ActiveCell.Offset(1, -2).Range("A1").Select End Sub

  • 記録したマクロを他のシートにも同時に実行する方法

    いつもお世話になります。 下記のように選んだセルのデータを削除するマクロを「マクロの記録」で作成しました。 Sub Macro2() ' ' Macro2 Macro ' ' Range("E5:R12").Select ActiveWindow.SmallScroll Down:=6 Range("E5:R12,E14:R22").Select Range("E14").Activate ActiveWindow.SmallScroll Down:=12 Range("E5:R12,E14:R22,E24:R28").Select Range("E24").Activate ActiveWindow.SmallScroll Down:=6 Range("E5:R12,E14:R22,E24:R28,E30:R34").Select Range("E30").Activate Selection.ClearContents End Sub 「Macro2」の実行ボタンを作り、シート名「1」~「31」の同じセルのデータをボタンをクリックして、一括で削除したいのですが、この記述をどのように変更したらよいのか、マクロを始めたばかりの初心者の私にご教授して頂けませんでしょうか? 「マクロの記録」で各シートを選び、セルを選んでdeleteして行く方法はありますが、今後のためにも記述の編集で出来る方法をお教え下さい。 よろしくお願いいたします。 当方、エクセル2010で作成していますが、エクセル2002の環境で使います。

専門家に質問してみよう