2017-02-08 6 views
3

私はリストから欲しくない値を取り出すために比較的簡単なループを実行しようとしています。Excel VBA単純なステートメントでない場合

以下のすべてがエラーを作成していない私の「未」文より正しく、他の作業をされ...

それだけですべてで何もしていないようです。

Set myRange = Range("A49:A150") 
For Each myCell In myRange 
    If myCell Like "*msn.com*" Or _ 
     myCell Like "*messaging.microsoft.com*" Or _ 
     Not myCell Like "*.com*" Then 
     myCell.Delete 
    End If 
Next myCell 

私はかなり確信しています。私はどこかでここで単純な間違いがありますが、私はそれを見つけることができませんでした。

答えて

9

これはNotではありません。あなたの問題は、セルを削除すると変更の範囲が変わるため、ループにデータがないことです。セルA49が削除されると、A50の値はA49まで移動し、決してチェックされません。削除されたセルを集計し、一度に削除します。

Sub test() 

    Dim rngDelete As Range 

    Set myrange = Range("A1:A3") 
    For Each mycell In myrange.Cells 
     If mycell Like "*msn.com*" Or _ 
      mycell Like "*messaging.microsoft.com*" Or _ 
      Not mycell Like "*.com*" Then 

      If Not rngDelete Is Nothing Then 
       Set rngDelete = Union(rngDelete, mycell) 
      Else 
       Set rngDelete = mycell 
      End If 
     End If 
    Next mycell 

    If Not rngDelete Is Nothing Then 
     rngDelete.Delete 
    End If 


End Sub 
+0

これは完全な意味があり、今私はダミーのように感じる。ありがとう! – Josh

+0

クイック・アンド・ダーティーな解決策として、 'For'ループに' Step -1'を追加するだけで、後方に反復するので、元のセル49が削除された後にセル50がセル49になるという問題を回避できます。 – Anders

関連する問題