• ベストアンサー

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

セル内のデータをクリアする以下のマクロを設定しました。 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 今後、シート及び選択セルが増える予定ですが、 各々のシートのクリアする選択セルは同一です。 もっと簡単な方法はないのでしょうか? よろしくお願いします。

noname#81542
noname#81542

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

  • ベストアンサー
  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.1

そのブックの全てのシートについて、セルB5:AF9とB11:AF15のセル内容とコメントを消去するマクロです。 今後どれだけシートを追加してもそのままでOKです。 'ここから------------------------------------ Sub CLRSHT()   For Each sh In Worksheets     sh.Range("B5:AF9").ClearContents     sh.Range("B5:AF9").ClearComments     sh.Range("B11:AF15").ClearContents     sh.Range("B11:AF15").ClearComments   Next sh End Sub 'ここまで------------------------------------ 後、例えば「Sheet1」という名前のシートだけ消去したくない場合は、以下のようにします。 'ここから------------------------------------ Sub CLRSHT()   For Each sh In Worksheets     If sh.Name <> "Sheet1" Then 'ここに処理を除外したいシート名を記載       sh.Range("B5:AF9").ClearContents       sh.Range("B5:AF9").ClearComments       sh.Range("B11:AF15").ClearContents       sh.Range("B11:AF15").ClearComments     End If   Next sh End Sub 'ここまで------------------------------------ 消去したくないシートが複数あった場合は以下のようになります。 If sh.Name <> "Sheet1" And sh.Name <> "Sheet2" さて、マクロの貼り付け方、実行の仕方が分からない場合は以下をご覧ください。 上の貼り付け方が分からない場合は、以下ご覧下さい。 1) ツール(T)-マクロ(M)-新しいマクロの記録(R)を開く 2) 「マクロの記録」ウィンドウが表示されたら、何も変更せずにOKをクリック 3) 画面上に二つのボタンが表示されたツールバーが現れたら、左側の「■」をクリックして記録終了 4) Altキーを押しながらF8キーを押して、マクロウィンドウを開く 5) マクロウィンドウから、編集(E)ボタンをクリック 6) 現れた「Microsoft Visual Basic」の右側に Sub Macro1() ' ' ' End Sub と書いてある部分を削除して、上の「ここから」から「ここまで」を貼り付ける。 7) もう一度Altキー+F8キーでマクロウィンドウを開き、実行(R)ボタンをクリック

noname#81542
質問者

お礼

ありがとうございました。 マクロ初心者の私に、すごくわかりやすい解説でした。 補足にと記入されたマクロについても、 便利なので使用したいと思います。 懇切丁寧な解説ありがとうございました。

その他の回答 (2)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

ブックの全シートをForループで巡回するとか。 消去対象にしたくない場合は、シート名の末尾に「!」をつけておいて、If文でスキップさせるとか。

noname#81542
質問者

お礼

回答ありがとうございました。

  • at121
  • ベストアンサー率41% (85/206)
回答No.2

dim set などで シートオブジェクトを変数にして for ・・ next  で繰り返し・・   下は withで・・シートオブジェクトを・・ for シート番号=1 to 3  with Sheets(シート番号)   .Range("B5:AF9").Clear   .Range("B11:AF15").Clear  end with next

noname#81542
質問者

お礼

回答ありがとうございました。

