• 締切済み

エクセルVBA 空白行削除の処理方法がわかりません

いつもお世話になります。 今、V列の8行目以下にデータが入っており、偶数行にデータが入っています。 最終行までの途中に空白行があり、データの入っている偶数行は残したまま、それ以外の行を削除したいです(添付写真)。 8行目から STEP 2ごとに Cells(i+2,22)が空白ならば i+1 行目とi+2 行目を削除 するForループでは時間がかかりすぎています。 早く処理できる方法があればご教示下さい。 宜しくお願い致します

みんなの回答

回答No.4

ちょっと難しく考えすぎていませんか。 こういう時こそ、エクセルの基本的な機能の出番だと思いますよ。 というわけで、サンプルデータを拵えるのが面倒なので提案だけ。 とりあえず図から見える範囲でZ列辺りに   Z3セル:=IF(OR(Y3<>"",Y2<>""),"",1)     ※行が分からないので、3行目からデータがある体で。      上記は一例。削除したい条件でフラグを立てられるような式に。 コレを全行に仕込む。 ※↑:Range("Z3:Z" & 最下行).Formula = "=IF(OR(Y3<>"""",Y2<>""""),"""",1)"   「最下行」には適切な行番号をどうぞ。   手打ちなのでダブルクォーテーションの数を間違ってるかも。   フィルタで「Z列が1」を抽出。 抽出されたものを削除。 フィルタを解除。 ※この辺はマクロの記録でどうぞ。 (必要ならZ列をClearContents) これで良いような気がするんですが、いかがなモノでしょう。 なお、一回だけの処理なら手作業の方が早いのは言うまでもないです。

すると、全ての回答が全文表示されます。
  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.3

素早く処理したい時は 削除する行を1ヶ所に集めた方がいいです。 フラグを立ててソートを掛ければ 後はいらない行を一括で削除す るだけですから 処理は断然速くなります。

vesper580109
質問者

お礼

Chiquilin様 ご回答頂きありがとうございました。 r+1、r+2を一回ずつ削除していくのではなく、例えばどこか行を決めて削除したい行r+1、r+2にフラグ1を立てていき、最終行までForで回した後、フラグ1が立っている行をまとめて削除するイメージでしょうか。試してみたいと思います。 ありがとうございました。

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

>8行目から STEP 2ごとに Cells(i+2,22)が空白ならば i+1 行目とi+2 行目を削除するForループでは時間がかかりすぎています。 削除対象の列を限定すれば少しは早くなるかもしれません。 また、i+1行とi+2行を同時に削除する方法も試されると良いでしょう。 他人のアイディアに頼らず自分の応用力でトライ&エラーを繰り返してより良いコードにしてください。 尚、画像を添付しても元データと加工後のデータが比較できない状態では無意味になりますので元データ範囲のみの加工後のデータ範囲を表示することで解決策が見えてくるかもしれません。

vesper580109
質問者

お礼

bunjii様 ご回答いただきありがとうございます。 i+1行とi+2行を同時に削除 で .ROWS(r+1 &":"& r+2) で若干早くなりました。 添付画像にかんしてはimogashi様もご指摘のように、アップするのであればわかりやすい説明、見やすい表示をしなければ無意味ですね。以後、しっかり考えたうえで貼り付けるようにします。 ありがとうございました。

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

http://h1r0-style.net/excelvba/howto-delete-rows-with-blank の記事を参考にして、やってみてください。VBAコードの考えが、結構むつかしいと思うので、もし判らなければ、>Forループで、やることで我慢せざるを得ないだろう。したくてもVBAでできないことはたくさんあるだろうすること。 削除という考えでなく、残したいデータを、別表にVBAで作るという考えでやって、処理完了時間が遅いかな。 写真を挙げるだけでなく、その説明をしておくこと。罫線は表示形式によって、引かれているのだろうね。 画像が暗く小さすぎて、よく見えないし。

vesper580109
質問者

お礼

imogasi様 いつもありがとうございます。 リンク頂いた記事に沿って試してみました。 データ行が偶数行なので ForのStepを2とし、変数 Kuhakugyoを複数行 r、r-1としてみたら ほぼ得たい結果が有られました。 ありがとうございました。助かりました。

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

関連するQ&A