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

下記のようなものをみつけました。私の求めるものがこれを変更すればできるのではと思いますが、どのようにしたら良いか分かりません、お教え下さいませんか。列の先頭行には固定の文言が入りますのでも各列の3行までは対象外にしたいと思います。(ちなみに、J列~BD列に空欄のあるもののみ)また、データは1500行程度です。
なお、マクロで別シートに行を削除しようとする元データをそのまま別シートに作れたものを上記のように処理できればなおさらよいのですが・・・・。

Excel VBA A列が特定の値以外の場合、その行を削除
Sub test01()
With ActiveSheet 'アクティブなシートについて
x = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得
For i = x To 3 Step -1 '最終行から3行目まで下から順に
If .Cells(i, 1) <> "b" Then .Rows(i).Delete 'A列が"b"でなかったら削除
Next '繰り返し
End With
End Sub

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

  • ②「J列~BD列に1つでも空欄のある行を削除」の意味です。
     丁寧さがなかったですね、それと間違っていました。まず、間違いは3行ではなく、2行でした。1行目は表題を入れています、2行目は列ごとに列の内容、「記号」とか「種類」とか「氏名」等の名称を入れている行ということです。それ以外のデータのつにいて、空欄のある行とない行があるので、それを整理してまとめたいし、それを元にして新たなデータとして活用したいということです。対象となるのが、3行目からということになります。

      補足日時:2018/02/03 13:45
  • ②「J列~BD列に1つでも空欄のある行を削除」の意味です。
     丁寧さがなかったですね、それと間違っていました。まず、間違いは3行ではなく、2行でした。1行目は表題を入れています、2行目は列ごとに列の内容、「記号」とか「種類」とか「氏名」等の名称を入れている行ということです。それ以外のデータのつにいて、空欄のある行とない行があるので、それを整理してまとめたいし、それを元にして新たなデータとして活用したいということです。対象となるのが、3行目からということになります。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/02/03 13:46
  • つらい・・・

    私の説明が悪るかったかもしれません。J列~BD列に各行に1つでもデータがあれば、その行は全て残しますが、J列~BD列の各行にデータがなければその行はA列~BD列の全部を削除するということです。

      補足日時:2018/02/04 09:34

A 回答 (6件)

No.4です。



要するにJ列~BD列に一つもデータがない行を削除すれば良いのですね。

Sub Sample2()
Dim i As Long, myRng As Range
With ActiveSheet
For i = 2 To .UsedRange.Rows.Count
If WorksheetFunction.CountA(Range(.Cells(i, "J"), .Cells(i, "BD"))) = 0 Then
If myRng Is Nothing Then
Set myRng = .Cells(i, "J")
Else
Set myRng = Union(myRng, .Cells(i, "J"))
End If
End If
Next i
If Not myRng Is Nothing Then
myRng.EntireRow.Delete
End If
End With
MsgBox "完了"
End Sub

※ 数式によって「空白」に見えるセルではなく、
まったくデータが入っていないセルという前提です。m(_ _)m
    • good
    • 0
この回答へのお礼

できました、完了できました。有難うございました。

お礼日時:2018/02/04 11:36

④「J列~BD列が全て空欄の行を削除」だったわけですね。


--------------------------------------------------------------------------------
Sub J列からBD列が見た目が全て空欄だったら行削除()
Dim 終 As Long
Dim 行 As Long
Dim 列 As Long
Dim 有 As Boolean
Application.ScreenUpdating = False
With ActiveSheet 'アクティブなシートについて
終 = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得
For 行 = 終 To 3 Step -1 '最終行から3行目まで下から順に
有 = False 'フラグをリセット
For 列 = 10 To 56 'J列からBD列まで
If Trim(.Cells(行, 列).Text) <> "" Then '見た目が空白でなかったら
有 = True 'フラグをセット
Exit For '中のループを抜ける
End If
Next '繰り返し
If 有 = False Then Rows(行).Delete Shift:=xlUp 'データの無い行を削除
Next '繰り返し
End With
Application.ScreenUpdating = True
End Sub
--------------------------------------------------------------------------------
※ 見た目が空白の物(式の結果が空欄の物や空白文字が有る物も含む)も空欄として処理します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2018/02/04 11:41

こんばんは!



横からお邪魔します。
「空白セル」というのは数式によって空白に見えているセルではなく、全くデータが入っていないセルだという前提です。
一気に行削除する方法はどうでしょうか?

Sub Sample1()
Dim lastRow As Long, myRng As Range
With ActiveSheet
lastRow = .UsedRange.Rows.Count
On Error Resume Next
Set myRng = Range(.Cells(2, "J"), .Cells(lastRow, "BD")).SpecialCells(xlCellTypeBlanks)
myRng.EntireRow.Delete
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2018/02/04 11:41

それでしたら以下のようなものはいかがでしょうか?


--------------------------------------------------------------------------------
Sub J列からBD列に空欄が有ったら行削除()
Dim 終 As Long
Dim 行 As Long
Dim 列 As Long
Dim 有 As Boolean
Application.ScreenUpdating = False
With ActiveSheet 'アクティブなシートについて
終 = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得
For 行 = 終 To 3 Step -1 '最終行から3行目まで下から順に
有 = False 'フラグをリセット
For 列 = 10 To 56 'J列からBD列まで
If .Cells(行, 列) = "" Then
有 = True 'フラグをセット
Exit For '中のループを抜ける
End If
Next '繰り返し
If 有 Then Rows(行).Delete Shift:=xlUp '空白の有る行を削除
Next '繰り返し
End With
Application.ScreenUpdating = True
End Sub
--------------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2018/02/04 11:42

こんなので、どうでしょうか。


Sheet1を元データとして、そのシートをコピーした上で、空白セルのある行を削除します。

Sub sample()
Sheets("Sheet1").Copy After:=ActiveSheet
Range("J3:BD" & Rows.Count).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2018/02/04 11:42

列と行がゴチャゴチャになっているのでよく判らないし()内の文章とも矛盾が有り良く判りません。


「各列の3行までは対象外にしたいと思います。(ちなみに、J列~BD列に空欄のあるもののみ)」は次のうちどれでしょうか?
①「D列~BD列に1つでも空欄のある行を削除」
②「J列~BD列に1つでも空欄のある行を削除」
③「D列~BD列が全て空欄の行を削除」
④「J列~BD列が全て空欄の行を削除」
⑤ その他(具体的に説明し直して下さい)
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2018/02/04 11:42

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

このQ&Aを見た人はこんなQ&Aも見ています