• ベストアンサー

ExcelVBA 一括行削除の応用編

こんにちは。 行削除についてのコーディングは理解できていますが、 更に条件を絞りたく、その書き方がわかりません。 例えば A列に大見出し、B列に小見出し、C列以降にデータ(複数行) がある場合、 1.対象の大見出しを検索 2.その大見出し行+関連する小見出し行、データ行を全削除 をしたいのですが、 大見出しの行の次の行に小見出しがあり、 その次の行からデータがあり、 データ行数はランダムなので、「○行削除」というように 指定できません。 説明が稚拙で申し訳ありませんが、 ご教示の程どうぞ宜しくお願いします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

n-junです。 ファイルをコピーしてから試してみて下さい。 Sub try() Dim r As Range, rr As Range Dim v As Variant v = Application.InputBox("大見出しは何?", Type:=2) If v = False Or v = "" Then Exit Sub Set r = Range("A:A").Find(What:=v, After:=Cells(Rows.Count, 1), LookIn:=xlValues, Lookat:=xlWhole) If r Is Nothing Then Exit Sub Set rr = r.End(xlDown).Offset(-1) Range(r, rr).EntireRow.Delete Set r = Nothing Set rr = Nothing End Sub ご参考になれば。

pepe0909
質問者

お礼

度々ありがとうございます! 無事解決致しました。 今後は自力でこのような回答にたどり着けるように勉強します。 本当にありがとうございました。

その他の回答 (4)

  • van111
  • ベストアンサー率14% (1/7)
回答No.5

大見出し 小見出し データ1 データ2 データ3 1 a ○ × △ 2 b ○ × △ 3 c ○ × △ 4 d ○ × △ 5 e ○ × △ 6 f ○ × △ 上記のデータで,例えば1の行を削除する場合は下記のようになります。 単体ではなく削除する項目は複数あるのでしょうか? Sub test() For i = Range("A65536").End(xlUp).Row To 1 Step -1 If Cells(i, 1) = 1 Then Cells(i, 1).EntireRow.Delete End If Next i End Sub

pepe0909
質問者

お礼

お礼が遅くなり申し訳ありません。 ご回答頂きありがとうございました! 参考にさせて頂きます。

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

>説明が稚拙で申し訳ありませんが、 下手、上手以前に、具体例を挙げるべきだ。回答者が質問内容やシートセル(行・列)の情況を誤解すると、回答が無駄になる、この質問は、質問者限り、この質問限りの回答になるタイプらしいからだ。 回答者に例を書かせて >例のような感じです、とはおかしいのでは。気づいて正確に補足するべきだ。回答者をテストしている場ではない。 またVBAコードの丸投げで、規約違反が疑わしい。 ーーー #1の例で説明すれば A列において、文字列A1(はユニークとする)をFind(What:="A1") で、在る行を見つける(=G1)。次にそのセルの次以下で空白で無いセルの行(A2の行)を探す(=G2)。 B列に移り、G1からG2-1までの行で、B列について、文字列"B1"の行を見つける((G21)。 文字列B1はB列にもし複数あっても、最初の行が見つかればよいからFind(What:="B1")でよい。 その直下行から、空白で無い行(G22)を探し,G21からG22-1行までを削除すればよい。 使う道具立ては Find Range(Cells(r1,c1)、Cells(r2,c2)) ぐらいの考えるとおりをコードにする、易しい問題ではないか。 ーー A1の中身行が全て無くなったときA1を削除すべきかどうかは、この問題を考える人(場合)による(略)

pepe0909
質問者

お礼

貴重なご意見・ご指摘ありがとうございます。 皆様のご好意を無碍にしないよう、 今後はしっかり具体例など挙げて質問させて頂きます。 ありがとうございました。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

>更に条件を絞りたく その条件を書いて戴かないと、全く分りません >A列に大見出し、B列に小見出し、C列以降にデータ >大見出しの行の次の行に小見出しがあり、その次の行からデータ さて、大見出しは列、行、それとも両方にあるの? 具体的なデータもしくはサンプルデータを提示してもらうか 作成しているマクロ(作成途中も含む)を提示してください 例えば、住所録   A      B      C 1 都道府県 市区町村 名前 2 東京都  新宿区  佐藤 3 千葉県  千葉市  斉藤 4 千葉県  柏市   鈴木 5 千葉県  船橋市  太田 6 東京都  品川区  鈴木 住所録から千葉県、柏市、鈴木を削除したい この様な質問をしたいのかな? for i=2 to 6 if cells(i,1).value="千葉県" then if cells(i,2).value="柏市" then if cells(i,3).value="鈴木" then 行削除処理 end if end if end if next i 初歩的なコードですが、これでも条件は十分クリアできます 以上参考まで

pepe0909
質問者

お礼

ご回答頂きありがとうございます。 今後の参考にさせて頂きます!

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

A列の大見出しを検索た際に、次のA列の大見出しまではA列が空白になっているのでしょうか? 1 A1 2      B1 3           C1-1 4           C1-2 5           C1-3 6 A2 7      B2 8           C2-1 と言う感じとか? 結合セルになっているとか? それ以外・・・?

pepe0909
質問者

お礼

ありがとうございます。 説明不足ですみません… まさに書いて下さった例のような感じです! 宜しくお願いします。