- ベストアンサー
マクロ 抽出データ以外の罫線を消したい
お世話になります。 シート1に膨大なデータが入っているとして、 シート2にはシート1から抽出させたいデータをコピーするとします。 <シート1>←下記のように、生産者とその生産品種が5品目まで書かれている。 生産者 会員番号 品種1 品種2 品種3 品種4 品種5 山本太朗 0001 紅玉 ふじ 王林 千秋 旭屋京子 0002 ふじ 北斗 市川竜太 0003 王林 紅月 千秋 <シート2>←あらかじめ『ふじ』という抽出ボタンを用意。ボタンを押すたびに『ふじ』を生産している者のデータが<シート1>からコピーされる。 生産者 会員番号 品種1 品種2 品種3 品種4 品種5 山本太朗 0001 紅玉 ふじ 王林 千秋 旭屋京子 0002 ふじ 北斗 という形にしたいのですが、毎年毎年生産者数や、生産品種が変わるため(ちなみに生産者が年々減っていってます)、一度前の抽出データをきれいにクリアーしてから、再度抽出させたいのです。 データはクリアーできるのですが、この<シート1>の表には”罫線”が入っておりまして、その罫線を消去するマクロの命令文(?)が申し訳ありません、わからないのです。 ちなみにクリアーするのは、<シート2>の全てではなく、既に入力されているセルA1~T5までの表示は消したくありません。 あくまでも、前回抽出したデータのセル内容とその罫線を消して、 新たに抽出データを表示させたいのです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>データはクリアーできるのですが ということは、例えば Dim RangeObject As Range Set RangeObjext = 範囲の指定のための処理 RangeObject.ClearContents のようにClearContentsメソッドを利用していませんか? RangeObject.Clear にすればデータと罫線を含む書式もクリアできます >既に入力されているセルA1~T5までの表示は消したくありません どんなマクロを書かれているか分からないので具体的に書きにくいのですが、例えば Dim RangeObject As Range Set RangeObject = 範囲の指定のための処理 Set RangeObject = Intersect(RangeObject, Worksheets("Sheet2").Rows("6:65536")) RangeObject.Clear とすると、6行目以降しかClearの対象にしません もっと簡単には、シート2のデータ抽出前に Range("A6:Z65536").Clear で範囲決め打ちでClearしてしまっても良いように思いますが…
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
No2 merlionXXです。 テストしてみたら以下でも5行目の低部罫線は消えませんでしたのでコードを短く出来ました。 Sub test02() Range(Range("A6"), Range("A6").SpecialCells(xlLastCell)).Borders.LineStyle = xlNone End Sub
お礼
2回も回答していただき、本当にありがとうございます。 今回私が作っているものは、一覧表になっているため、罫線はあったほうがいいのです。 ただ、毎年確実に生産者数が減っているので、今までの命令文(?)ですと、 抽出するごとに、罫線の行がただただ増えていく・・・状態で。 それを解消したかったのです。 今回、merlionXXさんが教えて下さった命令文は、是非次回の時に参考にさせていただきますね。 テストまでしていただいて、誠実な姿勢に感動しました。 本当にありがとうございました。
- merlionXX
- ベストアンサー率48% (1930/4007)
罫線も含めたセル書式を値と一緒にすべて消すならClearでいけますが、罫線以外の書式は保存したいのであれば以下のようにすれば出来ます。 (5行目の底部の線を残すため、ちょっと長くなってます) Sub test01() With Range(Range("A6"), Range("A6").SpecialCells(xlLastCell)) .Borders(xlEdgeLeft).LineStyle = xlNone .Borders(xlEdgeBottom).LineStyle = xlNone .Borders(xlEdgeRight).LineStyle = xlNone .Borders(xlDiagonalDown).LineStyle = xlNone .Borders(xlDiagonalUp).LineStyle = xlNone .Borders(xlInsideVertical).LineStyle = xlNone .Borders(xlInsideHorizontal).LineStyle = xlNone End With End Sub
お礼
ありがとうございます!!! これです! zap35さんのおっしゃるとおり、 Range("A6:T").ClearContents としていました。 それで・・・ ”簡単な方法”として教えてくださった、 Range("A6:Z65536").Clear をそのままコピーさせていただきました。 キレイにとてもうまくできました! 本当に感謝しています! ありがとうございました!!!