• 締切済み

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台分の車両別に分かれていて、 入力するセルは飛び飛びになっています。 この説明では不足していると思いますが、補足をいたしますので、 どなたかご教授頂けないでしょうか? マクロはまだ初心者で色々と勉強している最中です。 よろしくお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

セル結合されている場合、左上隅セル以外の値を触ろうとするとエラーが出たと思います。 それで結合されたセル範囲の左上隅1セルだけを処理対象にできないかをやってみました。 Sub test01() Dim cl As Range For Each cl In Range("a1:g10") If cl.MergeCells = True Then If cl.Address = cl.MergeArea(1).Address Then MsgBox cl.Address '(消去) 'MsgBox cl.MergeArea.Address 'MsgBox cl.MergeCells Else '(スキップ) End If Else '(消去) End If Next End Sub 少数テストではうまくいくのですが、 これが使えないでしょうか(質問の例のコードは生かして、一部に組み込んでロジックを修正するということ)。 どうでしょうか。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

#1です。 あやまって、数式を消さないため、たとえロックされてなくとも数式であればクリアしないようにしてみました。 Sub Cellsdel02() Dim c As Range For Each c In Sheets("Sheet1").Range("A5:D10") If c.Locked = False And c.HasFormula = False Then c.MergeArea.ClearContents 'c.MergeArea.Clear '書式も含めて、全て消すならこれ一行 End If Next End Sub

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 最初に、その作ってあるシート自体のロックと非ロックの部分のセルが間違いのないものとします。 そして、ロックされている部分は、消されては困る「数式」が入っているものとします。逆に、それ以外の部分は、消して困るという状態になっているものとします。以下のマクロは、ロックで判別しておりません。データの固定値と数式で分けます。 データ入力セルのみを削除 Sub DataCellsClearing() Dim myArea As Range Dim a As Variant On Error Resume Next Set myArea = Worksheets("Sheet1").Range("A1:D10"). _     SpecialCells(xlCellTypeConstants, 23) '固定値全て On Error GoTo 0 If myArea Is Nothing Then Exit Sub Application.ScreenUpdating = False  myArea.ClearContents Application.ScreenUpdating = True End Sub なお、 >上書き・消去しないよう保護をかけて入力可能なシートのみ選択・入力できるようにしてあります。 Worksheets("Sheet1").Protect , UserInterfaceOnly:=True として、マクロだけを扱えるように、シートのプロテクトを、起動時(Workbook_Open)に設定したほうがよいかもしれません。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

結合セルだけの問題であれば、 c.ClearContents ↓ c.MergeArea.ClearContents でOKです。 ただ、無限ループになるのは解せません・・・・。 他の理由でしょう。

関連するQ&A