自動車フィルターじゃないよ |
これまで、忘備録としてブログでエクセルのマクロ構文を紹介してきました。
会社で、エクセルのコードを書いている時、時々は参照するので便利なんだ。
それで、今回も複数の条件設定で検索できるコードをブログで参照しました。
ADODBの設定でSQL構文を引用したコードなのですが、思うように動かない。
色々と試行錯誤しましたが、時間の浪費ばかりで別の手法を考え始めました。
そう言えば、コードを書いた過去の経験から、オートフィルターを使ったな。
この時は、一覧表を検索して、その結果で取得した情報をカード型で閲覧だ。
ユーザーフォームを使って、矢印ボタンを押して前後データも閲覧できます。
オートフィルターは、検索速度が高速ですが、目的はワークシート上の閲覧。
条件に当てはまらない行は、非表示の状態だけなので検索結果を取得したい。
他には、条件で部分一致とか、二文字と三文字目が合致する項目を探すとか。
まあ、こういったテクニックを、サンプルコードをここで紹介しておきます。
Sub オートフィルタ設定()
' A列は項目名、データはB列から表示 / 3列目(C列)をVBAでフィルタリング
Worksheets("Sheet1").Range("B1").AutoFilter Field:=3, Criteria1:="VBA"
End Sub
*簡素化した記述でも構わない
Worksheets("Sheet1").Range("B1").AutoFilter 3, "VBA"
Private Sub KillFilter() 'シートのオートフィルタを解除
If Worksheets("Sheet1").AutoFilterMode = True Then
Worksheets("Sheet1").AutoFilterMode = False
End If
End Sub
Sub DP_AtoFtr() '部分一致の条件でオートフィルター実施
Worksheets("Sheet1").Range("A1").AutoFilter _
Field:=10, Criteria1:="AA*", Operator:=xlOr, Criteria2:="AC*"
End Sub
注:各種検索条件
="*AA" 後ろ二文字(AA)が合致
="AA*" 先頭二文字(AA)が合致
="100" 100と一致する
="<>100" 100と一致しない
="" ブランク
= ABC ABCを含む
= ?BC 2,3文字目がBC
条件”かつ” Criteria1:="<60", Operator:=xlAnd, Criteria2:=">=40"
条件”あるいは” Criteria1:="A", Operator:=xlOr, Criteria2:="B"
Sub VsblRw() '可視行のみ取得するループ処理
Dim rng As Range
Worksheets("Sheet1").Activate
For Each rng In Range("A2").CurrentRegion.SpecialCells(xlCellTypeVisible).Rows
rng.Select
MsgBox rng.Row '抽出行の数字を表示
Next
End Sub
注:Range("A2"):オートフィルター領域は二行目から
というわけで、フィルターにかけたデータは、解除も簡単にできるので便利。
ADODBでも、ファイルから複数検索条件から抽出することは可能なのですが、VBA構文の作成がやや面倒でもあり、それに比べるとオートフィルターの方が、行数の少ないコードのプロシージャを、次々に連続して実行すれば良いので、これは便利だなと思ったのでした。
0 件のコメント:
コメントを投稿