2013-07-12 12 views
30

VBAを初めて使用していて、ウェブサイトの列セルに単語noneが含まれているすべての行を削除する方法を考え出しています。テーブルには5000以上のレコードが含まれているため、時間が大幅に節約できます。セルに文字列が含まれている場合は、行全体を削除します。X

私は何か提案をいただきありがとうございます。事前に多くの感謝!

http://i39.tinypic.com/5ano1d.png

+3

VBAを使用して行を削除する方法については、このサイトでは非常に多くの例がありますが、そうでない場合は、連続した範囲をソートして削除することを検討しました。とにかく非常に速くなりますか? – pnuts

+0

お探しの答えがほぼ正確です。オートフィルタの基準を変更するだけで済みます。 [効率的な方法は、行全体を削除する場合...](http://stackoverflow.com/a/16901714/138938) –

答えて

61

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

1.Insertオートフィルター(エクセルホーム - 2010クリック>(編集)ソート&フィルターで - >フィルター)「ウェブサイトの」列
3.マーク「なし」と削除に
2.フィルターそれら
4絞り込みを解除

0

これを試してみてください...

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

5000 +レコードでは、フィルタリングし、ループを削除する方が良い。 – Santosh

+0

@サントス..あなたが正しいかもしれない! .. – matzone

+1

@matzoneを追加しようとしますが、プロセスの削除にはこの種のループを使用すべきではありません。特定のタイプのすべての要素を確実に削除したい場合は、常にFor i = 5000〜4 Step -1を使用してください! –

1

これは、別のコメントで示唆したましたが、あなたはこのような何かを試みることができます。

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を実行する前に、適切な範囲が削除されていることを確認するためにチェックする価値がある正しい範囲が削除されることを確認できる方法で、代わりに.Selectでマクロを実行します。

16

[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. [リボンのホーム]タブで、[削除]をクリックし、[シートの行を削除]をクリックします。
+0

鮮やか!私はこれを一括して行うことができる唯一の方法(VBAを使用しない)です。 – Holf

+0

これは受け入れられたはずの答えです。フィルターを使用すると、行数が50,000以上の場合は実行できません。 –

+0

FYI:これはWindows専用のソリューションであり、OSX Excel unfortunatleyでは機能しません。 –

2

[開発者]タブで[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:現在のファイルが持っている行の数を入れてください。

で数「5」第五(E)欄

4

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

関連する問題