[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートのを選択しフィルター』(める)
VBA初心者です。
シート名1から5までをフィルターかけていきたいです。
シート1しかフィルターがかかりません。
シート名1から5とシート名 合計があります
Sheets(i).Cells(1, 1).AutoFilter field:=4, Criteria1:="宮崎"
Next
シート1しかフィルターがかかりません
初歩的なもので申し訳ありませんが教えてください。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
dim i as long
For i = 1 To 5
Sheets(i).Cells(1, 1).AutoFilter field:=4, Criteria1:="宮崎"
Next
(める) 2019/06/19(水) 14:16
加工というファイルを開いて、そのブックにあるシート名1から5(別途シート合計あり)を
フィルターかけます。
それをコピーしてマクロが記述されているブックのシート合計に貼り付けます。
Dim i As Long
Workbooks.Open ThisWorkbook.Path & "\加工"
For i = 1 To 5
Sheets(i).Cells(1, 1).AutoFilter field:=4, Criteria1:="宮崎"
Cells(1, 1).currengtregion.Offset(1, 0).Copy _
ThisWorkbook.Sheets("合計").Cells(Rows.Count, 1).End(xlUp).Row.Offset(1, 0)
Next
End Sub
エラーはRangeクラスのAutoFilterメソッドが失敗しましたとでます。
(める) 2019/06/19(水) 14:31
多分ねシート名を半角数字だけにしているからだと思います。 何も考えないで、こういうことしている人が多いみたいですけど。
Sheets(i)
これだと、シートのインデックスと処理しているんじゃないかと。 1番左のシートのみフィルタがかかって、2番目から5番目のシートのCells(1, 1)には何も書かれたないとか、表になって無いんじゃ・・・・。
ダメもとで、Sheets(Cstr(i)) かな?
追加の分ちろっと .currengtregion スペルが違います。
range("A1").
と打つと候補が出るから、そこから選ぶとスペルの間違いは減ると思います。 これをコピーして使う。
>End(xlUp).Row.Offset(1, 0)
↑
.Row はいらないんじゃ。
(BJ) 2019/06/19(水) 14:38
もしくは、数式のデータが多くておっつかない??? 再計算を手動にして、フィルタの後に Doevents を入れてみるとか。 (BJ) 2019/06/19(水) 14:43
ありがとうございます。
Sheets(Cstr(i))にしてみましたがうまくいきませんでした。
マスタを作成しましたが、今度は違うところでエラーがでました。
Sub フィルター()
Dim i As Long
Dim Sname As String
Workbooks.Open ThisWorkbook.Path & "\加工"
With ActiveWorkbook
For i = 1 To 3
Sname = ThisWorkbook.Sheets("マスタ").Cells(i, 1)
.Sheets(Sname).Range("A1").AutoFilter field:=4, Criteria1:="宮崎"
.Cells(1, 1).CurrentRegion.Offset(1, 0).Copy _ ←ここでデバックがでます。
ThisWorkbook.Sheets("合計").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Next
End With
End Sub
よろしくお願いします。
(める) 2019/06/19(水) 17:41
すみません。
>Cells(1, 1).CurrentRegion.Offset(1, 0).Copy _ ←ここでデバックがでます。
> ThisWorkbook.Sheets("合計").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
ここだけやってみたらエラーにならなかった。
.Sheets(Sname).Cells(1, 1).
^^^^^^^^^^^^^^^ ↑ これが抜けているのでは? (BJ) 2019/06/19(水) 18:07
テストしてませんがこんな感じではないでしょうか?(コンパイルは通りました)
Sub フィルター_改()
Dim i As Long
Dim dstRNG As Range
With ThisWorkbook.Sheets("合計")
Set dstRNG = .Cells(.Rows.Count, "A").End(xlUp).Offset(1)
End With
With Workbooks.Open(ThisWorkbook.Path & "\加工.xlsx")
For i = 1 To 5
'▼オートフィルタで抽出してコピペ
With .Sheets(i)
.AutoFilterMode = False
.Range("A1").AutoFilter field:=4, Criteria1:="宮崎"
.AutoFilter.Range.Copy dstRNG
End With
'▼出力先の【セル】を再設定
With ThisWorkbook.Sheets("合計")
Set dstRNG = .Cells(.Rows.Count, "A").End(xlUp).Offset(1)
End With
Next
'▼加工.xlsxを保存せずに閉じる
Application.DisplayAlerts = False
.Close
Application.DisplayAlerts = True
End With
End Sub
(もこな2) 2019/06/19(水) 18:40
ありがとうございます。
上手くいきました。
(める) 2019/06/19(水) 19:24
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.