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の絞込み解除