関連するQ&A

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

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

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

  • マクロを書き変えたいのですが、

    マクロを書き変えたいのですが、 現在使用してる 下記のマクロがあるのですが、 このマクロに Sheet1~Sheet18までの セル E12・E14・F14データーを消す式を足したいのですが、 どのように書いたらよいでしょうか? Sub 打ち出しデーター削除() ' ' 打ち出しデーター削除 Macro ' 打ち出しシートの時間・判定を クリアーにする。 ' ' Sheets("打 ち 込  用 ").Select Application.ScreenUpdating = False Selection.SpecialCells(xlCellTypeConstants, 1).Select Selection.ClearContents Sheets("★スタッフ一覧").Select Range("A1").Select End Sub あと シート数を指定しない場合も知りたいのです。 どなたか 力を貸してください。

  • マクロ作動

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) tm = Time() '現在時間を取得 If tm < TimeValue("08:30:00") Then Exit Sub If tm > TimeValue("09:30:00") Then Exit Sub  Dim ANS As Integer  Dim 値 As String If Sheets("営業確認").Range("D6").Value <> "" Then ANS = MsgBox(Sheets("営業確認").Range("B6") & "のデーターが残っています。クリアしますか?", _ vbYesNo) Select Case ANS Case vbYes Sheets("営業確認").Select Sheets("営業確認").Range("B6:E461").Select Selection.ClearContents Sheets("営業確認").Range("G6:K461").Select Selection.ClearContents Sheets("入力").Select MsgBox "クリアしました" Case vbNo MsgBox "キャンセル" End Select Else End If End Sub プログラムを組みましたが、上記のとおり時間設定している間は『キャンセル』をしてもセルを動かす度にマクロが動いてしまいます。 下記のようなマクロは可能でしょうか。 (1)一番最初にシートが開くとマクロが作動 (2)その後、指定してるシートに値があってもマクロは作動しない (3)また翌日シートを開くとマクロが作動 ※1日1回マクロが作動出来ればいいです

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • フィルタ オプションの設定(データ抽出) マクロ

    マクロを使って、「sheet1」のデターを「sheet2」へ抽出するのですが、Webで最適なものがあったので、その指示通りにやりました。その例題は再現できました。しかし、それを自分に合うように設定し直すとどうしてもできません。そこで気づいたのは、「No. 月日 項目名 収入 支出 摘要 購入店名」の各セルが何らかの関係があるのではと思ったのです。この項目を変えたて自分独自のものにしたいのですが、変えたり消してしまうと抽出できません。どこをどのようにしたらよいのか教えて頂けませんか。 Sub Macro2() Dim myRow1 As Long, myRow2 As Long myRow1 = Sheets("Sheet1").Range("B65536").End(xlUp).Row myRow2 = Sheets("Sheet2").Range("B65536").End(xlUp).Row If myRow2 >= 5 Then Sheets("Sheet2").Range("B5:H" & myRow2).ClearContents End If Sheets("Sheet1").Range("B2:H" & myRow1).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("B2:B3"), CopyToRange:=Range("B5"), Unique:=False End Sub

  • シートのマクロについて

    sheet1 をアクティブすると下記のマクロが実行されるようにしたのですが なかなかうまくいきません。 どなたか教えて下さい。 Sub クリア() Dim ans As Integer ans = MsgBox("全てクリアをしてもいいですか?", _ vbYesNoCancel + vbInformation, "クリア実行") Select Case ans Case vbYes Sheets("sheet1").Select Range("B4:W43,Z4:Z43,AA4:AA43").Select Selection.ClearContents Range("B4").Select Sheets("sheet1").Select Case vbNo MsgBox "NO" Case Else MsgBox "中止します" End Select End Sub

  • アクティブでない複数のシートのセルのコンテンツを一度でクリアしたい

    エクセルVBAで、アクティブでない複数のシートの所定のセルのコンテンツを一度でクリアしたいのですが、 現在アクティブではないシートをアクティブにしないでclearcontentsするとアプリ定義、オブジェクト定義エラーになってしまいます。 それぞれのシートをアクティブにしないとclearcontentsできないのでしょうか? どなたか教えてください。よろしくお願いします。 ------------------------------------------------------------------------------- Sub CLEAR_CONTENTS() Sheets(\"1\").Range(Cells(6, 3), Cells(6, 8)).ClearContents Sheets(\"2\").Range(Cells(6, 3), Cells(6, 8)).ClearContents Sheets(\"3\").Range(Cells(6, 3), Cells(6, 7)).ClearContents End Sub

  • マクロの実行とコマンドボタン

    office2000、WIN98SEです。 マクロの記録でマクロを作成しました。 これをコマンドボタンにコピペして実行するとエラーになります。マクロの実行から動かすとなんの問題もありません。なにがいけないんでしょう。教えてください。 ちなみにやりたいことは、複数のシートの同じセルを一気にクリアにしたいです。 記録したマクロは以下の通りです。宜しくお願いします。 Sheets(Array("用紙(1)", "用紙(2)", "用紙(3)", "用紙(4)")).Select Sheets("用紙(1)").Activate Range("B9").Select ActiveWindow.SmallScroll Down:=36 Range("B9:C58").Select Selection.ClearContents Range("F9").Select ActiveWindow.SmallScroll Down:=36 Range("F9:G58").Select Selection.ClearContents Range("I9").Select ActiveWindow.SmallScroll Down:=36 Range("I9:I58").Select Selection.ClearContents Sheets("用紙(1)").Select Range("B9").Select End Sub

専門家に質問してみよう