• 締切済み

Excel 2000にて特定のシート(シート名 1~30)セル保護をし

Excel 2000にて特定のシート(シート名 1~30)セル保護をしていないデータ(結合セルを含む)を一括削除を行いたいのですが、サイトで見つけた物を使用してみたのですが、うまくいきませんでした。 よろしくお願いします。 Sub test2() ? Dim c As Range ? With ActiveSheet ??? .Unprotect ??? For Each c In .UsedRange ????? If Not (c.Locked) Then c.MergeArea.ClearContents ??? Next ??? .Protect UserInterfaceOnly:=True ? End With End Sub シートは40枚程あるのですが、削除したいのはシート1~30迄のデータです。 マクロのレベルは初級レベルです。 よろしくお願いします。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>計33シート存在します。 >このシート33シートのセル保護をしていないセルデータの一括削除でした 今度こそホントですね。 作成例: sub macro2()  dim i  dim c as range  for i = 1 to 33   with worksheets(i)    for each c in .usedrange     if c <> "" and not(c.locked) then c.mergearea.clearcontents    next   end with  next i end sub 作成例: sub macro3()  dim w as worksheet  dim c as range  for each w in worksheets   for each c in w.usedrange    if c <> "" and not(c.locked) then c.mergearea.clearcontents   next  next end sub

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

作成例: sub macro1()  dim i  dim c as range  for i=1 to 30   with worksheets(format(i, "@"))    for each c in .usedrange     if c <> "" and not(c.locked) then c.mergearea.clearcontents    next   end with  next i end sub #保護されたセルを触らなければ,シートの保護を解除する必要はありませんね。 ところで >シート名 1~30 >シート1~30迄のデータです 正しいシート名は一体どちらですか? それともシート名は全く更に別物で,1枚目から30枚目のシートと言いたかったのでしょうか。 こういった本筋と全く関係ないところで皆さんのアドバイスが「動かない」のは,お互いの時間の無駄以外何モノでもありません。

sutomo
質問者

補足

すいません。 シート名の説明が、あいまいでした。 シート名が、1~31迄と301と311の計33シート存在します。 このシート33シートのセル保護をしていないセルデータの一括削除でした。 シート名301と311も削除したいのですが、よろしくお願いします。

