さわやかに

Pythonのことだったり子供のことだったり

ExcelVBA セルの検索(Findメソッド)とオートフィルタ(AutoFilter)

Findメソッド

セル範囲.Find(What:=検索値, _
              After:=検索開始セル, _
              LookIn:=値か数式かコメントか, _
              LookAt:=完全一致か部分一致か, _
              SearchOrder:=行方向か列方向か, _
              SearchDirection:=順方向か逆方向か, _
              MatchCase:=大文字と小文字を区別するか, _
              MatchByte:=全角と半角を区別するか, _
              searchFormat:=書式を条件に含めるかどうか)

必ず指定しなければならない引数は「What」のみ
指定した方がいい引数は「LookAt」
【LookAt引数】

定数 意味
xlWhole 完全一致
xlPart 部分一致

Findメソッドの戻り値はRange型なのでSetが必要
セルが見つからなかった場合はNothingを返す

Dim myRng as Range
Set myRng = Range("A1:A5").Find(What:="佐藤", LookAt:=xlWhole)

AutoFilter

セル.AutoFilter Field:=列番号, _
                Criteria1:=絞込み条件1, _
                Operator:=演算子, _
                Criteria2:=絞り込み条件2

引数の名前を省略することで可読性が高まる

Range("A1").AutoFilter 3, "佐藤", xlOr, "佐々木"

「○より大きい」などの比較演算子での絞込みが可能

Range("A1").AutoFilter 4, ">=300", xlAnd, "<=700"

3つ以上の条件を指定する場合は配列形式で絞込みが可能
Operator引数にはxlFilterValuesを指定する
次のコードは、佐藤または佐々木または鈴木で絞り込む

Dim arry(2) as String
arry(0) = "佐藤"
arry(1) = "佐々木"
arry(2) = "鈴木"
Range("A1").AutoFilter 3, arry, xlFilterValues

AutoFilterで絞り込んだ件数をカウントする

Dim num As Long
Range("A1").AutoFilter 3, "佐藤"
num = WorksheetFunction.SubTotal(3, Range("A:A")) - 1 '見出し行を-1する
MsgBox "件数は" & num &"件です。"

AutoFilterで絞込み、表示されているセルのみ編集
次のコードは表示されているD列に1000を代入する

Range("A1").AutoFilter 3, "佐藤"
Range(Range("D2"), Cells(Rows.Count, 4).End(xlUp)) = 1000
Range("A1").AutoFilter 3 ' AutoFilterの絞込み解除