ここから本文です

私は仕事でとある一覧表のマクロを作成しています。 社内で使っているシステム...

アバター

ID非公開さん

2019/1/3116:18:04

私は仕事でとある一覧表のマクロを作成しています。

社内で使っているシステムのCSVを取り込んでからそれを一時的に用意したシートにコピーし、それを一覧表に転記するような形のシステムです。

セルにある文言の入った行をマクロで削除したいのですが、実行しても削除できません。

以下、私が書いたコードです。(セルに含む文言は便宜上「AA」「BB」「ABC」、CSVの内容をコピーしたシート名を「CSV」とします)

'「AA」「BB」を含まない行を削除(AND)
Sheets("CSV").Select
For k = 2 To LastRow
If Not Cells(k, 1).Value Like "*AA*" And _
Not Cells(k, 1).Value Like "*BB*" Then
Sheets("CSV").Cells(k, 1).EntireRow.Delete
End If
Next k
Sheets("CSV").Select
LastRow = Range("A1000000").End(xlUp).Row

'「A」「B」を含む行を削除(OR)
Sheets("CSV").Select
For k = 2 To LastRow
If Cells(k, 1).Value Like "*AA*" Or _
Cells(k, 1).Value Like "*BB*" Then
Cells(k, 1).EntireRow.Delete
End If
Next k
Sheets("CSV").Select
LastRow = Range("A1000000").End(xlUp).Row

'「ABC」を含む行を削除
Sheets("CSV").Select
For l = 2 To LastRow
If Cells(l, 1).Value Like "*ABC*" Then
Cells(l, 1).EntireRow.Delete
End If
Next l
Sheets("CSV").Select
LastRow = Range("A1000000").End(xlUp).Row

LIKEで該当する文言を含んだセルを行ごと削除したのですが、全くうまくいかず削除されません。
LIKEの使い方で間違いなど原因がありましたらぜひご教示いただきたく思います。

あと、マクロを動かして一覧表に転記した後、セルに予めセットしてある関数(IF文での○✕判定)や条件付き書式(別セルでセットしてあるTODAYの日にちを見て特定の条件になれば行ごと色が変わる)が作動しないのですが、どうしてでしょうか。ちなみに、もう一度同じ操作をしたら関数や条件付き書式が動きました。
あわせてご回答お願いいたします。

閲覧数:
49
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

hel********さん

2019/1/3116:48:20

Sheets("CSV").Select
For l = 2 To LastRow
If Cells(l, 1).Value Like "*ABC*" Then
Cells(l, 1).EntireRow.Delete
End If
Next l
Sheets("CSV").Select
LastRow = Range("A1000000").End(xlUp).Row



Sheets("CSV").Select
LastRow = Range("A" & Rows.Count).End(xlUp).Row
For l = LastRow To 2 Step -1
If Cells(l, 1).Value Like "*ABC*" Then
Rows(l).EntireRow.Delete
End If
Next l

まず、最終行を取得してから繰り返しをしないと・・
また、行を削除する場合は、下から削除することが必須です。

アバター

質問した人からのコメント

2019/2/1 12:17:26

皆様ありがとうございます。今度はうまくいきました。この方がやりたかったことに一番近かったのでBAとさせて頂きます。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

taihenda****さん

2019/1/3120:46:17

マクロで削除すると元に戻せなくなります。慎重にした方がいいですね。
それと行の削除は重い処理なのでループで削除すると時間がかかります。できるだけ1回で削除した方がいいです。

Sub test1()
'「AA」「BB」を含まない行を削除(AND)
Dim k As Long, lastRow As Long, msg As Long, fg As Boolean
Sheets("CSV").Select
Columns("AA").ClearContents
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For k = 2 To lastRow
If Not Cells(k, 1).Value Like "*AA*" _
And Not Cells(k, 1).Value Like "*BB*" Then
Cells(k, "AA") = 1
fg = True
End If
Next k
If fg Then
Range("AA2:AA" & lastRow).SpecialCells(xlConstants).EntireRow.Select
msg = MsgBox("選択した行を削除しますか?", vbYesNo)
Application.ScreenUpdating = False
If msg = vbYes Then Selection.Delete
End If
Range("A1").Select
Application.ScreenUpdating = True
End Sub



Sub test2()
'「A」「B」を含む行を削除(OR)
Dim k As Long, lastRow As Long, msg As Long, fg As Boolean
Sheets("CSV").Select
Columns("AA").ClearContents
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For k = 2 To lastRow
If Cells(k, 1).Value Like "*A*" _
Or Cells(k, 1).Value Like "*B*" Then
Cells(k, "AA") = 1
fg = True
End If
Next k
If fg Then
Range("AA2:AA" & lastRow).SpecialCells(xlConstants).EntireRow.Select
msg = MsgBox("選択した行を削除しますか?", vbYesNo)
Application.ScreenUpdating = False
If msg = vbYes Then Selection.Delete
End If
Range("A1").Select
Application.ScreenUpdating = True
End Sub


Sub test3()
'「ABC」を含む行を削除
Dim k As Long, lastRow As Long, msg As Long, fg As Boolean
Sheets("CSV").Select
Columns("AA").ClearContents
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For k = 2 To lastRow
If Cells(k, 1).Value Like "*ABC*" Then
Cells(k, "AA") = 1
fg = True
End If
Next k
If fg Then
Range("AA2:AA" & lastRow).SpecialCells(xlConstants).EntireRow.Select
msg = MsgBox("選択した行を削除しますか?", vbYesNo)
Application.ScreenUpdating = False
If msg = vbYes Then Selection.Delete
End If
Range("A1").Select
Application.ScreenUpdating = True
End Sub

c72********さん

2019/1/3116:47:45

行削除する場合は、
FOr k = LastRow To 2 Step -1
と最後からやらないといけません。
たとえばkが3の時に3行目を削除したとします。
すると、これまで4行目だったのが3行目になります。
ですがkは削除の仕事を終えたので、k+1つまり新・4行目(元5行目)のチェックに入ります。
元4行目(新3行目)がスルーされてしまうんですね。

もう1つの質問の方は、新たに質問を立ててください。
情報が少な過ぎるので、その際は詳しく説明をいれた方がいいです。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる