• ベストアンサー

削除の条件を設定したい

セルの1~9行目までにはタイトルなどがあり、10行目からデータがあります。 現在、下記の記述でデータクリアの処理をしていますが、10行目以降にデータが無い状態で実行すると必要なタイトルやフィルターなどが消えてしまいます。 この状況を回避する簡単な記述はありますか? lR = Workbooks("集計.xls").Sheets("リストC").Range("E65536").End(xlUp).Row Range("A10:Q" & lR).Select Selection.ClearContents

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

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

こんにちは。 #3の回答者です。 >>削除する部分を最初から決めていればよいのではありませんか? > >マスター更新があるたびに最終行が動いてしまいます。 >・・・という意味に受け取って良いでしょうか? 固定範囲でもよいのではないでしょうか、ということです。 lR = Workbooks("集計.xls").Sheets("リストC").Range("E65536").End(xlUp).Row 仮にも、最終行をこう取っている限りは、固定範囲(Range("A10:Q65536"))にしたところで、同じことだというわけです。Excelのワークシートの実質的な範囲は動かしようがないし、Excel 2003では、65536行の範囲までに、最終行から先に何もなければ、それは、「ない」と同じようにしか働かないということです。ただし、書式なども下のほうに存在しないことが条件です。もし、書式設定などデフォルト以外の設定があったりすると、削除しに掛かります。掛かる時間はたいしたことではありませんが。 また、たとえば、こういうことでも良いわけです。 Dim i As Long With Workbooks("集計.xls").Sheets("リストC")   i = .Cells.SpecialCells(xlCellTypeLastCell).Row   If i <10 Then Exit Sub   .Range("A10:Q" & i).ClearContents End With

その他の回答 (4)

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

求まったIRが9(9含む)より小であれば Selection.ClearContentsをスキップするだけの話ではないですか?

Velvet-R
質問者

補足

その記述が分かりませんでした。休日や帰宅後夜の空き時間を利用して最近始めたばかりなので基本的な事すら理解しておりません。 今はやりたい事を検索して継ぎ接ぎしているだけですが、今年度内に必要と思われる作業が仕上がったら基礎から勉強します。

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

こんにちは。 >この状況を回避する簡単な記述はありますか? 削除する部分を最初から決めていればよいのではありませんか? Excelは、完全なデータのない空白は、メモリにカウントされませんから、かりに、 Range("A10:Q65536").ClearContents でも、Rangeオブジェクトの範囲に対する負担はありませんね。 あえて、E列で判定しなければならない理由がおありなら、こういうことでもすればよいと思いますが。 With Workbooks("集計.xls").Sheets("リストC")   If WorksheetFunction.CountA(.Range("E10:E65536")) = 0 Then Exit Sub   .Range("A10:Q" & .Range("E65536").End(xlUp).Row).ClearContents End With

Velvet-R
質問者

お礼

>削除する部分を最初から決めていればよいのではありませんか? マスター更新があるたびに最終行が動いてしまいます。 ・・・という意味に受け取って良いでしょうか? >Range("A10:Q65536").ClearContents でも、Rangeオブジェクトの範囲に対する負担はありませんね。 質問に記載した方法しか分からず、E列以外で完全に削除する書き換えが出来なかったのでこの方法に逃げました。 また、印刷レイアウトの都合により配置を変えることもできませんでした。 教えて頂いた方法も試してみました。勉強になります。 ありがとうございました。

回答No.2

With Workbooks("集計.xls").Sheets("リストC") myMAX = .Rows.Count '65536行以上のシートに対応 lR = .Range("E" & myMAX).End(xlUp).Row If lR >= 10 Then .Range("A10:Q" & lR).ClearContents '上は細かく指定しているが 下は指定していないので With使用 End With

Velvet-R
質問者

補足

anotherone様でしたらNo.1とNo.2のどちらの記述を勧めますか?その理由なども教えて頂けたら嬉しいのですが。 よろしくお願いします。

回答No.1

lR = Workbooks("集計.xls").Sheets("リストC").Range("E65536").End(xlUp).Row If lR < 10 Then lR = 10 Range("A10:Q" & lR).ClearContents

Velvet-R
質問者

お礼

ありがとうございます。 無事回避することができました。

関連するQ&A