こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

特定のセルをフィルタするマクロを作りたい

特定のキーワードが含まれるセルをフィルタするマクロを作りたいです。

使用環境はExcel2010です。

口頭ではわかりにくいので、画像を添付します。
添付画像のように、それぞれの人物名と点数が一覧になった表があります。

特定の名前の人で点数が一定以下の行をフィルターしたいのですが、毎回フィルターで名前を選ぶのが面倒なので、マクロの記録機能で下記のマクロを作成しました。

Selection.AutoFilter
ActiveSheet.Range("$A$1:$C$7").AutoFilter Field:=2, Criteria1:="=鈴木", _
Operator:=xlOr, Criteria2:="=田中"
ActiveSheet.Range("$A$1:$C$7").AutoFilter Field:=3, Criteria1:="<70", _
Operator:=xlAnd

上記のマクロで、「田中」と「鈴木」のみ、点数が70点に満たなかった行を抜き出しています。

しかし、他部署の人物も調査の対処に含めるため、E2:E7セルに調査したい対象の名前を入れ、自動的にセルに入力された名前でフィルタリングされるようにしたいです。

この際のマクロの記載方法を知りたいです。

*部署によって人数が異なるため、E2:E7セルに入力する名前がすべて埋まるとは限りません。
*実際の名前と点数は毎月新しいExcelブックで送られてくるので、フィルター用のExcelシートにコピーペーストで張り付けて使用予定です。
*記載されている名前や点数は例です。

投稿日時 - 2014-03-05 12:46:16

QNo.8500824

困ってます

質問者が選んだベストアンサー

こんにちは!

お使いのバージョンがExcel2010というコトですので、一例です。
(Excel2007以降で動くと思います)

Sub Sample1()
Dim i As Long, lastRow As Long, str As String, myArray
lastRow = Cells(Rows.Count, "E").End(xlUp).Row
If lastRow > 1 Then
For i = 2 To lastRow
str = str & Cells(i, "E") & ","
Next i
str = Left(str, Len(str) - 1)
myArray = Split(str, ",")
Range("A1").AutoFilter field:=2, Criteria1:=myArray, Operator:=xlFilterValues
End If
End Sub

※ C列点数でのフィルタは考慮していません。

こんな感じではどうでしょうか?m(_ _)m

投稿日時 - 2014-03-05 14:03:27

お礼

ありがとうございます!
この内容でばっちり動きました!
マクロ記録機能で作ったActiveSheet~から始まる行で、点数選択しているらしい行をご提示いただいた End If の行の前に入れると狙い通りの動作になりました。
VBスクリプトはよく知らないので、コードの内容をググっていろいろと調べてみます。

投稿日時 - 2014-03-05 18:27:03

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

ご希望の操作をするにはフィルタオプションの設定の機能を利用します。

すなわち、F列の検索条件の項目名を元のデータと同じ「名前」 にしておき、数式タブの名前の定義で「抽出条件」と名前を付け、以下の式を入力します。
=OFFSET($F$1,0,0,COUNTA($F:$F),1)

そして以下のコードを実施すれば(マクロの記録で作成できる)、ご希望のデータが抽出されています。

Columns("A:C").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range _
("抽出条件"), Unique:=False

投稿日時 - 2014-03-05 13:21:10

お礼

ありがとうございます。
ただ、私の理解力が足りないせいか、ご提示いただいた内容を実施してもスクリプトエラーになってしまいました。
もう少し頑張ってみます!

投稿日時 - 2014-03-05 18:24:53

あなたにオススメの質問