- ベストアンサー
エクセルマクロ 条件分岐 条件に合わない列は削除
- エクセルマクロを使用して、条件に合わない行を削除する方法について質問です。
- セルAの値が16またはRFの場合はその行のデータを残し、それ以外の場合は行全体を削除したいと思っています。
- 現在、1の条件についてはうまく動いているようですが、2の条件に合わない行の削除がうまくできません。どのようにすればよいでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず。 Sub macro1() Dim i As long For i = cells(rows.count, 1).end(xlup).row To 2 step -1 If Cells(i, 1).Value = "16" Or Cells(i, 1).Value = "RF" or cells(i, 1) = "" Then ’Cells(i, 1) = Cells(i, 1) Else Rows(i).Delete End If Next i End Sub
その他の回答 (4)
- dogs_cats
- ベストアンサー率38% (278/717)
for~nextで行削除をする場合は最終行側から実施しないと削除は上手く行きません。 理由は簡単で、2行目を削除した場合2行目に3行目のデータが上がって来ますが、ループは3行目を実施するので削除残しが発生する事になります。 keithinさんのコードで可能ですが、A列の途中に空白セルがある場合も行を削除しないとなっています。 そのコードが必要か質問者さんで判断して下さい。 If Cells(i, 1).Value = "16" Or Cells(i, 1).Value = "RF" or cells(i, 1) = "" Then ↓ If Cells(i, 1).Value = "16" Or Cells(i, 1).Value = "RF" Then
- Nouble
- ベストアンサー率18% (330/1783)
ループにしなくても 3万行までを範囲選択した上で 抽出を設定し 該当行を抽出し 作業用シートオブジェクトに コピーし 抽出を解除して 3万行迄を全てクリアし 作業用シートオプジェクトの データを書き戻す こうすればできる と、思います よ でも、そもそも VBAに、する必要 すらない と、思います が、ね
- MRExcel
- ベストアンサー率0% (0/1)
全角半角や、小文字大文字があっている前提で話します。 Rows(i).Deleteをした時点で、行が1行削除され、 次の行は、現在の行になります。 Rows.Delete の後に i=i-1 を追加すれば、いけると思います。 これでだめなら 下記のコードでいけると思います Dim i As Long i = 1 Do While i <= 30000 If Cells(i, 1).Value = "16" Or Cells(i, 1).Value = "RF" Then Cells(i, 1) = Cells(i, 1) Else Rows(i).Delete End If i = i + 1 Loop これで、ダメなら違う回答をします。
- moredeep
- ベストアンサー率66% (2/3)
vbaは詳しくないので間違っていたら申し訳ないのですが、 Rows(i).Delete を Rows(i & ":" & i).Delete にしても動きませんか? もしくは、 Dim deleteRow As String deleteRow = i & ":" & i Rows(deleteRow).Delete とか