私はExcel VBAを初めて使用しています。私はウェブ全体で解決策を探してみましたが、同様の問題を見つけることができませんでした。Excel vba条件を満たすまで行を削除
特定の条件に基づいて行を削除し、別の一定の基準が満たされるまで行を削除し続けるマクロを作成しようとしています。
などです。以下の表に、IはコルA = 1及びコルC <> 0
A | B | C
-----|-----|-----
1 | TC | 2
-----|-----|-----
2 | TC | 1
-----|-----|-----
1 | TC | 0
-----|-----|-----
2 | TC | 2
-----|-----|-----
3 | TC | 1
-----|-----|-----
1 | TC | 2
-----|-----|-----
1 | TC | 0
-----|-----|-----
1 | TC | 1
-----|-----|-----
2 | TC | 0
-----|-----|-----
3 | TC | 2
UNTILコルA = 1
ANDコルC = 0、およびその行
下行を削除継続行を削除したいです だからマクロの最終結果は次のようになります理想的
A | B | C
-----|-----|-----
1 | TC | 2
-----|-----|-----
2 | TC | 1
-----|-----|-----
1 | TC | 2
-----|-----|-----
1 | TC | 1
-----|-----|-----
2 | TC | 0
-----|-----|-----
3 | TC | 2
、IはコルA = 2行を削除し、コルC = 0となるまで、その行の下の行を削除して再びループにこれを希望Col A = 2およびCol C <> 0
以下は、私が覚えているマクロです。すべての提案に開放され、学びたいと熱望しています。
Sub deleterow()
Range("C2").Select
Do Until ActiveCell.Offset(0, -2) = "1" And ActiveCell.Value <> "0"
If ActiveCell.Value = "0" And ActiveCell.Offset(0, -2) = "1" Then
Rows(ActiveCell.Row & ":" & Rows.Count).Delete
End If
Loop
End Sub
お楽しみに!
は、基準が満たされているので
私はこれで非常に新しいので、事前に謝罪します。私は上記のコードを適用しようとしましたが、うまくいかないようです。私はあなたのコードを見直しています。私は理解しているかどうかわかりません。私はコードのコンセプトを理解していると思いますが、私はそれの特定の行を把握することはできません。なぜそれは "rngは何も設定されていない" ..ですか? 「rngが何も設定されていないのであれば」ではないでしょうか?そして私はライン "rng = Union(rng、new_rng)"を理解していません。 rngを自分自身と新しいrngの連合とどのように等しくすることが可能ですか? –
また、この特定の問題に対してフィルタと削除メソッドがどのように機能するかはわかりません。マクロは、条件が満たされるまで削除を続行する必要があるためです。しかし、私はそれが動作する限り、任意のソリューションに開放されています。 –
連合は、Range( "B1:B5"、 "C42:C65"、 "Z300") 'のように連続しない範囲を作成するために使用されるため、deleteを使ってすべてを削除できます。削除操作は遅いので、削除を1回だけ行うと、その操作を行うのにかかる時間が最適化されます。そして 'もしrngが何もないならば、rng = ws.Range(" A "&i)'はUnionを使うために使われます。なぜなら、2つの範囲がなければUnionはエラーを出します。したがって、最初の範囲(rngが空でも何もない場合)では、 'rng = new_rng = ws.Range(" A "&i)' – danieltakeshi