Excel VBAエキスパート資格・スタンダード試験対策の問題集に出題している「セルの検索とオートフィルター」の解説ページです。
目次
- 1 Excel VBA Findメソッド
- 1.1 What
- 1.2 After
- 1.3 LookIn
- 1.4 LookAt
- 1.5 SearchOrder
- 1.6 SearchDirection
- 1.7 MatchCase
- 1.8 MatchByte
- 1.9 SearchFormat
- 1.10 FindメソッドでA列全体の指定で検索する
- 1.11 Findメソッドで見つからなかったときのNothing
- 1.12 Findメソッドでセルを含む行をEntireRowで削除する
- 1.13 Findメソッドの検索結果をOffsetで操作する
- 1.14 Findメソッドの検索結果をCopyとEnd(xlToRight)で操作する
- 1.15 Findメソッドの検索結果をResizeで操作する
- 2 Excel VBA AutoFilterメソッド
- 3 セルの検索とオートフィルター|記憶定着問題集
Excel VBA Findメソッド
Excel VBAのセルの検索とオートフィルターの操作は、Findメソッド、AutoFilterメソッドです。
Findメソッドは、Excel VBAで特定の値を検索するために使用します。その際に検索に関する様々な引数が指定できます。
What
検索したい値やテキストを指定します。
After
検索を開始するセルの位置を指定します。指定しない場合は、検索は開始位置から行われます。
LookIn
検索対象の範囲を指定します。セルの値、数式、コメントなどのいずれかを選択します。
LookAt
検索時の一致条件を指定します。完全一致、部分一致などを選択できます。
SearchOrder
検索順序を指定します。行方向、列方向などの検索方法を指定できます。
SearchDirection
検索の方向を指定します。上から下、左から右などの方向を選択できます。
MatchCase
大文字と小文字を区別するかどうかを指定します。
MatchByte
ダブルバイト文字の区別を行うかどうかを指定します。
SearchFormat
検索対象とするセルの書式を指定します。
Sub FindExample()
Dim ws As Worksheet
Dim searchValue As String
Dim foundCell As Range
' 検索する値と対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
searchValue = "Apple" ' 検索する値
' Findメソッドを使用して値を検索
Set foundCell = ws.Cells.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)
If Not foundCell Is Nothing Then
MsgBox "値が見つかりました。セルの位置は: " & foundCell.Address
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
指定した値("Apple")をワークシート内で検索しています。Findメソッドの検索条件としては、検索値(What)と検索対象(LookIn)を設定しています。見つかった場合はセルの位置が、見つからなかった場合はメッセージが表示されます。
What
' 文字列"Apple"を検索する例
Set foundCell = ws.Cells.Find(What:="Apple")
After
' A1セルの後から検索を開始する例
Set foundCell = ws.Cells.Find(What:="Apple", After:=ws.Range("A1"))
LookIn
' 数式を検索する例
Set foundCell = ws.Cells.Find(What:="Apple", LookIn:=xlFormulas)
LookAt
' 完全一致で検索する例
Set foundCell = ws.Cells.Find(What:="Apple", LookAt:=xlWhole)
SearchOrder
' 行方向で検索する例
Set foundCell = ws.Cells.Find(What:="Apple", SearchOrder:=xlByRows)
SearchDirection
' 一致する前の値を検索する例
Set foundCell = ws.Cells.Find(What:="Apple", SearchDirection:=xlPrevious)
MatchCase
' 大文字小文字を区別して検索する例
Set foundCell = ws.Cells.Find(What:="Apple", MatchCase:=True)
MatchByte
' 2バイト文字が2バイト文字とだけ一致する例
Set foundCell = ws.Cells.Find(What:="りんご", MatchByte:=True)
SearchFormat
’ 書式を検索する例
Application.FindFormat.Clear
Application.FindFormat.Interior.Color = vbRed
Set foundCell = ws.Cells.Find(What:="*", SearchFormat:=True)
FindメソッドでA列全体の指定で検索する
Sub FindInColumnA()
Dim ws As Worksheet
Dim foundCell As Range
Dim searchValue As String
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 検索する値を指定
searchValue = "Apple"
' A列全体を対象にして検索する
Set foundCell = ws.Columns("A:A").Find(What:=searchValue)
' 検索結果をチェック
If Not foundCell Is Nothing Then
MsgBox "値が見つかりました。セルの位置は: " & foundCell.Address
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
Sheet1のA列全体を対象にして、"Apple"という値を検索しています。Columns("A:A")はA列全体を表し、その範囲でFindメソッドが実行されます。見つかった場合はそのセルの位置が、見つからなかった場合はメッセージが表示されます。
Findメソッドで見つからなかったときのNothing
Findメソッドは、指定した条件に合うセルを検索する際に使用します。Nothing は、条件に一致する値が見つからなかった場合に使います。
Sub FindNothingExample()
Dim ws As Worksheet
Dim foundCell As Range
Dim searchValue As String
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 検索する値を指定
searchValue = "Banana"
' A列全体を対象にして検索する
Set foundCell = ws.Columns("A:A").Find(What:=searchValue)
' 検索結果をチェックし、見つからなかった場合の処理を行う
If foundCell Is Nothing Then
MsgBox "値が見つかりませんでした。"
Else
MsgBox "値が見つかりました。セルの位置は: " & foundCell.Address
End If
End Sub
Sheet1 のA列全体を対象にして、"Banana"という値を検索しています。見つからなかった場合には、「値が見つかりませんでした。」というメッセージが表示されます。
Findメソッドでセルを含む行をEntireRowで削除する
Sub DeleteRowWithFind()
Dim ws As Worksheet
Dim foundCell As Range
Dim searchValue As String
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 検索する値を指定
searchValue = "Banana"
' A列全体を対象にして検索する
Set foundCell = ws.Columns("A:A").Find(What:=searchValue)
' 検索結果をチェックし、見つかった場合はその行を削除する
If Not foundCell Is Nothing Then
foundCell.EntireRow.Delete
MsgBox "値が見つかり、その行を削除しました。"
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
Sheet1 のA列全体を対象にして、"Banana"という値を検索し、見つかった場合にその行全体を削除します。
foundCell.EntireRow.Deleteの部分が、見つかったセルを含む行を削除するためのコードです。その後、削除が行われたかどうかのメッセージが表示されます。
Findメソッドの検索結果をOffsetで操作する
Offset は、指定したセルから指定された行数と列数だけ移動した位置にあるセルを表すプロパティです。Offset を使うことで、指定したセルから相対的に移動した位置にあるセルを操作できます。
Sub OffsetExample()
Dim ws As Worksheet
Dim foundCell As Range
Dim searchValue As String
Dim cellBelow As Range
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 検索する値を指定
searchValue = "Banana"
' A列全体を対象にして検索する
Set foundCell = ws.Columns("A:A").Find(What:=searchValue)
' 検索結果をチェックし、見つかった場合はそのセルから1行下のセルを取得する
If Not foundCell Is Nothing Then
Set cellBelow = foundCell.Offset(1, 0)
MsgBox "値が見つかりました。1行下のセルの値は: " & cellBelow.Value
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
Sheet1 のA列全体を対象にして、"Banana"という値を検索し、見つかった場合にそのセルから1行下のセルを取得しています。Offset(1, 0) の部分が、見つかったセルから1行下のセルを取得するためのコードです。そして、そのセルの値がメッセージボックスで表示されます。
Findメソッドの検索結果をCopyとEnd(xlToRight)で操作する
Copyメソッドは、指定した範囲やセルをコピーするメソッドです。xlToRight は、範囲を指定したセルから右端まで拡張する定数です。
Sub CopyToRangeE2()
Dim A As Range
' 対象のワークシートを指定
Set A = Range("A:A").Find(What:="Banana")
' 検索結果をチェックし、見つかった場合は指定された範囲をコピーする
If A Is Nothing Then
MsgBox "値が見つかりませんでした。"
Else
' 検索されたセルから右端までの範囲を指定
Range(A, A.End(xlToRight)).Copy Range("E2")
MsgBox "値が見つかりました。コピーが完了しました。"
End If
End Sub
Sheet1のA列全体を対象にして、"Banana"という値を検索し、見つかった場合にそのセルを基準にして右端までの範囲を取得します。そして、その範囲をE2にコピーします。`xlToRight`は、右端までの範囲を指定する定数として使用します。
Findメソッドの検索結果をResizeで操作する
Resize は、指定された範囲のサイズを変更します。指定された行数と列数にサイズを変更した範囲を操作できます。
Sub ResizeExample()
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim foundCell As Range
Dim searchValue As String
Dim copyRange As Range
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")
' 検索する値を指定
searchValue = "Banana"
' A列全体を対象にして検索する
Set foundCell = ws.Columns("A:A").Find(What:=searchValue)
' 検索結果をチェックし、見つかった場合は指定された範囲をコピーする
If Not foundCell Is Nothing Then
' 検索されたセルから右に3つのセル分の範囲を取得する
Set copyRange = foundCell.Resize(1, 3)
' シート2のA1にコピー
copyRange.Copy ws2.Range("A1")
MsgBox "値が見つかりました。コピーが完了しました。"
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
Sheet1 のA列全体を対象にして、"Banana"という値を検索し、見つかった場合にそのセルを基準にして右に3つのセル分の範囲を取得します。そして、その範囲をシート2のA1にコピーします。Resize(1, 3) は、1行3列の範囲を指定しています。
Excel VBA AutoFilterメソッド
AutoFilterメソッドは、データ範囲をフィルタリングして表示するメソッドです。
Field
フィルタリングする列の番号やフィールド名を指定します。
Criteria1
フィルタリングの条件を指定します。
Operator
条件の比較演算子を指定します。
Criteria2
二つ目の条件を指定します。
Sub FilterExample()
Dim ws As Worksheet
Dim rng As Range
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' フィルタリングするデータ範囲を指定
Set rng = ws.Range("A1:D10") ' 例えばA1からD10までのデータ範囲
' AutoFilterを適用する(Field=1の列でCriteria1="Apple"の行を表示)
rng.AutoFilter Field:=1, Criteria1:="Apple"
End Sub
Sheet1 のA1からD10までのデータ範囲に対して、1番目の列(Field=1)で"Apple"という条件(Criteria1="Apple")を使ってフィルタリングをかけます。
条件を指定した列に基づいて、特定のデータを表示したり非表示にしたりすることができます。条件や操作子を変えることで、様々なフィルタリングを行えます。
AutoFilterメソッドでCriteria1に複数条件を配列形式で指定
Sub MultiCriteriaFilter()
Dim ws As Worksheet
Dim rng As Range
Dim criteriaArray As Variant
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' フィルタリングするデータ範囲を指定
Set rng = ws.Range("A1:D10") ' 例えばA1からD10までのデータ範囲
' 複数の条件を配列で指定
criteriaArray = Array("Apple", "Orange", "Banana")
' Field=1の列でCriteria1に複数条件を指定してフィルタリング
rng.AutoFilter Field:=1, Criteria1:=criteriaArray, Operator:=xlFilterValues
End Sub
Sheet1のA1からD10までのデータ範囲に対して、1番目の列(Field=1)で複数の条件を指定してフィルタリングをかけます。Criteria1 に複数の条件を配列として指定し、Operator に xlFilterValues を指定で、配列内のいずれかの条件に合致する行を表示します。
AutoFilterメソッドで絞り込んだ結果をCurrentRegionで操作
CurrentRegion は、指定したセルを含む連続するデータを操作できます。
Sub CopyCurrentRegion()
Dim A As Range
' A列 Bananaで絞り込み
Range("A1").AutoFilter 1, "Banana"
' 検索結果セルA1を含むひとかたまりの範囲をシート2のA1にコピー
Range("A1").CurrentRegion.Copy Sheets("Sheet2").Range("A1")
End Sub
指定した条件 "Banana"でデータをフィルタリングし、その結果得られたデータ範囲を CurrentRegion を使って、シート2のA1にコピーしています。
AutoFilterメソッドで絞り込んだ結果をSubtotalで操作
Subtotal 関数は、データの集計を行う機能です。データを絞り込んだ後に、Subtotal関数を使って集計できます。
Sub FilterAndCountWithSubtotal()
Dim N As Long
' AutoFilterで条件を適用
Range("A1").AutoFilter Field:=1, Criteria1:="Banana"
' サブトータルを使って絞り込んだデータのカウントを行う
N = WorksheetFunction.Subtotal(3, Range("A:A"))
' カウント結果を表示(例えば即時ウィンドウに出力)
Debug.Print "Count of filtered data: " & N
' フィルタを解除
Range("A1").AutoFilter 1
End Sub
Subtotal関数の第1引数に 3 を指定で「カウント」を示す定数です。A列をBananaで絞り込んで、Subtotalで件数を取得して、ウィンドウに出力しています。
AutoFilterメソッドで絞り込んだ結果をEnd(xlUp)で操作
End(xlUp) は指定セルから最終行までの範囲を指定します。
Sub FilterAndEndxlUpl()
Dim N As Long
' AutoFilterで条件を適用
Range("A1").AutoFilter Field:=1, Criteria1:="Banana"
' AutoFilterで絞り込んだ結果を、A1から最終行範囲に100を代入します。
Range(Range("D2"), Cells(Rows.Count, 4).End(xlUp)) = 100
' フィルタを解除
Range("A1").AutoFilter 1
End Sub
A列をBananaで絞り込んで、D2から下方向に最終行まで100を代入します。
セルの検索とオートフィルター|記憶定着問題集
操作方法:1.●●●をクリック(スマホはタップ)で答え表示。2.答えをクリック(スマホはタップ)で●●●表示。1⇔2を繰り返すことで、記憶を定着できます。
Findメソッドは、Excel VBAで特定の値を検索するために使用します。その際に検索に関する様々な引数が指定できます。
Findメソッドの引数
●●●
検索したい値やテキストを指定します。
検索を開始するセルの位置を指定します。指定しない場合は、検索は開始位置から行われます。 ●●●
検索対象の範囲を指定します。セルの値、数式、コメントなどのいずれかを選択します。 ●●●
検索時の一致条件を指定します。完全一致、部分一致などを選択できます。 ●●●
検索順序を指定します。行方向、列方向などの検索方法を指定できます。 ●●●
検索の方向を指定します。上から下、左から右などの方向を選択できます。 ●●●
大文字と小文字を区別するかどうかを指定します。 ●●●
ダブルバイト文字の区別を行うかどうかを指定します。 ●●●
検索対象とするセルの書式を指定します。
Sub FindExample()
Dim ws As Worksheet
Dim searchValue As String
Dim foundCell As Range
' 検索する値と対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
searchValue = "Apple" ' 検索する値
' Findメソッドを使用して値を検索
Set foundCell = ws.Cells.●●●(●●●searchValue, ●●●xlValues, ●●●xlWhole)
If Not foundCell Is Nothing Then
MsgBox "値が見つかりました。セルの位置は: " & foundCell.Address
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
指定した値("Apple")をワークシート内で検索しています。Findメソッドの検索条件としては、検索値(●●●)と検索対象(●●●)を設定しています。見つかった場合はセルの位置が、見つからなかった場合はメッセージが表示されます。
' 文字列"Apple"を検索する例
Set foundCell = ws.Cells.Find(●●●"Apple")
' A1セルの後から検索を開始する例
Set foundCell = ws.Cells.Find(●●●"Apple", ●●●ws.Range("A1"))
' 数式を検索する例
Set foundCell = ws.Cells.Find(●●●"Apple", ●●●xlFormulas)
' 完全一致で検索する例
Set foundCell = ws.Cells.Find(●●●"Apple", ●●●xlWhole)
' 行方向で検索する例
Set foundCell = ws.Cells.Find(●●●"Apple", ●●●xlByRows)
' 一致する前の値を検索する例
Set foundCell = ws.Cells.Find(●●●"Apple", ●●●xlPrevious)
' 大文字小文字を区別して検索する例
Set foundCell = ws.Cells.Find(●●●"Apple", ●●●rue)
' 2バイト文字が2バイト文字とだけ一致する例
Set foundCell = ws.Cells.Find(●●●"りんご", ●●●True)
’ 書式を検索する例
Application.FindFormat.Clear
Application.FindFormat.Interior.Color = vbRed
Set foundCell = ws.Cells.Find(●●●"*", ●●●True)
FindメソッドでA列全体の指定で検索する
Sub FindInColumnA()
Dim ws As Worksheet
Dim foundCell As Range
Dim searchValue As String
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 検索する値を指定
searchValue = "Apple"
' A列全体を対象にして検索する
Set foundCell = ws.●●●("A:A").Find(●●●searchValue)
' 検索結果をチェック
If Not foundCell Is ●●● Then
MsgBox "値が見つかりました。セルの位置は: " & foundCell.Address
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
Sheet1のA列全体を対象にして、"Apple"という値を検索しています。Columns("A:A")はA列全体を表し、その範囲でFindメソッドが実行されます。見つかった場合はそのセルの位置が、見つからなかった場合はメッセージが表示されます。
Findメソッドは、指定した条件に合うセルを検索する際に使用します。●●● は、条件に一致する値が見つからなかった場合に使います。
Sub FindNothingExample()
Dim ws As Worksheet
Dim foundCell As Range
Dim searchValue As String
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 検索する値を指定
searchValue = "Banana"
' A列全体を対象にして検索する
Set foundCell = ws.Columns("A:A").Find(What:=searchValue)
' 検索結果をチェックし、見つからなかった場合の処理を行う
If foundCell Is ●●● Then
MsgBox "値が見つかりませんでした。"
Else
MsgBox "値が見つかりました。セルの位置は: " & foundCell.Address
End If
End Sub
Findメソッドでセルを含む行をEntireRowで削除する
Sub DeleteRowWithFind()
Dim ws As Worksheet
Dim foundCell As Range
Dim searchValue As String
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 検索する値を指定
searchValue = "Banana"
' A列全体を対象にして検索する
Set foundCell = ws.Columns("A:A").Find(What:=searchValue)
' 検索結果をチェックし、見つかった場合はその行を削除する
If Not foundCell Is Nothing Then
foundCell.●●●
MsgBox "値が見つかり、その行を削除しました。"
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
Offset は、指定したセルから指定された行数と列数だけ移動した位置にあるセルを表すプロパティです。Offset を使うことで、指定したセルから相対的に移動した位置にあるセルを操作できます。
Sub OffsetExample()
Dim ws As Worksheet
Dim foundCell As Range
Dim searchValue As String
Dim cellBelow As Range
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 検索する値を指定
searchValue = "Banana"
' A列全体を対象にして検索する
Set foundCell = ws.Columns("A:A").Find(What:=searchValue)
' 検索結果をチェックし、見つかった場合はそのセルから1行下のセルを取得する
If Not foundCell Is Nothing Then
Set cellBelow = foundCell.●●●
MsgBox "値が見つかりました。1行下のセルの値は: " & cellBelow.Value
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
Findメソッドの検索結果をCopyとEnd(xlToRight)で操作する
Copyメソッドは、指定した範囲やセルをコピーするメソッドです。xlToRight は、範囲を指定したセルから右端まで拡張する定数です。
Sub CopyToRangeE2()
Dim A As Range
' 対象のワークシートを指定
Set A = Range("A:A").Find(What:="Banana")
' 検索結果をチェックし、見つかった場合は指定された範囲をコピーする
If A Is Nothing Then
MsgBox "値が見つかりませんでした。"
Else
' 検索されたセルから右端までの範囲を指定
Range(A, A.End(●●●)).●●●("E2")
MsgBox "値が見つかりました。コピーが完了しました。"
End If
End Sub
Findメソッドの検索結果をResizeで操作する
Resize は、指定された範囲のサイズを変更します。指定された行数と列数にサイズを変更した範囲を操作できます。
Sub ResizeExample()
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim foundCell As Range
Dim searchValue As String
Dim copyRange As Range
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")
' 検索する値を指定
searchValue = "Banana"
' A列全体を対象にして検索する
Set foundCell = ws.Columns("A:A").Find(What:=searchValue)
' 検索結果をチェックし、見つかった場合は指定された範囲をコピーする
If Not foundCell Is ●●● Then
' 検索されたセルから右に3つのセル分の範囲を取得する
Set copyRange = foundCell.●●●
' シート2のA1にコピー
copyRange.Copy ws2.Range("A1")
MsgBox "値が見つかりました。コピーが完了しました。"
Else
MsgBox "値が見つかりませんでした。"
End If
End Sub
Excel VBA AutoFilterメソッド
AutoFilterメソッド
AutoFilterメソッドは、データ範囲をフィルタリングして表示するメソッドです。
AutoFilterメソッドの引数
Field
フィルタリングする●●●番号や●●●を指定します。
フィルタリングの条件を指定します。 ●●●
条件の比較演算子を指定します。 ●●●
二つ目の条件を指定します。
Sub FilterExample()
Dim ws As Worksheet
Dim rng As Range
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' フィルタリングするデータ範囲を指定
Set rng = ws.Range("A1:D10") ' 例えばA1からD10までのデータ範囲
' AutoFilterを適用する(●●●の列で●●●"Apple"の行を表示)
rng.●●● ●●●, ●●●"Apple"
End Sub
Sheet1 のA1からD10までのデータ範囲に対して、1番目の列(Field=1)で"Apple"という条件(Criteria1="Apple")を使ってフィルタリングをかけます。
条件を指定した列に基づいて、特定のデータを表示したり非表示にしたりすることができます。条件や操作子を変えることで、様々なフィルタリングを行えます。
AutoFilterメソッドでCriteria1に複数条件を●●●形式で指定
Sub MultiCriteriaFilter()
Dim ws As Worksheet
Dim rng As Range
Dim criteriaArray As Variant
' 対象のワークシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' フィルタリングするデータ範囲を指定
Set rng = ws.Range("A1:D10") ' 例えばA1からD10までのデータ範囲
' 複数の条件を配列で指定
criteriaArray = ●●●("Apple", "Orange", "Banana")
' Field=1の列でCriteria1に複数条件を指定してフィルタリング
rng.AutoFilter Field:=1, Criteria1:=●●●, Operator:=xlFilterValues
End Sub
Sheet1のA1からD10までのデータ範囲に対して、1番目の列(Field=1)で複数の条件を指定してフィルタリングをかけます。Criteria1 に複数の条件を配列として指定し、Operator に xlFilterValues を指定で、配列内のいずれかの条件に合致する行を表示します。
AutoFilterメソッドで絞り込んだ結果をCurrentRegionで操作
CurrentRegion は、指定したセルを●●●データを操作できます。
Sub CopyCurrentRegion()
Dim A As Range
' A列 Bananaで絞り込み
Range("A1").AutoFilter 1, "Banana"
' 検索結果セルA1を含むひとかたまりの範囲をシート2のA1にコピー
Range("A1").●●● Sheets("Sheet2").Range("A1")
End Sub
指定した条件 "Banana"でデータをフィルタリングし、その結果得られたデータ範囲を CurrentRegion を使って、シート2のA1にコピーしています。
AutoFilterメソッドで絞り込んだ結果をSubtotalで操作
Subtotal 関数は、データの集計を行う機能です。データを絞り込んだ後に、Subtotal関数を使って集計できます。
Sub FilterAndCountWithSubtotal()
Dim N As Long
' AutoFilterで条件を適用
Range("A1").AutoFilter Field:=1, Criteria1:="Banana"
' サブトータルを使って絞り込んだデータのカウントを行う
N = WorksheetFunction.●●●(3, Range("A:A"))
' カウント結果を表示(例えば即時ウィンドウに出力)
Debug.Print "Count of filtered data: " & N
' フィルタを解除
Range("A1").●●●
End Sub
Subtotal関数の第1引数に 3 を指定で「カウント」を示す定数です。A列をBananaで絞り込んで、Subtotalで件数を取得して、ウィンドウに出力しています。
AutoFilterメソッドで絞り込んだ結果をEnd(xlUp)で操作
End(xlUp) は指定セルから最終行までの範囲を指定します。
Sub FilterAndEndxlUpl()
Dim N As Long
' AutoFilterで条件を適用
Range("A1").AutoFilter Field:=1, Criteria1:="Banana"
' AutoFilterで絞り込んだ結果を、A1から最終行範囲に100を代入します。
Range(Range("D2"), Cells(Rows.Count, 4).●●●)) = 100
' フィルタを解除
Range("A1").●●●
End Sub
A列をBananaで絞り込んで、D2から下方向に最終行まで100を代入します。
Excel VBAのスキルを活かして、仕事の効率化に貢献しませんか?
当サイトでは、Excel VBAエキスパート認定資格取得に向けた情報を提供しています。興味がある方は、ぜひ以下の問題集からチャレンジしてみてください。
ExcelVBAエキスパートスタンダードは、業務効率をあげるためにExcelVBAを利用する人が対象の問題集です。