関連するQ&A

  • 結合セルを含むロックしていないセルの値の削除を複数シートで行いたい

    エクセルのマクロ(VBA)に関して、ご質問いたします。 私のレベルは入門編で、いろんなサイトや本を見て、そのまま利用しているくらいのものです。 次のコードは、他人様のサイトで見つけたものです。 Sub 結合セルを含むロックしていないセルの値の削除() Dim c As Range With ActiveSheet .Unprotect For Each c In .UsedRange If Not (c.Locked) Then c.MergeArea.ClearContents Next .Protect UserInterfaceOnly:=True End With End Sub この処理を複数シートに行いたいので、次のコードを(これも他人様のサイトからお借りしています)、上のコードの「Dim c As Range」の後に追加しましたが、アクティブシートは処理されましたが、全部のシートとはいきませんでした。 Dim Sh As Object For Each Sh In Sheets 単純に足しただけでは、だめなのでしょうか。 参考になるかどうかわかりませんが、シートの中には、値を削除しなくてもいいものも含まれています。 シートが全部で40枚弱あるので、全部のシートをチェックして、ロックされていないセル(結合セル含む)に値が入っていたら、値を削除する処理を、マクロ(VBA)で出来たらいいなっと思っております。 教えていただけますでしょうか。 どうぞよろしくお願いいたします。

  • エクセルVBAでUsedRange内の可視セルを指定する方法

    UsedRange内の可視セル限定で、ロックされていない場合、データをクリアしたいのです。 以下のようなコードを書いてみましたがSpecialCellsのところでコンパイルエラーになってしまいます。 どのように直せばよいのでしょうか? Sub シートクリア() Application.Calculation = xlCalculationManual Application.EnableEvents = False For Each c In Intersect(SpecialCells(xlCellTypeVisible), ActiveSheet.UsedRange) If c.Locked = False Then c.MergeArea.ClearContents End If Next Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True End Sub

  • エクセルVBAでLockされてないセルをClearContents

    エクセル2000です。 シートでロックされていないセルだけ中身を削除するマクロを作っています。以下でも一応作動はするのですが、いちいちForNextでまわさずにできないものかと質問させていただきました。 よろしくお願いします。(o。_。)oペコッ Sub クリアテスト() Dim c As Range For Each c In ActiveSheet.UsedRange If c.Locked = False Then c.ClearContents End If Next End Sub

  • シートの保護について

    特定のセル("C3:I3")を編集不可にしたいのですが、 下記プログラムにするとすべてのセル(シート)が保護されてしまいます。 どこがおかしいのでしょうか。 Private Sub CommandButton1_Click() ActiveSheet.Unprotect ・・・・・・・・・・ Range("C3:I3").Locked = True ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

  • エクセルVBA 保護シート&フィルタ実行 全シート

    VBA超初心者です。 たくさんのシートのあるエクセルで、 シート保護後もフィルタを使用できるようにVBAを設定したいと思ってます。 (現在エクセル2000を使用してます) ネットで調べてVBAを設定してみました。 しかし下記のようにするとコンパイルエラーになってしまうのですが、 正しい方法を教えていただけると助かります。 Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean)   Application.CommandBars("Cell").Reset End Sub Private Sub Workbook_Open()   With Application.CommandBars("Cell").Controls.Add( _            Type:=msoControlButton, Before:=1, Temporary:=True)     .Caption = "AutoFilter"     .OnAction = "ThisWorkbook.filter"   End With   With Worksheets.Select     .Unprotect     .EnableAutoFilter = True     .Protect UserInterfaceOnly:=True   End With End Sub Private Sub filter()   On Error Resume Next   Selection.AutoFilter End Sub

  • Excel 特定セルのデータを一括で消去させたい

    こんにちは。 どなたか教えていただけませんか? 車両別に毎日の日報データを入力するシートがあるのですが、 入力作業をするのがExcel初心者の人なので、関数が入っているセルを、 上書き・消去しないよう保護をかけて入力可能なシートのみ選択・入力できるようにしてあります。 1ヶ月ごとに入力したデータを消去し、新たなデータを入力していくのですが、 ロックされていないセルのデータだけを一括で消去出来るマクロがないかと探しています。 過去ログで Sub Cellsdel() Dim c As Range For Each c In Sheets("Sheet1").Range("A5:D10") If c.Locked = False Then c.ClearContents 'c.Clear '書式も含めて、全て消すならこれ一行 End If Next End Sub というマクロを見つけたのでカスタマイズして試してみましたが、 実行時エラー1004 結合されたセルの一部を変更することは出来ません となってしまいました。 入力するシートはC4:Z100までが1台分、以下、Z1200まで12台分の車両別に分かれていて、 入力するセルは飛び飛びになっています。 この説明では不足していると思いますが、補足をいたしますので、 どなたかご教授頂けないでしょうか? マクロはまだ初心者で色々と勉強している最中です。 よろしくお願いいたします。

  • Excel 特定セルのデータを一括消去

    こんにちは。 以前同じ質問をさせていただいたのですが、 しばらくネット環境から離れていたため、再度質問下さい。 車両別に毎日の日報データを入力するシートがあるのですが、 入力作業をするのがExcel初心者の人なので、関数が入っているセルを、 上書き・消去しないよう保護をかけて入力可能なシートのみ選択・入力できるようにしてあります。 1ヶ月ごとに入力したデータを消去し、新たなデータを入力していくのですが、 ロックされていないセルのデータだけを一括で消去出来るマクロがないかと探していましたが、過去ログで、 Sub Cellsdel() Dim c As Range For Each c In Sheets("Sheet1").Range("A5:D10") If c.Locked = False Then c.ClearContents 'c.Clear '書式も含めて、全て消すならこれ一行 End If Next End Sub というマクロを見つけたのでカスタマイズして試してみましたが、 実行時エラー1004 結合されたセルの一部を変更することは出来ません となってしまいました。 以前の質問させて頂いたときに、以下の変更箇所を教えていただいたので、 c.ClearContents ↓ c = "" こちらを試してみたのですが、計算式が多いのと、別シートへ反映させているためか、 ループ状態になってしまい、いくら待っても処理が終わってくれません。 再計算に時間がかかっているのでしょうか? こういった場合は、マクロを組みなおしたほうがいいのでしょうか? 入力するシートはC4:Z100までが1台分、以下、Z1200まで12台分の車両別に分かれていて、 入力するセルは飛び飛びになっています。 この説明では不足していると思いますが、補足をいたしますので、 どなたかご教授頂けないでしょうか? マクロはまだ初心者で色々と勉強している最中です。 よろしくお願いいたします。

  • 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等)でフィルタ出来ると助かります。 どうぞよろしくお願いします。

  • エクセルで2つのマクロを結合したい

    毎度お世話名なっております。 以前ここで教えてもらった保存時に全シートの入力済みセルに自動で保護がかかる<マクロ1>を教えてえもらって非常に多くのBookに採用しているのですが、今回同じBookの「計算表」シートの特定のいくつかのセルだけ保護がかからないようにしたく試行錯誤で2つのマクロをつなげてみたのですが情けないことに期待通りに動かず。 単に最初のマクロのEnd Subを削除しただけではうまくいかず。 どなたかHELPお願い致します。 <マクロ1> Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Const MyPassword = "" 'パスワード(省略可) Dim sh As Worksheet On Error Resume Next For Each sh In Worksheets sh.Unprotect Password:=MyPassword With sh.Cells '全セルのロックを外す .Locked = False '定数が含まれているセルにロックを掛ける .SpecialCells(xlCellTypeConstants).Locked = True '数式が含まれているセルにロックを掛ける .SpecialCells(xlCellTypeFormulas).Locked = True End With sh.Protect DrawingObjects:=True, Contents:=True, _ Scenarios:=True, Password:=MyPassword Next On Error GoTo 0 End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 保護解除() <マクロ2> ' 保護解除 Macro '' Sheets("計算表").Select Range("C6:D6").Select ActiveSheet.Unprotect End Sub

  • エクセル シートを保護してる時のセル結合

    エクセル2010を使用しています。 仕事の成果を一定の様式に記入してもらいます。書式、関数などを変更してもらいたくないのでシートに保護をかけました。 記入してもらうところだけセルのロックをはずし入力OKに設定しました。 しかし、シートの保護をかけるとロックをはずしててもセルの結合はできないんですね。なので、過去の質問からシートの保護がかかっていてもマクロですべての操作をしようできるというマクロ↓を参考にしてみました。 Sub seru() ActiveSheet.Protect UserInterFaceOnly:=True End Sub これと、セルを結合するマクロ↓を考えたのですが、どのように2つをくっつけたらいいのかがわかりません。 If TypeName(Selection)="Range"and Selection.Cells.Count>1 Then Selection.Merge ActiveSheet.Protect,AllowFormattingCells:=True End If 何かぬけているのかマクロを実行しても全く働いてくれません。 どうかよろしくです。

専門家に質問してみよう