Excel 2007のVBAでフィルタオプションを使いたいのですが、
うまく検索ができずに困っております。
どこが間違っているのでしょうか?
シートには、1行目が項目名、2行目が絞り込み内容を入力するところが入っており、
シートはじにある検索ボタン(フォームコントロール)にて
検索VBAを呼び出して検索しているのですが、うまくいきません。
↓シート
項目A | 項目B | 項目C | 項目D | 項目E | 項目F | 項目G |
---|---|---|---|---|---|---|
(検索内容) | (検索内容) | (検索内容) | (検索内容) | (検索内容) | (検索内容) | (検索内容) |
あ | い | う | え | お | か | き |
あ | い | う | え | お | か | き |
あ | い | う | え | お | か | き |
… | … | … | … | … | … | … |
VBA
1Sub search_Click() 2 If ActiveSheet.FilterMode = True Then 3 ActiveSheet.ShowAllData 4 End If 5 ActiveSheet.Range("A1").CurrentRegion.AdvancedFilter _ 6 Action:=xlFilterInPlace, _ 7 CriteriaRange:=ActiveSheet.Range("A1:J2"), _ 8 Unique:=False 9End Sub
以下を参照
http://www.atmarkit.co.jp/ait/articles/1403/07/news079_5.html
ご質問の回答
1行目:項目名
2行目:フィルター用検索入力
3行目以降:データが並んでおります。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
フィルターオプションを使うには、シートに検索条件の領域と検索対象の領域を用意する必要があります(下図を見てください)。
赤枠の部分(A1:G2)が検索条件の領域で、1行目に項目名、2行目に検索内容(値)を入れます。
緑枠の部分(A4:G8)が検索対象の領域で、1行目に項目名、2行目以降に内容(値)を入れます。
そして、コードでは検索条件の領域の範囲と、検索対象の領域の始まる位置(左上のセル)を指定します。
Sub search_Click() If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If ActiveSheet.Range("A4").CurrentRegion.AdvancedFilter _ ''検索対象の領域の位置(左上のセル)を指定 Action:=xlFilterInPlace, _ CriteriaRange:=ActiveSheet.Range("A1:J2"), _ ''検索条件の領域を指定 Unique:=False End Sub
同じ項目名(例えば、「項目A」)が、検索条件の領域と検索対象の領域で別の列にあってもかまいません。
また、検索条件に全部の項目が揃っていなくてもかまいません(項目Cだけで検索するというのもOK)
投稿2018/05/17 07:42
総合スコア6915
0
ベストアンサー
こうですかねぇ。
G10の10は適当です。
行数にあわせるよう修正してください。
VBA
1 ActiveSheet.Range("A3:G10").CurrentRegion.AdvancedFilter _ 2 Action:=xlFilterInPlace, _ 3 CriteriaRange:=ActiveSheet.Range("A1:G2"), _ 4 Unique:=False
投稿2018/05/17 06:44
総合スコア16996
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/17 07:01
2018/05/17 07:21
2018/05/17 07:29
2018/05/17 08:03
0
Range("A1")
かな、
どの範囲をフィルタ対象にするのか、で、A1はないでしょ。
3行目から空行なしにデータが並ぶ、
ということであれば、
Dim r As Long r = 3 Do Until IsEmpty(ActiveSheet.Cells(r, 1).Value) r = r + 1 Loop ' ただしDo - Loopを抜けたタイミングのrをそのまま使わず r - 1 を使う
として、r - 1
がデータが実在する最終行になるので、
Range("G" & CStr(r - 1))
などとすれば良さげ。
(テスト実行してませんけども。)
投稿2018/05/17 05:51
編集2018/05/17 07:35退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/17 05:58
退会済みユーザー
2018/05/17 06:12
2018/05/17 06:17
2018/05/17 06:30
2018/05/17 06:56
2018/05/17 06:59
2018/05/17 07:04
2018/05/17 07:26
2018/05/17 07:32
2018/05/17 07:40
2018/05/17 07:52
2018/05/17 07:57
2018/05/17 08:08
2018/05/17 08:08
2018/05/17 08:10
2018/05/17 08:18
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。