上位の絞り込み&別シートへ(VBA)
昨日の晩からはまっていたのですが、今なんとか解決。
Sub 上位抽出シート作成() Worksheets("Sheet1").Range("A1").AutoFilter Field:=17, Operator:=xlTop10Items '抽出したデータをすべて取得 Worksheets("Sheet1").Range("A1"). _ CurrentRegion.SpecialCells(xlVisible).Copy 'Range("A1").CurrentRegion.SpecialCells(xlTypeVisible).Copy 'こちらだとエラー '取得したものを使用して上位抽出シート作成 Worksheets.Add after:=Worksheets(Worksheets.Count) '末尾にシートを追加 Worksheets(Worksheets.Count).Name = "上位抽出結果" '新規追加先のワークシート名を設定 Worksheets("上位抽出結果").Range("A1").Select ActiveSheet.Paste End Sub
エラーになるケースだとなぜエラーになるのがわからなくてはまってました・・・。
上記のところで
Worksheets("sheet1")とワークシートオブジェクトを
指定してフィルターかけていた場合、その結果に対して操作するときも
Worksheets("sheet1")ときちんとワークシートオブジェクトを指定してあげないとダメ。
withステートメントをつけて書いていくとこういうことを防げそう
+
きちんとワークシート存在する場合の処理書いていなかったので修正。
Sub 上位抽出シート作成() Worksheets("Sheet1").Range("A1").AutoFilter Field:=17, Operator:=xlTop10Items '抽出したデータをすべて取得 Worksheets("Sheet1").Range("A1"). _ CurrentRegion.SpecialCells(xlVisible).Copy '途中に空白列あるとそこまでのみ取得なので注意 'Range("A1").CurrentRegion.SpecialCells(xlTypeVisible).Copy 'こちらだとエラー '取得したものを使用して上位抽出シート作成 'ワークシート上位検索シートが存在するか '存在する場合のみ新規追加 Dim ws As Worksheet, flag As Boolean Worksheet = False For Each ws In Worksheets If ws.Name = "上位抽出結果" Then flag = True End If Next ws If flag = False Then Worksheets.Add after:=Worksheets(Worksheets.Count) '末尾にシートを追加 Worksheets(Worksheets.Count).Name = "上位抽出結果" '新規追加先のワークシート名を設定 End If '上位抽出結果シートに抽出結果を張り付ける With ActiveWorkbook .Worksheets("上位抽出結果").Activate 'アクティブシートを上位抽出結果シートに切り替える .Worksheets("上位抽出結果").Range("A1").Select End With ActiveSheet.Paste End Sub