2024年8月27日火曜日

ワークシート上でデータを絞り込む便利な検索手法ですが、対象外のデータ行は非表示なのがミソで厄介だな ー AutoFilter(VBAマクロ)

自動車フィルターじゃないよ
     
これまで、忘備録としてブログでエクセルのマクロ構文を紹介してきました。
会社で、エクセルのコードを書いている時、時々は参照するので便利なんだ。

それで、今回も複数の条件設定で検索できるコードをブログで参照しました。
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 件のコメント:

コメントを投稿