• ベストアンサー

excel VBA フィルタでソートして行を削除する

質問させていただきたいのですが、 フィルタでソートして、その結果について、行ごと全体を削除したい考えています。 データは10,000行程はあります。 フィルタでタイトル行は12行目、 ソートした結果は、14行目やその他ソート条件によって様々な行から表示されます。 タイトルは残して、ソートした結果の行を全て削除したい場合、どのようにすればいいのか教えていただきたく存じます。 初心者の質問で申し訳ございませんが、宜しくお願い致します。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> フィルタでソートして削除しょうとしていたのがA列が空欄行のものをソートして空欄行を削除するでした。 最初からそう書いてください。 Sub test01() On Error Resume Next Range("A13:A" & Rows.Count).SpecialCells(xlCellTypeVisible).EntireRow.Delete On Error GoTo 0 End Sub

eb1976jp
質問者

お礼

出来ました。 文章が足りなくてすいませんでした。 大変助かりました。ありがとうございました。

その他の回答 (5)

  • turuzou
  • ベストアンサー率33% (15/45)
回答No.6

蛇足ですが、お時間のあるときに御覧になると ご自分で解決できるかもしれません。 エクセル技道場>マクロ http://www2.odn.ne.jp/excel/waza/macro.html の 特定列が未入力の場合その行を削除 http://www2.odn.ne.jp/excel/waza/macro.html#SEC5 空白行を行削除 http://www2.odn.ne.jp/excel/waza/macro.html#SEC4 すぐに役立つエクセルVBAマクロ集 - Excel VBA Macro Collection http://www.asahi-net.or.jp/~zn3y-ngi/

eb1976jp
質問者

お礼

お礼が遅くなり大変申しわけございません。 参考になりました。ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

> A12より下にデータはあるのですが、最下行まではびっしりない状態です。 x = Range("A" & Rows.Count).End(xlUp).Row これはA列最下行(エクセル2003までなら65536行)から上に向かっていって最下行が空白であれば最初にデータがあるセルの行、最下行にもデータがあれば連続する一番上のデータ入力行を取得する式です。最下行が空白でxが12なら、A13から下にデータはありえません。 ひょっとして式を変えましたか?

eb1976jp
質問者

お礼

出来ました!!! 大変申し訳ないのですが、一点、書き忘れていました。 まず、最初にフィルタでソートして削除しょうとしていたのがA列が空欄行のものをソートして空欄行を削除するでした。 その為に空欄行が認識されませんでした。 空欄行以外のものでやったら出来ました。 すいません。ありがとうございます。 あと一点すいませんがフィルタでソートして空白行の削除はどのようにやればいいのでしょうか? 教えて下さいばかりですいませんが宜しくお願い致します。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

> 上記のコードをやると、Xが12になり ということはA列にはA12セルより下には何もデータがないということになります。(あるいは最下行からA12までびっしりデータが入ってる?まさか) わたしは「仮にデータのある列がA列の場合、」という前提で書いたのですがいかがでしょうか?

eb1976jp
質問者

お礼

A12より下にデータはあるのですが、最下行まではびっしりない状態です。 私のやり方が悪いのかもしれません。 もう少し、試してみます。 ありがとうございます。

  • turuzou
  • ベストアンサー率33% (15/45)
回答No.2

下記も参考になりそうです。 行の削除 http://www2.odn.ne.jp/excel/waza/macro.html#SEC6

eb1976jp
質問者

お礼

ありがとうございます。 参考にさせていただきます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

タイトル行は12行目ということは13行目からがデータなんですね? 仮にデータのある列がA列の場合、ソート後に以下を走らせれば出来ると思います。 Sub test01() x = Range("A" & Rows.Count).End(xlUp).Row On Error Resume Next Range("A13:A" & x).SpecialCells(xlCellTypeVisible).EntireRow.Delete On Error GoTo 0 End Sub

eb1976jp
質問者

お礼

回答ありがとうございます。 やってみましたが出来ませんでした。 私のやり方、もしくは質問の仕方が悪いのかもしれません。 現在はソートまでしてある状態です。 13行からデータですが、ソートした結果14行目がデータの先頭行としてソートされています。 上記のコードをやると、Xが12になり、12行目のタイトル行のみが削除されてしまうようです。 私のやり方が悪いのでしょうか? ご教示いただけますと大変嬉しいです。 宜しくお願い致します。

