• ベストアンサー

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

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

こんにちは。 ずいぶん、日にちが経ちましたが、以下のように、マクロを改善してみてください。 セル単位でクリアすると回数が多い場合は、非常に遅くなります。 以下の方法は、纏めて最後にクリアしますので、多少早くなると思います。試してみてください。 Sub Cellsdel() Dim c As Range Dim wRange As Range Application.ScreenUpdating = False With Sheets("Sheet1")   For Each c In .Range("A5:D10")   '←この範囲も入力データ全体にすれば良いと思います。     If c.Locked = False Then       If wRange Is Nothing Then        Set wRange = .Range(.Cells(c.Row, c.Column), .Cells(c.Row, c.Column))       Else        Set wRange = Application.Union(wRange, .Range(.Cells(c.Row, c.Column), .Cells(c.Row, c.Column)))       End If     End If   Next   If Not wRange Is Nothing Then     wRange = ""             '纏めてクリアする   End If End With Application.ScreenUpdating = True End Sub

mmmamam
質問者

お礼

かなり日数がたってしまってからの質問に対し、 すばやくお返事をいただきまして、本当にありがとうございました。 教えて頂いたコードで試しましたら、見事短時間でデータを消去することが出来ました。 本当にありがとうございます。 また何かありましたら、よろしくお願いいたします。

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

c.ClearContents を c.MergeArea.ClearContents とすれば結合セルも消去出来ます。

mmmamam
質問者

補足

お返事が遅くなり申し訳ありません。 ちょっとパソコンが調子悪く、ネットにつなげないでいました。 No.1の解答にも書かせていただきましたが、 昨日、教えていただいた方法で試したのですが、 計算式が多いのと、別シートへ反映させているためか、 フリーズ状態になってしまい、いくら待っても処理が終わってくれません。 こういった場合は、マクロを組みなおしたほうがいいのでしょうか? よければまた教えていただけると助かります。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

こにちは。 以下の部分を変更してみてください。 c.ClearContents ↓ c = ""

mmmamam
質問者

補足

お返事が遅くなり申し訳ありません。 ちょっとパソコンが調子悪く、ネットにつなげないでいました。 昨日、教えていただいた方法で試したのですが、 計算式が多いのと、別シートへ反映させているためか、 フリーズ状態になってしまい、いくら待っても処理が終わってくれません。 こういった場合は、マクロを組みなおしたほうがいいのでしょうか? よければまた教えていただけると助かります。

