• ベストアンサー

【Excel VBA】条件つき行削除

imogasiの回答

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

ロジックの一例 ForNextでやると、行削除は最下行からやるほうが都合がいい。 コード データのあるシートをアクチブシートにして実行。 Sub tet01() d = Range("A65536").End(xlUp).Row For i = d To 2 Step -1 If dl = "Y" And Cells(i, "A") = "計上日" And dl = "Y" Then 'この行が計上日で、累計行 AND D列0が先にあり(dl=”Y")なら MsgBox i & "-" & x & " 削除処理" Rows(x & ":" & i).EntireRow.Delete dl = "N" '累計とのペアー待ち状態解消 End If If Cells(i, "A") = "累計" And Cells(i, "D") = 0 Then dl = "Y" 'D列0で累計行現れた x = i 'その行を記憶 End If Next End Sub ーーー 例データ 質問者の意図に沿わない部分があるかも知れないが、ご容赦を A列   B列     D列 集計 計数 1 計上日 3 4 累計 0<ーーD列,以下累計の跡の数字はD列 計上日 5 6 累計 11 計上日 7 8 累計 0 12 計上日 13 14 累計 0 15 計上日 16 17 累計 20 計上日 18 累計 1000 ーーー 結果 集計 計数 1 計上日 5 6 累計 11 12 15 計上日 16 17 累計 20 計上日 18 累計 1000 ーー 少数例のテストしかやってないこと、 万一ロジックの不完全があるかも知れないが、コード数は少ないと思う。

rx-z5815
質問者

お礼

回答ありがとうございます。 >ForNextでやると、行削除は最下行からやるほうが都合がいい。 手元にある参考書にも同様のことが書いてありました。 教えていただいたコードでも、うまくいきました。 MsgBox で、1回1回の削除の状態を確認できて、分かりやすかったです。 ありがとうございました。

