• ベストアンサー

エクセル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

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 テンプレート等のデータクリアだと思います。 ロックしてない(クリアする)セルに予め名前をつけておき、   Range("名前").ClearContents じゃダメなのかな? これがダメなら、ご提示のマクロのようになると思います。

merlionXX
質問者

お礼

さっそくありがとうございます。 実は、それぞれレイアウトが異なる複数のシートに対してそれぞれのシートがアクティブなときにだけ働けばいいので、同じマクロで済ましてしまおうとたくらんだのです。 やはり、For Nextですか・・・。

関連するQ&A

  • エクセル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

  • 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迄のデータです。 マクロのレベルは初級レベルです。 よろしくお願いします。

  • エクセルVBAでセルのFormulaHiddenが失敗!?

    エクセル2000です。ブック内の全シートの計算式を非表示にするため以下のマクロを作成しました。 ところが実行時エラー1004「RangeクラスのLokedプロパティを設定できません」とエラーになります。 どうも結合セルがひっかかるようですが、理由がわかりません。 ご教示願えませんでしょうか? Sub Formula_Hidden() For Each ws In Worksheets ws.Activate For Each C In ActiveSheet.UsedRange If C.HasFormula = True Then C.Locked = True C.FormulaHidden = True i = i + 1 End If Next C Next ws MsgBox i & "個のセルをFormulaHiddenしましたよん。" End Sub

  • エクセルVBAでShapesまたはDrawingObjects

    シート上のフォームなどを表示/非表示するためtest04を書きましたが、「実行時エラー438 オブジェクトはこのプロパティまたはメッソッドをサポートしていません」となります。 しかし、Test05のように同じことをForNextで回せばうまくいきます。 また、Test06のようにShapesをDrawingObjectsに書き換えただけでもうまくいきます。 では、Test04がエラーになるのはなぜでしょうか? Sub test04() With ActiveSheet.Shapes If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub Sub test05() For Each sp In ActiveSheet.Shapes If sp.Visible = False Then sp.Visible = True Else sp.Visible = False End If Next End Sub Sub test06() With ActiveSheet.DrawingObjects If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub

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

    エクセルのマクロ(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で xlOn xlOff の切替

    エクセル2000です。 ワークシート上に配置したオブジェクトのVisibleのTrue Falseについては、test01の方法で切り替えることが出来ます。 では、Test02でIfで判定している、xlOn xlOff の切替についても同様にNOTを使って簡単に記述することはできないでしょうか?xlOn xlOff はTrue False ではないから無理なのでしょうか? Sub test01() Dim o As Object For Each o In ActiveSheet.Buttons o.Visible = Not o.Visible Next o End Sub Sub test02() Dim o As Object For Each o In ActiveSheet.CheckBoxes If o.Value = xlOn Then o.Value = xlOff Else o.Value = xlOn End If Next o End Sub

  • エクセルのコード表示について

    ○月○日 (月曜日)   A    B   C   D   E 1 usagi 2 kame 3 tonbo 4 ・・ABC 3 6 5 ・・DEF 4 5 6 ・・KAME 5 5 7 ・・USAGI 8 8 以下 同文 ○月○日 (火曜日) ・・kirin 6 ・・LION 1 yamada 11 saitou 5 ・・inu 8 ○月○日 (水曜日) ・・kemusi 9 koyama 8 ・・sakana 6 ・・imoi 7 ・・nabe 9 これが土曜まで続きます ・・○○ 数字  数字 を消したいので、前にほかのサイトで Sub Test() Dim c As Range For Each c In ActiveSheet.UsedRange If c.Value Like "・・*" Then c.Resize(, 3).ClearContents End If Next End Sub を教えてもらいました コード表示のところに入力したら、 ・・○○ 数字 だけを消せるということで 今日まで使ってきたのですが、急に コード表示から実行すると 実行時エラー’1004‘: アプリケーション定義または オブジェクト定義のエラー というのが出てくるようになりました すると、月曜と火曜はきれいに ・・○○数字は消えるのですが、水曜以降はそのまま残っています 月曜から土曜まできれいに消す方法は無いでしょうか? 素人にわかりやすいように教えてください 完全に削除できるシートと出来ないシートがあります 出来ないシートを出来るようにしたいです Sub Test() Dim c As Range For Each c In ActiveSheet.UsedRange If c.Value Like "・・*" Then c.Resize(, 3).ClearContents End If Next End Sub じゃなくても構いませんので、簡単に出来る方法などもありましたら 教えてください

  • エクセル マクロのいれ方

    エクセルを使って表を作っています。 自分のしたい事をするには、マクロを組まなくてはならないことが分かりました。 私はマクロは使ったことがないので、本来ならちゃんと勉強すべきなんですが、締め切りが迫ってるので、マクロのVBAを調べました。 したいのは、『ロックされているセル以外のデータをクリアにする』ということなんですが、その為には下記のVBA?を入れればいいらしいのです。 Sub UnlockCellClear() Dim Rng As Range For Each Rng In UsedRange   If Rng.Locked = False Then     Rng.Clear     Rng.Locked = False   End If Next End Sub ツール→マクロ→VBA→標準モジュール→Module1を開き、上記のVBAを入れてみましたが出来ませんでした。 そんな簡単なことじゃないんですかね? ど 質問の説明が下手でしたら申し訳ありません。

  • エクセル2000でのVBAについて

    下記のVBAを書いているのですが、3つのIF文を1つに まとめたいのですが教えてください。 If Range("E16") = "申請者" Then Sheets("ログイン").Select Sheets("報告票").Select ActiveSheet.Unprotect Range("M3:U7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("E16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("D3:L7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("F16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("BS3:CA7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select end if end if end if

  • エクセルVBAについて

    http://okwave.jp/qa/q7236213.html 上記質問の発展形なのですが 同様のことを E列に日付 F列に売上 G列に結果 でやりたいのですが この時A列~C列のマクロも残したままでしたいのですが 下記のように同様のプロシージャーを下段に書けばできると思ったのですが うまくいきません。 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$A$1" Then Exit Sub If Target = "" Then Exit Sub Range("C10:C65536").ClearContents With Range(Cells(9 + Range("A1").Value, "C"), Cells(Range("A65536").End(xlUp).Row, "C")) .FormulaR1C1 = "=MAX(RC2:R[" & -Range("A1").Value + 1 & "]C2,FALSE)" .Value = .Value End With End Sub Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$E$1" Then Exit Sub If Target = "" Then Exit Sub Range("G10:G65536").ClearContents With Range(Cells(9 + Range("E1").Value, "G"), Cells(Range("E65536").End(xlUp).Row, "G")) .FormulaR1C1 = "=MAX(RC6:R[" & -Range("A1").Value + 1 & "]C6,FALSE)" .Value = .Value End With End Sub どなたかお知恵を拝借できませんでしょうか?

専門家に質問してみよう