関連するQ&A

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

  • エクセル マクロを使用してのセル内の値消去

    win2000 officeXpです。 現在、マクロを使用して複数のシートの特定セル内の値を消去するマクロを Sub データ消去() Worksheets("A").Range("B5:AF9").ClearContents Worksheets("B").Range("B5:AF9").ClearContents End Sub のようにしていますが、これではセルに挿入していたコメントが消去されません。 コメントも消去する方法はあるのでしょうか。  また、この方法があればもっと便利なんですが、このマクロにあるセル(B5:AF9)はロックがはずされていますので、それぞれのシート内のロックがはずされているセルを探し出し、そのセルの値とコメントを削除できるようなマクロはあるのでしょうか? よろしくお願いします。

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

  • セル入力しているデータをシート名に一括変換する方法

    エクセルにてセル入力しているデータをシート名にするためにネットで検索をかけ以下のマクロが掲載されていました。 Sub SheetName()   ActiveSheet.Name = ActiveSheet.Range("B2") End Sub このマクロを全シート一括で行いたいのですが、どのようにすればよいのでしょうか? お教え願います。

  • Excel VBA データの入っているセルの取り出し

    Excel VBA データの入っているセルの取り出し Excel2007使用です。 大きなセル範囲の中にデータが点在している場合に、そのデータを一か所にまとめるマクロを作りたいです。セル範囲は決まっています(A1:Q100)。最終的には隣のセルの1列にまとめたいです。 以下のようなマクロを作ってみましたが、いずれも作動しませんでした(エラーメッセージも出ず) NullをEmptyに変えてみても同じでした。 (ややこしいですが、アクティブセルはSheet2、Sheet1へ貼り付けたい) (とりあえずシート内で列上部にまとめようとした) Dim myRange As Range For Each myRange In Range("A1:Q100") If myRange.Value = Null Then myRange.Delete xlShiftUp End If Next myRange End Sub (1行1列ずつの参照をループさせて「空白でない」セルを切り取り-貼り付けさせようとした) Worksheets("sheet2").Activate Dim Gyou As Integer Dim Retsu As Integer For Gyou = 1 To 100 For Retsu = 1 To 17 If Cells(Gyou, Retsu).Value = Not Null Then Cells(Gyou, Retsu).Cut Destination:=Worksheets("sheet1").Cells(5, 2) End If Next Retsu Next Gyou End Sub また、以下のマクロは、実行すると現状のままSheet1のE列以降に移るだけで、データのあるセルだけがまとまるという状態にはなりません。 Range("A1:Q100").SpecialCells(xlCellTypeVisible).Cut Destination:=Worksheets("Sheet3").Range("E1") End Sub 以下は某サイトで、まさに「空白セルを削除しデータの入ってるセルを上詰めにする」というマクロが紹介されていたので、加工してやってみましたが、「RangeクラスのDeleteメソッドが失敗しました」という実行時エラーが出てできませんでした。 Dim WS As Worksheet Dim myRng As Range Dim Lrow As Long Set WS = Worksheets("Sheet1") Lrow = WS.Range("A" & CStr(Rows.Count)).End(xlUp).Row Set myRng = WS.Range("A1:A" & CStr(Lrow)) myRng.SpecialCells(xlCellTypeBlanks).Delete xlShiftUp End Sub データの入っているセルだけを取り出して一つの列にまとめたいのですが、どうしたらいいのでしょうか。

  • エクセル データ消去についてのマクロ

    セル内のデータをクリアする以下のマクロを設定しました。 Sub データ消去() Sheets("1").Range("B5:AF9").ClearContents Sheets("1").Range("B5:AF9").ClearConmments Sheets("1").Range("B11:AF15").ClearContents Sheets("1").Range("B11:AF15").ClearConmments Sheets("2").Range("B5:AF9").ClearContents Sheets("2").Range("B5:AF9").ClearConmments Sheets("2").Range("B11:AF15").ClearContents Sheets("2").Range("B11:AF15").ClearConmments Sheets("3").Range("B5:AF9").ClearContents Sheets("3").Range("B5:AF9").ClearConmments Sheets("3").Range("B11:AF15").ClearContents Sheets("3").Range("B11:AF15").ClearConmments End Sub 今後、シート及び選択セルが増える予定ですが、 各々のシートのクリアする選択セルは同一です。 もっと簡単な方法はないのでしょうか? よろしくお願いします。

  • エクセルVBで特定のセルのデータを削除する方法

    はじめて質問させて頂きます。 エクセルで、特定のセルに特定の入力があった場合に、特定のデータを削除する方法を教えてください。 エクセルのバージョンは、2010です。 VBのバージョンは、7.0です。 例えば、 A1セルに、 1 と入力した際に、C1からG1までのデータを削除する。 A2セルに、 1 と入力した際に、C2からG2までのデータを削除する。                     ・                     ・                     ・ A10セルに、 1 と入力した際に、C10からG10までのデータを削除する。 If Range("A1") = "1" Then Range("C1:G1").Clear End If と、やってみましたが、できませんでした。 宜しくお願い致します。

  • 再質問:エクセルであるセルに数字を入力すると他のセルのデーターから文字が入力 

    すいません、nish6さんの回答で解決し締め切った後で、また分からなくなりもう一度質問しました。分からないところは最初と少し例が増えています。 例 sheet1   A B C  1 1   A1→A1を入力するとsheet2に入力されている        データーC列から、該当する番号を判断  ↑     して、ああとセル内に表示する   1を入力するとsheet2に入力されているデーターA列   から、該当する番号を判断して、東京とセル内に   表示する sheet2   A B  C D 1 1 東京 A1 ああ 2 2 千葉 A2 いい 3 3 埼玉 A3 うう 行はまだ下に続く 最初のnish6さんの回答をこの下に貼り付けましたが 分からないのは、sheet1にC列が増えたときマクロをどう変えればいいか分からないことです ご教授をお願いします ここから ↓ Private Sub Worksheet_Change(ByVal Target As Excel.Range)   Dim rg As Range 'セル   Dim rgfnd As Range '見つけたセル   On Error GoTo ErrorHandler   Application.EnableEvents = False   For Each rg In Target     'Sheet1のA列なら     If rg.Column = 1 Then       'Sheet2を検索       Set rgfnd = Worksheets("Sheet2").Range("A:A").Find(rg.Text)       If Not rgfnd Is Nothing Then         '見つかったら書き換える         rg = rgfnd.Offset(0, 1).Text         Set rgfnd = Nothing       Else         rg = rg.Text & ":nothing"       End If     End If   Next   Application.EnableEvents = True   Exit Sub ErrorHandler:   'エラー対応   Application.EnableEvents = True End Sub

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

専門家に質問してみよう