関連するQ&A

  • 【Excel VBA】条件を満たすデータを順に抽出

    Excel2003を使用しています。 CSVでExcelに取り込んだデータの中から、条件を満たすものを順に抽出して一覧表を作成するマクロを作りたいのですが。。。 ・Sheet2のB列に“コード”と入力されている行のC列のデータ → Sheet1のC列2行目以下 ・Sheet2のC列に“合計”と入力されている行のD列のデータ → Sheet1のD列2行目以下 に順に表示させたいのですが、うまくいきません。 以前、いただいた回答で参考になりそうなものを見てみたのですが、手順というか何かヒントのようなものをいただけたら、自分でどうにかできそうなので、質問させていただきました。 よろしくお願いします。

  • 【Excel VBA】重複行の削除

    はじめまして。 IDの重複を削除し、日付データを横1列にまとめるVBAについてご教示いただけますと幸いです。 ------------------------------------------------------- ▼シート1(データ入力がされているシート)    A   B   C   D   E   F    1   ID 日付 2  1234  1/1  1/6  1/10  1/20   3  1234  2/3  2/20 4  1234  3/2 5  7777  1/10  1/15  1/20 6  7777  2/2   2/12  2/22 7  9876  2/3 ⇓ マクロ起動後 ▼シート2(重複行を削除しまとめたシート)    A   B   C   D   E   F   G   H 1   ID 日付 2  1234  1/1  1/6  1/10  1/20  2/3  2/20  3/2 3  7777  1/10  1/15  1/20  2/2  2/12  2/22 4  9876  2/3 【補足】 列情報  ・A列…ID  ・B-F列…日付(左詰め) ※日付はIDごと月毎に行が変わるため、IDによって複数行存在する場合があります。 ※A列のIDは重複しない場合もあれば、4行以上ある場合があります。 ※シート1のデータはおおよそ1000-5000行です。 ※IDに対して、日付は5つあれば問題ありません。そのためG列以降の日付を削除しても支障はございません。 ------------------------------------------------------ VBAの知識があまりなく、調べて出てきたものをコピペ使用も試みたのですが、 上手く動かす事ができませんでした…。 お力添え頂けますと幸いです…。 Windows10でエクセル2016を使用しております。 何卒宜しくお願いいたします。

  • Excel VBA 2つの条件を満たした行を削除

    Excel2003を使用しています。 CSVファイルを元にデータを作りたく、まずは不要なデータを削除しています。 J列=0の行とJ列=0の行のA列の値と同じ値がA列に入力されている行を削除したく、J列=0のA列の値を一旦別シートに抽出し、その抽出したデータとA列のデータをループして、一致したら削除というコードを書きました。 もし可能であれば、一旦別シートに抽出せずに処理したいのですが、その場合、どのようにコードを書けばいいでしょうか? よろしくお願いします。

  • 【Excel VBA】4つの条件を満たすデータを行ごと削除

    Excel2003を使用しています。 ある表の中のデータで、A列に次の条件に当てはまるデータを行削除したいのですが、マクロではどのように書いたらいいのでしょうか? (1) @(アットマーク)から始まる場合 (2) 数字から始まる場合 (3) ”キー”と入力がある場合 (4) 空白の場合 よろしくお願いします。

  • Excel2010で行ごとの重複削除

    Excel2010です。 A行目 1 3 5 5 2 2 3 B行目 2 3 5 5 4 4 C行目 1 9 7 9 9 ↓ A行目 1 3 5 2 B行目 2 3 4 5 C行目 1 7 9 というように、行ごとに重複の削除をしたいと思っています。 データタブに重複の削除があるのですが、列ごとにやるようなので、一度シート全体を 行と列を入れ替えて別シートにコピーして、 1列目全体を選択して、1列目で重複の削除を実行 2列目全体を選択して、2列目で重複の削除を実行 ・・・ というやり方もあるのですが、今扱っているエクセルは197行197列あります。 列選択、重複の削除アイコンをクリックするのを197回繰り返すのは大変です。 自動化する方法はないものでしょうか?

  • 【Excel VBA】複数の条件を満たすデータを行削除

    Excel2003を使用しています。 ある表の中のデータで、次の4つの条件を満たすデータを行削除したいのですが、マクロではどのように書いたらいいのでしょうか?  E列…データが入力されている  F列…空白  G列…空白  H列…空白 よろしくお願いします。

  • 【Excel VBA】複数範囲の並べ替えは可能でしょうか?

    【Excel VBA】複数範囲の並べ替えは可能でしょうか? Excel2003を使用しています。 CSVデータを元に作成された下記のような表があります。 A列…日付、B列…受注番号、C列…摘要(会社名・品名等)、D列…金額となっています。 6行目以下に上記の内容でデータが入力されていますが、会社ごとのデータ内で日付順に並べ替えをしたいのですが、VBAで複数の範囲を選択して、それぞれの範囲内での並べ替えは可能でしょうか?     A     B     C    D 6             ○○会社 7   1/20   123   AAA   1,000 8   1/15   120   BBB   2,000 9 10              計     3,000 11 12            ××会社 13 計の1行上と下は空欄行で、以下、会社名の後にデータが続くというパターンの繰り返しで数十社分あります。 Excelのデータ⇒並べ替えでは複数選択した状態での並べ替えはできないので、VBAで可能であればと思い、質問させていただきました。 よろしくお願いします。

  • Excel2003で重複したデータを削除したい

    Excel2003で重複したデータを削除する方法を教えて下さい。 A・B・C・Dの列の全てが重複するデータを削除したいのですが、可能ですか?AとB列は重複するけど、CやDのデータは重複していなければ、残しておきたいです。 以下イメージです。 行/列  A   B    C    D 1    なす  商店  100円  3/4  2    なす  商店  200円  3/2 3    なす  商店  200円  3/2 ------------------------------------- 以下、重複データ削除後のイメージ。 1    なす  商店  100円  3/4  2    なす  商店  200円  3/2

  • EXCELで約6000行の中から同じ行を削除。

    EXCEL初心者です。 約6000行のデーターの中から同じ名前の行を削除する方法を 教えていただけないでしょうか?   A    B   c   d   e  1  ○ 2  ○ ← 削除  3  ○ ← 削除 4  △ 5  △ ← 削除 よろしくお願いいたします。

  • EXCEL2010 VBAで空白行以外をコピー

    EXCEL2010を使用しています。 シートAではセルA1からA10に順にデータを入力していきます。 A1からA10のすべてにデータを入力する場合やA1からA4のみデータを入力する場合等があります。 このA1からA10のデータをシートBのA1からJ1にコピーしたいと思っています。 空白以外のデータをコピーして、コピー後はシートBのA1:J10で空白の列は削除したいと 思っています。 (例) シートA A1 ○ A2 ○ A3 × A4以降すべて空白 シートB A1 ○ B1 ○ C1 × D1からJ1までは列ごと削除 これをVBAで作成したいのですがどなたか詳しい方押してください。