web-dev-qa-db-ja.com

セルに文字列Xが含まれる場合、行全体を削除します

私はVBAを初めて使用し、Webサイトの列のセルにnoneという単語が含まれるすべての行を削除する(および可能であればセルを上に移動する)方法を考えています。テーブルには5000以上のレコードが含まれているため、時間を大幅に節約できます。

提案をお願いします。事前に感謝します!

35
AnchovyLegend

これはVBAタスクではありません-この特定のタスクは、自動フィルターで簡単に解決できます。

1.自動フィルターを挿入します(Excel 2010では、[ホーム]->(編集)並べ替えとフィルター->フィルターをクリック)
2。 [ウェブサイト]列でフィルタリングする
3。 「なし」をマークして削除します
4。フィルターをクリア

71
MBK

OK私はこれをVBAで知っていますが、一度だけ一括削除を行う必要がある場合は、次のExcel機能を使用できます。 http://blog.contextures.com/archives/2010/06/21/fast -way-to-find-and-delete-Excel-rows / これが誰にも役立つことを願っています

文字列「paper」を探す例:

  1. [検索と置換]ダイアログボックスで、[検索する文字列]ボックスに「paper」と入力します。
  2. 「すべて検索」をクリックして、「ペーパー」のセルのリストを表示します
  3. リスト内の項目を選択し、Ctrl + Aを押してリスト全体を選択し、ワークシート上のすべての「ペーパー」セルを選択します。
  4. リボンの[ホーム]タブで、[削除]をクリックし、[シート行の削除]をクリックします。
17
Barry Carter

[開発者]タブで[Visual Basic]に移動し、モジュールを作成します。次を貼り付けてコピーします。必要に応じて、コードを変更することを忘れないでください。次に、モジュールを実行します。

  Sub sbDelete_Rows_IF_Cell_Contains_String_Text_Value()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 390
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 5).Value = "none" Then
            Rows(iCntr).Delete
        End If
    Next
    End Sub

lRow:現在のファイルの行数を入力します。

「If」の数字「5」は、5番目の(E)列用です

8
Apolo Radomer

@MBKの回答に追加したいと思います。 @MBKの回答は、同様の問題を解決するのに非常に役立つことがわかりましたが、@ MBKに特定の列をフィルター処理する方法のスクリーンショットが含まれていればより良いでしょう。 enter image description here

6
palmbardier

これは別のコメントで言及されましたが、このようなことを試すことができます。

Sub FilterAndDelete()

Application.DisplayAlerts = False 

     With Sheet1 'Change this to your sheet name

         .AutoFilterMode = False   
         .Range("A3:K3").AutoFilter
         .Range("A3:K3").AutoFilter Field:=5, Criteria1:="none"
         .UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete 

     End With

Application.DisplayAlerts = True

End Sub

私はこれをテストしておらず、メモリからのものであるため、微調整が必​​要になる場合がありますが、数千行をループせずにジョブを完了する必要があります。 UsedRangeが正しいように11月7日を削除するか、.Offset(1,0)のオフセットを1ではなく2行に変更する必要があります。

一般に、.Deleteを実行する前に、Deleteの代わりに.Selectを使用してマクロを実行し、正しい範囲が削除されることを確認できます。適切な範囲を確認するためにチェックする価値があります削除されています。

1
Soulfire

これを試して ...

Dim r as Range
Dim x as Integer

For x = 5000 to 4 step -1 '---> or change as you want //Thanx 4 KazJaw

  set r = range("E" & format(x))
  if ucase(r.Value) = "NONE" then
    Rows(x).EntireRow.Delete
  end if 

Next
0
matzone