【VBA】空白を含む行を削除する
上の画像で、
「空白が含まれる行は丸ごと削除したい」
そうした場合には
[ .SpecialCells(xlCellTypeBlanks) ] を使用してみましょう。
以下がサンプルコードになります。
★サンプルコード★
Dim myRng As Range
Set myRng = Range("A1").CurrentRegion
myRng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
[For Each]のループコードはうまく機能しない
[For Each]のループコードは
今回の場合ですと、うまく機能しません。
例えば、↓のサンプルコードは一見良さそうに見えますが、
実行してみると、空白を含む行が残ってしまいます。
Dim myRng As Range
For Each myRng In Range("A1").CurrentRegion
If myRng.Value = "" Then
myRng.EntireRow.Delete
End If
Next
これは以下の理由からです。
1.行を削除した後は、↑方向に詰められる事
2.[For Each]の構文で、Rangeを使用すると縦方向に処理を進める事
この2つ理由が重なり、
例えば、同じ列に2つ続けて空白があると、
下段の1行は削除されずに残ってしまうからです。
(※↑の例題で言えば、セル【C7~C8】・【D10~11】は続けて空白になっていて、[For Each]でRangeオブジェクトを使用すると処理される順番としては「A1→A2→A3→…B1→B2→B3→…C1→C2→C3…」と縦方向に進み、まずはC7を1行削除すると、元々のC8の空白は1行繰上になり、C7に移動し、「C7は既に処理済み」とみなされている為、空白が残ってしまう)
なので、この処理の場合は相性が悪く、
他の方法で行ごと削除すべきなのです。
以上になります。
抱えている問題が解決出来たなら幸いです。