[[20180911151254]] 『VBA フィルター抽出 データがない場合』(いち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA フィルター抽出 データがない場合』(いち)

ワークシートに下記のようなデータがあるとします。フィルターでB列の200以下の物を抽出し、行削除をしたいのですが、200以下の物がない場合のエラー回避方法を教えてください。On Error Resume Nextを抽出前に入れると1行目の項目行が削除されてしまいます。

   A     B     
1 項目  個数 
2  ミカン 250
3  ナシ   550
4  リンゴ 600          
5          

sub test()

With Worksheets

.AutoFilterMode = False

'B列が200以下のものを抽出して、行を削除
.Range("A1").AutoFilter Field:=2, Criteria1:="<=200", Operator:=xlAnd
.Range("2:" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

If .AutoFilterMode Then .ShowAllData

.Range("A1").AutoFilter Field:=1, Criteria1:="リンゴ", Operator:=xlAnd
.Range("A1").CurrentRegion.Copy Sheets("集計")
sheets("集計").EntireRow.Delete

End sub

< 使用 Excel:Excel2007、使用 OS:Windows7 >


元データからデータ削除をしてしまってよいのでしょうか?

私なら、元データを触りたくない(削除したくない)ので

 (1)B列の200以下の物"以外"を抽出
 (2)新規シートを追加して、(1)のデータを貼付

とします。

(もこな2) 2018/09/11(火) 15:53


元データは別ブックにとってあるのでこのワークシートで解決したいです。
新規シートを追加する以外の方法はありますか?

(いち) 2018/09/11(火) 16:06


それでは、↓の方法をつかって、最終行が項目行となるなら削除処理をしないとしたらどうでしょうか?
http://www.moug.net/tech/exvba/0150043.html

(もこな2) 2018/09/11(火) 17:32


  .Range("A1").AutoFilter Field:=2, Criteria1:="<=200", Operator:=xlAnd

 の下に

   If WorksheetFunction.Subtotal(3, .Range("A:A")) < 2 Then
       MsgBox "200以下のデータがありません"
       Exit Sub
   End If

 を入れればOKじゃないですか?

(TAKA) 2018/09/11(火) 18:44


上手くできました!
有難うございました。

(いち) 2018/09/12(水) 14:25


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.