2017-02-14 10 views
-5

列Hは、次のいずれかの値が含まれている場合、私は、行を削除する:削除行列Hは、次のいずれかの値が含まれている場合 - VBA

1) % 
2) Resistor 
3) Capacitor 
4) MCKT 
5) Connector 
6) anything else I may want to add to this list... 

Googleでこれを発見し、編集した - それがうまく機能 - より効率的な方法があるかどうかはわかりません。

Sub DeleteRows() 
lastrow = Cells.SpecialCells(xlCellTypeLastCell).Row 
readrow = 1 
For n = 1 to lastrow 
    If Range("H" & ReadRow).Value = "%" Or _ 
    Range("H" & ReadRow).Value = "Resistor" Or _ 
    Range("H" & ReadRow).Value = "Capacitor" Or _ 
    Range("H" & ReadRow).Value = "MCKT" Or _ 
    Range("H" & ReadRow).Value = "Connector" Then 
    Range("H" & ReadRow).EntireRow.Delete 
    Else 
     readrow = readrow + 1 
    End If 
    Next 
End Sub 
+2

スタックオーバーフローは、フリーコード作成サービスではありません。何を試しましたか? –

+0

もし私があなただったらループを使う方法を学びます –

答えて

5

があり、より効率的な方法ですが、1本付き:

  1. ループ後方。
  2. 変更nまでReadRow、2つの変数を持つことには意味ありません:

コード:

Sub DeleteRows() 
Dim Lastrow as long, n as long 
lastrow = Cells.SpecialCells(xlCellTypeLastCell).Row 

For n = lastrow to 1 Step -1 
    If Range("H" & n).Value = "%" Or _ 
    Range("H" & n).Value = "Resistor" Or _ 
    Range("H" & n).Value = "Capacitor" Or _ 
    Range("H" & n).Value = "MCKT" Or _ 
    Range("H" & n).Value = "Connector" Then 
     Rows(n).Delete 
    End If 
Next 
End Sub 

もう一つの方法は、それはそれが簡単に追加することができSelect Case

Sub DeleteRows() 
Dim Lastrow as long, n as long 
lastrow = Cells.SpecialCells(xlCellTypeLastCell).Row 

For n = lastrow to 1 Step -1 

    Select Case Range("H" & n).Value 
     Case "%","Resistor","Capacitor","MCKT","Connector" 
     Rows(n).Delete 
    End Select 
Next 
End Sub 

を使用することですリストに追加します。

+0

ステップ-1の目的は何ですか?あなたはそれが最初の行から最後の行に向かうのではないでしょうか...最後の行-1ではなく? @Scott Craner – CC268

+0

私の前のコメントを無視する - あなたのやっていることを見る - 最後の行から上の行までの目的は何か? @Scott Craner – CC268

+0

@ CC268行の行10を削除すると、行11は行10になり、反復するとnは10から11になり、行11は現在スキップされます。後方に進むと、行をスキップするこの問題は発生しません。 –

0

これは素晴らしい結果でした。

Option Explicit 
Option Compare Text 

Sub Delete_Rows() 

Dim LastRow As Long, ReadRow As Long, n As Long 

With ThisWorkbook.Sheets("Sheet1") 
    LastRow = .Cells(.Rows.Count, "H").End(xlUp).row 
End With 

ReadRow = 1 
For n = 1 To LastRow 
    If Range("H" & ReadRow).Value Like "*%*" = True Or _ 
    Range("H" & ReadRow).Value Like "*Resistor*" = True Or _ 
    Range("H" & ReadRow).Value Like "*Transistor*" = True Or _ 
    Range("H" & ReadRow).Value Like "*Micro*" = True Then 
     Range("H" & ReadRow).EntireRow.Delete 
    Else 
     ReadRow = ReadRow + 1 
    End If 
    Next 
End Sub 
関連する問題