プロが教える店舗&オフィスのセキュリティ対策術

Y列がゼロの場合、ゼロの行を削除する以下のコードを使っております。
"0"ではなく空白の場合、どのようにしたら良いのでしょうか?

-----ゼロ行削除------
Dim i As Long
Dim myRng As Range
For i = 9 To Cells(Rows.Count, "Y").End(xlUp).Row
If Cells(i, "Y") = 0 Then
If myRng Is Nothing Then
Set myRng = Cells(i, "Y")
Else
Set myRng = Union(myRng, Cells(i, "Y"))
End If
End If
Next i
If Not myRng Is Nothing Then
myRng.EntireRow.Delete
End If
MsgBox "完了"

質問者からの補足コメント

  • 変更しましたが削除出来ませんでした。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/03/18 11:19
  • 変更しましたが削除出来ませんでした。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/03/18 11:20
  • 皆様、ご回答ありがとうございます。

    色々と試しましたがすべて削除されませんでした。
    試しに15行から20行目までのY列を空白にするとすべてのご回答では削除されます。

    補足いたしますと・・・
    A1:AE200までの表でA10から他シートの値をA,B,U,Y列に転記しています。
    転記された以下のY列空白の200行目までの不要行を削除したいのです。

      補足日時:2021/03/18 12:42
  • 現在は"For i = 9 To…"で10行目。
    下がゼロで削除ですよね。
    200行目の指定が必要であればすべてのシートを200行で統一で可能です。
    複数のBook、シートで利用しています(-_-;)

      補足日時:2021/03/18 12:57

A 回答 (9件)

If Cells(i, "Y") = 0 Then 



If Cells(i, "Y").Value = "" Then
に変えてください。
この回答への補足あり
    • good
    • 1

If Cells(i, "Y") = " " Thenに


変えると空白行を削除出来ます。
この回答への補足あり
    • good
    • 1

>変更しましたが削除出来ませんでした。


おかしいですね。こちらでは、削除されることを動作確認済みです。
念のため、以下のマクロで試してください。

Public Sub 空白行削除()
Dim i As Long
Dim myRng As Range
For i = 9 To Cells(Rows.Count, "Y").End(xlUp).row
If Cells(i, "Y").Value = "" Then
If myRng Is Nothing Then
Set myRng = Cells(i, "Y")
Else
Set myRng = Union(myRng, Cells(i, "Y"))
End If
End If
Next i
If Not myRng Is Nothing Then
myRng.EntireRow.Delete
End If
MsgBox "完了"
End Sub
    • good
    • 1

>>空白の場合


可能性としては、null、半角ブランク、全角ブランクがあるので列挙する。

If Cells(i, "Y") = 0 Then

If Cells(i, "Y") = 0 or Cells(i, "Y") = "" or Cells(i, "Y") = " " or
Cells(i, "Y") = " " Then
    • good
    • 1

もし、空白セルのなかに、半角スペース、全角スペース、タブ等が、複数混じっていて、見た目が空白なら、以下のようにしてください。



Public Sub 空白行削除()
Dim i As Long
Dim myRng As Range
Dim RE As Object
Set RE = CreateObject("VBScript.RegExp")
RE.Pattern = "^(\s| )*$"
For i = 9 To Cells(Rows.Count, "Y").End(xlUp).row
If RE.test(Cells(i, "Y").Value) Then
If myRng Is Nothing Then
Set myRng = Cells(i, "Y")
Else
Set myRng = Union(myRng, Cells(i, "Y"))
End If
End If
Next i
If Not myRng Is Nothing Then
myRng.EntireRow.Delete
End If
MsgBox "完了"
End Sub

--------------------------------------------
追伸
RE.Pattern = "^(\s| )*$"の
(\s| )の個所のスペースは全角空白です。そのままコピペして使ってください。(半角スペースに変えてはいけません)
    • good
    • 1

普通(多分だけど)そう言う場合、そのセルがどうなっているのかを調べるのにLen関数にて文字数を調べるかな?


例えば空いてる列に書き出すとか

あとは文字コードを調べる(消せないセル1個とか)などの調査をしないと、質問者さんの『本当に結果を出すべきbook』は回答者には触れないですし
    • good
    • 1

>A1:AE200までの表でA10から他シートの値をA,B,U,Y列に転記しています。


>転記された以下のY列空白の200行目までの不要行を削除したいのです。

ということは、削除対象のセルはY9からY200に限定して良いということでしょうか。
    • good
    • 1

削除対象のセルはY9からY200に限定して良いということなら


For i = 9 To 200
とされてみてはいかがでしょうか。
現在は、最終行の取得で、失敗している可能性があります。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

>現在は、最終行の取得で、失敗している可能性があります。
そうなんですね。

Y200を設定したら希望通り作動いたしました。
本当にありがとうございました。

お礼日時:2021/03/18 13:25

No4ですが、そのコードをVBAにコピペして試しましたが、飛び地にある複数の空白行も正常に全部削除されますよ。


何か情報が抜けてませんか?
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

>No4ですが、そのコードをVBAにコピペして試しましたが、飛び地にある複>数の空白行も正常に全部削除されますよ。

飛び地、複数はOKでしたが値最終行以下が削除出来ませんでした。
最終行の取得が出来なかったようです。

ありがとうございました。

お礼日時:2021/03/18 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!