過去ログ

                                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行目の番号は異なっていて、どうしたらいいのか途方にくれています。
よい方法があれば教えてください。
 ───────────────────────────────────────  ■題名 : Re:オートフィルタについて  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/9/30(月) 13:06  -------------------------------------------------------------------------
   こうき さん、こんにちは

>以下のようにオートフィルタをかけます。
>
>  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
 ───────────────────────────────────────  ■題名 : Re:オートフィルタについて  ■名前 : こうき  ■日付 : 02/9/30(月) 14:54  -------------------------------------------------------------------------
   こうちゃん さん、こんにちは

>オートフィルタを適用した時点でエラーになっていなければ、条件に該当するデータがあるはずですので、表全体をコピーして、ペーストすれば、フィルタ条件に該当する列だけペーストされると思いますが、それじゃ要件を満たしませんか?

それが、オートフィルタを行うと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行目を選択できないものでしょうか?
 ───────────────────────────────────────  ■題名 : 項目名行はどうなってますか?  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/9/30(月) 15:48  -------------------------------------------------------------------------
   こうき さん、こんにちは

>それが、オートフィルタを行うと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メソッドあたりを使ったほうがいいかも。
 ───────────────────────────────────────  ■題名 : Re:項目名行はどうなってますか?  ■名前 : こうき  ■日付 : 02/9/30(月) 16:05  -------------------------------------------------------------------------
   ▼こうちゃん さん、こんにちは

>オートフィルタは「リスト」を扱います。「リスト」の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へ飛んでいってしまいます。
なぜ次の行へ進まないのでしょうか?
 ───────────────────────────────────────  ■題名 : Re:項目名行はどうなってますか?  ■名前 : こうき  ■日付 : 02/9/30(月) 16:47  -------------------------------------------------------------------------
   何も触っていないのにうまくいくようになりました。
なぜかは全く分かりません。
いろいろとありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 147