関連するQ&A

  • Excel VBA フィルタオプションについて

    お世話になります。現在ExcelVBAでフィルタオプションを使用したプログラム製作を行っています。 検索条件を入力し実行ボタンを押すと、そのDB上で検索条件で指定されたものがフィルタオプションの機能を利用し表示されるようになりました。 今、新機能の実装するためフィルタオプションで抽出された結果のデータに対してのみ処理を行いたいのですが、 抽出レコードのデータを取り込もうにもDo LoopやOffset等でセルデータを取り込もうとすると どうしても一般的にフィルタオプションを解除していないと選択できないようなセルデータを取得しているようです。 例えば 1行目がタイトル行として 2行目から 1 2 3 4 5 6 とある場合にフィルタオプションで3以上のデータをフィルタさせると結果は タイトル 3 4 5 6 となりますが、この時この結果3,4,5,6をデータとして取り込みたいので A1からDo LoopでOffset(0,1)しながらデータを取り込むと 結果1~6までのデータが全て取れてしまいます。 この状況を何とか打破すべくお力添えをいただけませんでしょうか?

  • オートフィルタで抽出したデータの行を削除(VBAで記述)

    Excel2000を利用しています。 VBAで、オートフィルタを利用した作業を記述したいと思っています。 データは一行目にタイトルが入っています。 オートフィルタで抽出したデータを その行まるまる削除したいと思っています。 その時、タイトル行(1行目)を除いて オートフィルタで抽出された行のみ選択して 削除する、という場合、どのように記述すればよいのでしょうか。 自分では全然分からないので 教えてください、よろしくお願い致します。

  • EXCELのVBAでのsortについて

    EXCELでVBAを使ってsortしているのですが 1行目が項目行にもかかわらずデータとみなされて 並び変えられてしまいます Header:=xlGuess としているのですが・・・ 条件指定していて 同じデータで並び順を変えてsortかけると そちらはきちんと項目行が判断されて 正しく並び変ります とても困っています どうかご指導下さい

  • エクセルで行をソートする方法

    はじめまして、PCにあまり詳しくないもので質問させていただきます。エクセルで列をオートフィルターを使ってソートするように行をソートする方法はあるのでしょうか??困っています。どなたか分かる方がいました是非お教えください。 宜しくお願いいたします。

  • エクセルVBAで重複データの削除

    A列、B列、C列・・・とデータが入っていて、B~D列の5行目から10行目が関連の有るデータのかたまりとします。 C~D列の全てのデータが重複している場合に、最初のほうのデータ(行番号が小さいほう)を残すものとして、重複データを削除したいのです。 削除するときは、 B~Dの範囲で削除する。A列等は削除しない。 削除したらデータは上に詰める。 データはソートしない。 ということをやりたいのですが、簡単に出来ますでしょうか? 良く覚えていないのですが、ネット上で色々探してみても、必ずソートしている気がしたので、ソートしない方法が知りたいのですが。

  • Excelで2行単位のソートの出来る方法があれば教えてください。

    Excelはとっても便利ですが、データの並び替え・フィルタ処理をするには、1行単位で行うようです。 項目が多い場合、1行単位でデータを記入すると横(若しくは縦)に相当広がり入力が大変不便です。 そこで2行単位で項目を設定して入力しますと約半分の長さになり、入力もしやすくなります。 そこでご質問ですが、このような2行単位でのデータの並び替え、又はフィルタを使う場合、1行単位でソートされてしまいデータがめちゃめちゃになってしまいます。 どなたか、もしExcelでデータの並び替え、又はフィルタを行う場合、2行単位で出来る方法をご存知でしたら教えて頂けないでしょうか。 当方、ちなみにExcelにおきましては、簡単なマクロ処理などを行う知識ぐらいです。 Excel VBA につきましては、ボタン等の設定程度です。 以上、よろしくお願いします。

  • エクセルのソート(行)について

    エクセルで作成した行単位のデータを、ある列の値 でソートしようとしたら、以下の様なエラー表示が でました。 「この操作には、同じサイズの結合セルが必要す。」 どの行にも同じ列を対象に結合セルがありますが、 このような場合はソートできないのでしょうか? (各行ともセルの書式は同じです。) エクセルのバージョンは、EXCEL2000 9.0.3821 SR-1 です。 ご存知でしたら教えて下さい。

  • excelでsort

    60 50 40 30 20 10 10 20 30 25 15 05 ・ ・ ・ ---------------------- 上記のようにデータ400件ほど入力されています。 これを行毎に簡単にsortするにはどうしたらいいでしょうか? sort 結果-------------- 10 20 30 40 50 60 05 10 15 20 25 30

  • エクセル タイトル行とデータが別々に印刷されてしまいます。

    エクセル タイトル行とデータが別々に印刷されてしまいます。 改ページはされていないようですが、なぜでしょうか? タイトル行とオートフィルタでソートしたデータを一枚に印刷したいのですが。

  • エクセル2000で数字のソートについて

    以下は、エクセル2000でソートした結果です。 先頭はタイトル行で、各セルの[']は削除済みです。 ------- 図形ID 1410619 → (1) 1410620 → (2) 0010101 → (3) 0010102 → (4) 1550719 → (5) 1550720 → (6) ------- 期待した結果(右の番号で言えば3,4,1,2,5,6の順)とは異なります。 (1)と(2)のセルで、[F2]KEYを押してセル内で編集可能にしてから 何もせずに[Enter]を押し、再度ソートすると何故か期待通りの結果が 得られます。 数百行ある場合、いちいちセルごとに「[F2]を押して何もせずに[Enter]」 などやってられませんので、他に何かいい方法はないでしょうか? ※表示形式=文字列 です。先頭の"0"は必要です。

専門家に質問してみよう