Page 147 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼オートフィルタについて こうき 02/9/27(金) 13:32 ┗Re:オートフィルタについて こうちゃん 02/9/30(月) 13:06 ┗Re:オートフィルタについて こうき 02/9/30(月) 14:54 ┗項目名行はどうなってますか? こうちゃん 02/9/30(月) 15:48 ┗Re:項目名行はどうなってますか? こうき 02/9/30(月) 16:05 ┗Re:項目名行はどうなってますか? こうき 02/9/30(月) 16:47 ─────────────────────────────────────── ■題名 : オートフィルタについて ■名前 : こうき ■日付 : 02/9/27(金) 13:32 -------------------------------------------------------------------------
以下のようにオートフィルタをかけます。 Dim fn As String Dim comin As Integer Dim gen As Integer Workbooks(fn).Activate Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:=comin Selection.AutoFilter Field:=3, Criteria1:=gen このあと上から2行目に値があれば、2行目以下をコピーして 新しいブックに貼り付けたいのですが、オートフィルタ後にシートの2行目を指定する方法はあるのでしょうか? 対象のブック(fn)によって2行目の番号は異なっていて、どうしたらいいのか途方にくれています。 よい方法があれば教えてください。 |
こうき さん、こんにちは >以下のようにオートフィルタをかけます。 > > Dim fn As String > Dim comin As Integer > Dim gen As Integer > > Workbooks(fn).Activate > Rows("1:1").Select > Selection.AutoFilter > Selection.AutoFilter Field:=2, Criteria1:=comin > Selection.AutoFilter Field:=3, Criteria1:=gen > >このあと上から2行目に値があれば、2行目以下をコピーして >新しいブックに貼り付けたいのですが、オートフィルタ後にシートの2行目を指定する方法はあるのでしょうか? >対象のブック(fn)によって2行目の番号は異なっていて、どうしたらいいのか途方にくれています。 >よい方法があれば教えてください。 レスがつかないようなので・・ オートフィルタを適用した時点でエラーになっていなければ、条件に該当するデータがあるはずですので、表全体をコピーして、ペーストすれば、フィルタ条件に該当する列だけペーストされると思いますが、それじゃ要件を満たしませんか? こんな感じです。 A〜C列のデータに対してオートフィルターを設定して、該当するデータをコピーします。 #フィルター適用条件のデータがない場合のエラー処理をしたほうがいいと思います・・ Sub Macro1() Dim fn As String Dim comin As Integer Dim gen As Integer '---前処理--- Workbooks(fn).Activate Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:=comin Selection.AutoFilter Field:=3, Criteria1:=gen '表領域全体をコピーします。「3」は実際のコピー領域列に変更してください。 Range(Cells(1, 1), Cells(Range("A65536").End(xlUp).Row, 3)).Copy 'ここは実際には新しいブックを指定してくださいね。 Range ("H23") ActiveSheet.Paste End Sub |
こうちゃん さん、こんにちは >オートフィルタを適用した時点でエラーになっていなければ、条件に該当するデータがあるはずですので、表全体をコピーして、ペーストすれば、フィルタ条件に該当する列だけペーストされると思いますが、それじゃ要件を満たしませんか? それが、オートフィルタを行うと1行目がそのまま(条件に関わらず)残ってしまうのですが。 >#フィルター適用条件のデータがない場合のエラー処理をしたほうがいいと思います・・ 載せていませんが、エラー処理は行っています。わざわざすみません。 >Sub Macro1() > > Dim fn As String > Dim comin As Integer > Dim gen As Integer > > '---前処理--- > > Workbooks(fn).Activate > Range("A1").Select > Selection.AutoFilter > Selection.AutoFilter Field:=2, Criteria1:=comin > Selection.AutoFilter Field:=3, Criteria1:=gen > > '表領域全体をコピーします。「3」は実際のコピー領域列に変更してください。 > Range(Cells(1, 1), Cells(Range("A65536").End(xlUp).Row, 3)).Copy ここで、Cells(1, 1)ではなく、2行目を選択できないものでしょうか? |
こうき さん、こんにちは >それが、オートフィルタを行うと1行目がそのまま(条件に関わらず)残ってしまうのですが。 > オートフィルタは「リスト」を扱います。「リスト」の1行目は項目名行として扱われますので、もし項目名行のない場合は、1行目が必ず残ってしまうとおもいます。 項目名行のないデータでオートフィルタ使うのであれば、先頭行に1行追加して、項目名行作っちゃえばどうでしょ? >> '表領域全体をコピーします。「3」は実際のコピー領域列に変更してください。 >> Range(Cells(1, 1), Cells(Range("A65536").End(xlUp).Row, 3)).Copy 上記と少し矛盾を感じますが、項目名行を除いてコピーするならコピー範囲の左上を変えるだけでいけると思います。 こんな感じ・・ Range(Cells(2, 1), Cells(Range("A65536").End(xlUp).Row, 3)).Copy > >ここで、Cells(1, 1)ではなく、2行目を選択できないものでしょうか? 2行目のみを選択するのであればちょっと違います。 その場合は、Findメソッドあたりを使ったほうがいいかも。 |
▼こうちゃん さん、こんにちは >オートフィルタは「リスト」を扱います。「リスト」の1行目は項目名行として扱われますので、もし項目名行のない場合は、1行目が必ず残ってしまうとおもいます。 >項目名行のないデータでオートフィルタ使うのであれば、先頭行に1行追加して、項目名行作っちゃえばどうでしょ? そうだったんですか。 早速作ってみたところうまくいきました。ありがとうございます。 これで完成!と思いきや、今度は別のところで詰まってしまいました。 Dim co1 As Integer Dim co2 As Integer Dim corow As Integer Dim fn As String co1 = 1 Do Cells(co1, 2).Select If Cells(co1, 2) = comin Then・・・※ co2 = 1 Do Cells(co2, 3).Select If Cells(co2, 3) = gen Then Exit Do End If co2 = co2 + 1 If co2 = corow Then Workbooks(fn).Close Exit Do End If Loop While Cells(co2, 3) <> "" Exit Do End If co1 = co1 + 1 If co1 = corow Then Workbooks(fn).Close Exit Do End If Loop While Cells(co1, 2) <> "" このようなコードで、※の部分で、デバック後、Cells(co1, 2) = 1 comin = 1 となっている(If Cells(co1, 2) = comin ThenがTrue)のに、いきなりEnd Ifへ飛んでいってしまいます。 なぜ次の行へ進まないのでしょうか? |
何も触っていないのにうまくいくようになりました。 なぜかは全く分かりません。 いろいろとありがとうございました。 |