特定の複数列に値がない時その行を削除したい C列に値があり、F列~BB列ぐらいまで(増減あり)にも値が入っている表があります。

Excel | Visual Basic87閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

参考までに。 削除は1回のみで完結します。 Sub Union使う場合() Dim i As Long Dim buf As Range For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(i, Columns.Count).End(xlToLeft).Column = 1 Then _ If buf Is Nothing Then Set buf = Rows(i) Else Set buf = Union(buf, Rows(i)) Next i If Not buf Is Nothing Then buf.Delete End Sub

ThanksImg質問者からのお礼コメント

迅速なご回答ありがとうございました!! 早すぎて御礼が遅くなり、申し訳ありません。 発想の転換が大切なのだなと良くわかりました。 実際の表はもっと項目が多く、コードそのままでは使えませんでしたが、 上手くモディファイして使わせて頂きました。 ありがとうございました。

お礼日時:6/29 0:06

その他の回答(2件)

0

F列~BB列ぐらいまで(増減あり)にも値が入っている表があります。 ⇒表題の項目1、項目2、・・・・は、行の最も大きな列まで書き込まれているものとします。 ここでは、この表題の行は1行目としています。 添付図のような結果でよいでしょうか。 関数の知識がないため貴方のコードを解読するのに時間が掛かりそうなので参考まで、私の我流のコードを以下に記します。 ただ、部分的にですが貴方が問題視しています 「If Cells(i, 6).Value = "" Then ←ここが思いつかない」 を If WorksheetFunction.CountA(Range(Cells(n0, 6), Cells(1, Cells(n0, Columns.Count).End(xlToLeft).Column))) = 0 Then のように「CountA」を使えばよいのではないかと考えます。 当方の参考コードです。 Sub 不要行削除その2() Dim n0 As Integer For r0 = 5 To Cells(1, Columns.Count).End(xlToLeft).Column For n0 = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -2 If WorksheetFunction.CountA(Range(Cells(n0, 6), Cells(1, Cells(n0, Columns.Count).End(xlToLeft).Column))) = 0 Then Range(Cells(n0, 3), Cells(n0 + 1, Cells(1, Columns.Count).End(xlToLeft).Column)).Select Selection.Delete Shift:=xlUp End If Next Next End Sub

画像

追伸: もっと良い方法がないかn0の変数を見直していた途中のコードを上記に貼付けました。ご免なさい。 上記のコードは間違っています。 正式なコードは次の通りです。 Sub 不要行削除その2() Dim n0 As Integer For r0 = 5 To Cells(1, Columns.Count).End(xlToLeft).Column For n0 = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -2 If WorksheetFunction.CountA(Range(Cells(n0, 6), Cells(n0, Cells(1, Columns.Count).End(xlToLeft).Column))) = 0 Then Range(Cells(n0, 3), Cells(n0 + 1, Cells(1,

0

項目1~項目49までをJOINなどを使って文字列結合してみると良いと思います。 何も入力されていないのであれば、””が返ってくるはずから、その行を削除するようにコードを書けば良いと思います。