プロが教える店舗&オフィスのセキュリティ対策術

目下VBA学習中の初心者です
現在取り組んでいるエクセルのマクロで、フィルターオプションを使いたいところがあるのですが、以下の点でうまくできず困っています。
どなたかアドバイスや別の方法などがあれば、ご指導願えないでしょうか

下記の記述にある「CriteriaRange:=Range("e3:g5")」のrange("e3:e5")の「e3:e5」の部分を条件変化に対応できるように、変数(例query-1)に置き換えたいと思いました。

そこで、同じシートのe7にquery-1という範囲名をつけe7にe3:g5を入力した後、上記の部分をRange("=query-1")としたり、
Range("=cell("contents",query-1)")などいろいろ試しましたが、いずれもうまくいきません

Sheets("data1").Range("D10:Q510").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("e3:g5"), CopyToRange:=Range("D10:Q10"), Unique:= _
False

このような場合の、もっとよい方法や、解決法についてどなたか、ご指導願えないでしょうか。よろしくお願いします

tomosato-t

A 回答 (3件)

AdvancedFilterの例。

コードは短くを目指しました。
Criteria部分の相対化を図っています。
<テストデータ>
A1:B5に下記を入れる。
コード値
110
230
115
310
4 13
4 19
D1:E4に
コードコード
23
コードコード
14
と入れる。
コマンドボタンを1つ貼り付ける。
<操作>
(1)Criteriaに当たるセルを範囲指定
(2)コマンドボタンをクリック
<結果>
D1:D2を範囲指定して、ボタンをクリックすると
結果はA10:B11に
コード値
230
----
E1:E2を範囲指定して、ボタンをクリックすると
結果はA10:B11に
コード値
310
となる。
<コード>
Sheet1のボタンのイベントプロシジュアーに
Private Sub CommandButton1_Click()
Dim s As String
s = Selection.Address
Call Macro1(s)
End Sub
----------
Module1に
Sub Macro1(s As String)
Range("A1:B5").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range(s) _
, CopyToRange:=Range("A10:B14"), Unique:=False
End Sub
を入れておく。その後上記操作をすること。
    • good
    • 0
この回答へのお礼

imogasiさん
具体的で丁寧なご指導ありがとうございました
おかげさまで、無事問題が解決しました
いろいろな本をみても出ていないことが多く、このような具体的なご指導をいただけることは、初心者にとって心強いかぎりです
心より感謝します
tomosato

お礼日時:2002/10/01 11:09

こんばんは


>上記の部分をRange("=query-1")としたり、

Range(Range("query-1").Value)
とすると?
    • good
    • 0
この回答へのお礼

Enfantさん
早速のアドバイスありがとうございました
おかげさまで、いろんな解き方を知ることができました
いろいろな本をみても出ていないことが多く、このようなご指導をいただけることは、初心者にとって心強いかぎりです
心より感謝します
tomosato

お礼日時:2002/10/01 11:06

こんにちは。

maruru01です。

あまりスマートなやり方ではありませんが。

検索対象範囲がD10:Q510で決まっていて、検索条件範囲を選択しておいて、マクロを実行します。
検索条件範囲の左上と右下のセルの行・列番号を取得するやり方です。


Sub 抽出()

  Dim StartRow As Long
  Dim StartCol As Long
  Dim EndRow As Long
  Dim EndCol As Long

  StartRow = Selection.Row
  StartCOl = Selection.Column
  EndRow = Selection.Rows(Selction.Rows.Count).Row
  EndCol = Selection.Columns(Selction.Columns.Count).Column

  Sheets("data1").Range("D10:Q510").AdvancedFilter Action:=xlFilterCopy, _
  CriteriaRange:=Range(Cells(StartRow, StartCol), Cells(EndRow, EndCol)), _
  CopyToRange:=Range("D10:Q10"), Unique:=False

End Sub
    • good
    • 0
この回答へのお礼

maruru01さん
丁寧なご指導ありがとうございました
おかげさまで、無事問題が解決しました
いろいろな本をみても出ていないことが多く、このようなご指導をいただけることは、初心者にとって心強いかぎりです
心より感謝します
tomosato

お礼日時:2002/10/01 11:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!