• 締切済み

マクロで表を削除したいのですが

マクロについては知識が乏しく、いつも新しいマクロの記録を行なってから編集する方法で行なっている程度です。 今回、データの数(行数が)が一定でないものの内容をタイトル以外をクリアしたいと思っています。列はA~Jまであるのですが、下記のようなマクロでは何故かA列とB列のデータしかクリアできません。 J列までクリアできる方法を教えて下さい。 ちなみに表の下に文言が入るため、例えばA3:J65536までを範囲指定し削除するというマクロの記録はできません。 つたない説明ですみませんがよろしくお願いいたします。 ActiveSheet.Unprotect Range("A3").CurrentRegion.Select Selection.Delete Shift:=xlUp ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingRows:=True, AllowInsertingColumns:=True, _ AllowInsertingRows:=True, AllowSorting:=True

みんなの回答

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

(1)あるセル範囲の値や書式をクリアすればよいのか (2)コードでは、セル範囲の削除をしているが どちらが適当なのかな。 両者はあらゆる場合に同じでは無いはず。 どちらが適当かは、その後の用途によるが。

すると、全ての回答が全文表示されます。
  • nobu555
  • ベストアンサー率45% (158/345)
回答No.5

>文言も消えてしまいました A列に文言が入力されているのですね。 でしたら、以下のコードで Range("A3").Resize(Range("A3").End(xlDown).Row - 非削除行数, 10).Select ※非削除行数は、最初の2行+文言の行数としてください。 尚、文言の行数は、固定の場合のみです。 文言の行数が変動する場合は、 B列に入力するか、表と文言の間に空白行を挿入して 対応できるとベターですが。 この場合、コードはNo.2を使用してください。

すると、全ての回答が全文表示されます。
回答No.4

すいませんANo.3です。コードが間違ってました。 後したより左のがいいですかね。 If cells(i,1).Borders(xlEdgeLeft).LineStyle = xlNone Then Bordersが一個余計でした。 できればテストしたいのもやまやまなんですが、家のPCはエクセル アンインストールしちゃいまして;; ちなみにANO.2さんのがうまくいかないのはたぶん データが最初の1件しかないか、データ自体が0件のどちらかが原因でしょう。 データが無いからrowが最後まで行っちゃって文言も消してしまったと思われます。

すると、全ての回答が全文表示されます。
回答No.3

確認をしたいのですが 表の下に入る文言が格納されているセルには罫線が引かれていますか? もし引かれている場合は文言は表とくっついていますか? あと表の罫線はどのようになっていますか? 今回の場合はデータの有無に関係なく表の罫線が引かれている存在する セル全て消したいんですよね? 罫線は左・上・右・下・中にある縦線・中にある横線があるはずなので どれを引いているか教えて下さい。 もしかしたら罫線が存在する末尾をチェックする便利なものが 存在するのかもしれませんが、私はまだVBA歴は浅いのでわかりません。 一応これでいくんじゃないかと思われるのを書きます。 ただ、表のレイアウトがはっきりしないので確実に動くかはわかりません。 ちなみに起こる可能性があるエラーに関するコードは省いています。 dim i as long dim LastRow as long ActiveSheet.Unprotect for i = 3 to rows.count If cells(i,1).Borders.Borders(xlEdgeBottom).LineStyle = xlNone Then LastRow = i exit for end if next range(cells(3,1),cells(i,10)).selection Selection.Delete Shift:=xlUp ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingRows:=True, AllowInsertingColumns:=True, _ AllowInsertingRows:=True, AllowSorting:=True   

すると、全ての回答が全文表示されます。
  • nobu555
  • ベストアンサー率45% (158/345)
回答No.2

ANo.1です。 失礼しました。 Range("A3", Range("A3").End(xlDown)).Resize(, 10).Select 上記コードで如何でしょう。

micchy1974
質問者

お礼

ありがとうございます。複数行はクリアできたのですが、質問に記載した文言も消えてしまいました。なんとか表の部分だけをクリアする方法はないでしょうか。

すると、全ての回答が全文表示されます。
  • nobu555
  • ベストアンサー率45% (158/345)
回答No.1

>下記のようなマクロでは何故かA列とB列のデータしかクリアできません。 下記は、ヘルプの抜粋です。 CurrentRegion プロパティ アクティブ セル領域 (Range オブジェクト) を返します。 アクティブ セル領域とは、空白行と空白列で囲まれたセル範囲です。 つまり、C列が空白列のために A列とB列のみクリアされます。 >Range("A3").CurrentRegion.Select 上記コードを下記コードに変更してみては如何でしょう。 Range("A3", Range("A3").End(xlDown)).Resize(1, 10).Select

micchy1974
質問者

お礼

空白列があったからなんですね。 コードを変更してみたのですが、1行分しかクリアできませんでした。 複数行(表の部分全て)をクリアするにはどうしたらいいでしょうか?

すると、全ての回答が全文表示されます。