[[20040508135211]] 『フィルタオプションの設定をマクロで使いたい』(のらウサギ) ページの最後に飛ぶ

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

 

『フィルタオプションの設定をマクロで使いたい』(のらウサギ)

はじめまして。マクロを勉強してまだ3ヶ月の、のらウサギといいます。
今、保存してあるデーターベースから「フィルタオプションの設定」をつかって条件を選択し
て抽出し、ブックへ貼り付け表示というマクロを参考書やHPを見ながら作成してますが、
セル範囲を指定するところでつまずいてます。

 表示するブックより検索条件設定
     ↓
 データーベースのブックを開く
     ↓
 表示するブックで設定した条件を使い、フィルタオプションの設定でデーターベースの
 データーを検索
     ↓
 検索されたデーターを表示するブックへコピペ

という作業なんですが「フィルタオプションの設定」の検索条件範囲を

   日付    作業名    担当   作業コード 
 1 2004/5/5         佐藤    
 2       パトロール        004
 3              後藤    
 4 2004/5/7  部品整理       

で指定するのですが行数が変化するので、最終行取得し範囲設定をさせたいのですが

 shita = Workbooks("条件.xls").Sheets("条件").Range("a1").CurrentRegion.Rows.Count
 shita2 = Workbooks("data.xls").Sheets("data").Range("a1").CurrentRegion.Rows.Count

 Sheets("data").Range(Cells(1, 1), Cells(shita2, 13)).Select
 Sheets("data").Range(Cells(1, 1), Cells(shita2, 13)).AdvancedFilterAction:=xlFilterInPlace, CriteriaRange:= _
 Workbooks("条件.xls").Sheets("条件").Range(Cells(1, 1), Cells(shita, 6)), Unique:=True

で実行させるとWorkbooks("条件.xls").Sheets("条件").Range(Cells(1, 1), Cells(shita, 6))のとこでつまづいてしまいます。
この場合どのようにしたらよろしいんでしょうか?


 原因はRangeプロパティの中で親オブジェクトの記述のないCellsプロパティを使用
していることにあります。
Workbooks("data.xls")がアクティブな状態でマクロを実行していると思いますが、
 
Workbooks("条件.xls").Sheets("条件").Range(Cells(1, 1), Cells(shita, 6))
 
この部分のRange(Cells(1, 1), Cells(shita, 6))の使い方が不正です。
 
 Workbooks("条件.xls").Sheets("条件")でRangeプロパティの取得を行おうとしていますが、
Cells(1, 1)、Cells(shita, 6)は親オブジェクトを記述していないために
アクティブなシート、つまり、Workbooks("data.xls").Sheets("data")の
Cellsプロパティの取得しに行こうとします。
違うシートのRangeオブジェクトをそれぞれ取得しに行くわけですから、
VBAが戸惑う(?)ワケです。したがって、

Workbooks("条件.xls").Sheets("条件").Range(Workbooks("条件.xls").Sheets("条件").Cells(1, 1), Workbooks("条件.xls").Sheets("条件").Cells(shita, 6))

 というふうにRangeプロパティの引数のRangeオブジェクトに長々と同じ親オブジェクトを
正確に記述していかなければなりません。
これではちょっと見た目が悪いので、先にRangeオブジェクトを変数に格納して
記述するとすっきりします。

 shita = Workbooks("条件.xls").Sheets("条件").Range("a1").CurrentRegion.Rows.Count
 shita2 = Workbooks("data.xls").Sheets("data").Range("a1").CurrentRegion.Rows.Count

    With Workbooks("条件.xls").Sheets("条件")
        Set 条件 = .Range(.Cells(1, 1), .Cells(shita, 6))
    End With

    Sheets("data").Range(Cells(1, 1), Cells(shita2, 13)).Select
    Sheets("data").Range(Cells(1, 1), Cells(shita2, 13)).AdvancedFilter _
        Action:=xlFilterInPlace, _
        CriteriaRange:=条件, _
        Unique:=True
 
(KAMIYA)

コメント返信:

[ 一覧(最新更新順) ]


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