[Excel VBA] セルの検索、オートフィルター<確認問題>
今回は、Excel VBAでデータを探すときに使用する「セルの検索」、「オートフィルター」に関する理解度チェック問題です。
初・中級レベルの方向けの内容で、問題は5問あります。挑戦してみましょう。
【問題1】特定の値を検索して選択
次のコードを実行すると、どのセルが選択されますか?
1 2 3 4 5 6 7 8 9 |
Sub FindCell() Dim rng As Range Set rng = ActiveSheet.Cells.Find(What:="100") If Not rng Is Nothing Then rng.Select Else MsgBox "見つかりませんでした" End If End Sub |
(選択肢)
- シート上の最初に見つかった “100" のセルが選択される
- すべての “100" が選択される
- “100" が見つからない場合でもエラーにならない
- 1) と 3) の両方が正しい
正解:
4) 1) と 3) の両方が正しい
(解説)
- .Find は最初に見つかったセルを返す。
- “100" が見つからない場合、rng は Nothing になるため、エラーは発生しない。
- .Cells ⇒ Cells(行, 列) の引数が省略されているので、すべてのセルが参照される。
- Not rng Is Nothing ⇒ rng が Nothing では無い場合 →即ち、検索する語句が存在する場合は次の処理を実行する
【問題2】特定の値をすべて検索
シート内のすべての “合計" という値を含むセルを黄色にするコードを完成させてください。(下線箇所)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub FindAllCells() Dim rng As Range Dim firstAddress As String Set rng = ActiveSheet.Cells.Find(What:="合計", LookAt:=xlWhole) If Not rng Is Nothing Then firstAddress = rng.Address Do rng.Interior.Color = RGB(255, 255, 0) Set rng = ActiveSheet.Cells.FindNext(rng) Loop Until rng Is Nothing Or rng.Address = ______ Else MsgBox "見つかりません" End If End Sub |
(選択肢)
- Nothing
- firstAddress
- “合計"
- rng.Value
正解:
2) firstAddress
(解説)
- FindNext は .Find で見つかった次のセルを検索する。
- 最後まで行くと最初のセルに戻る。戻ったら終了する ように Loop Until rng.Address = firstAddress とする。
【問題3】特定の値でフィルターを適用
次のコードを実行すると、どのような結果になりますか?
1 2 3 |
Sub ApplyFilter() ActiveSheet.Range("A1:D100").AutoFilter Field:=2, Criteria1:="東京" End Sub |
(選択肢)
- B列が「東京」の行のみが表示される
- A列が「東京」の行のみが表示される
- フィルターが適用されるが、すべての行が表示されたまま
- エラーが発生する
正解:
1) B列が「東京」の行のみが表示される
(解説)
- Field:=2 は 2列目(B列) を基準にフィルターを適用する。
- Criteria1:="東京" により、B列に「東京」とある行のみ表示される。
【問題4】フィルター(抽出)の解除
適用されているオートフィルター自体は解除せず全ての行を表示するには、どのコードが正しいですか?
(選択肢)
- ActiveSheet.AutoFilterMode = False
- ActiveSheet.ShowAllData
- ActiveSheet.AutoFilter.Remove
- ActiveSheet.Range(“A1").AutoFilter.Clear
正解:
2) ActiveSheet.ShowAllData
(解説)WorkSheet オブジェクト .ShowAllData メソッドを使用する。
- ShowAllData はフィルターを解除し、すべての行を表示する。 ※注意)フィルターが掛かっていない状態で ShowAllData を実行するとエラーになる。
- AutoFilterMode = False はオートフィルター自体を解除する。
- オートフィルター自体の解除は Range(“A1").AutoFilter (引数を指定しない)のようにしても可能。
【問題5】オートフィルターの有無を判定
シートにオートフィルターが設定されているかどうかを判定し、設定されていなければ追加するコードを完成させてください。(下線箇所)
1 2 3 4 5 |
Sub CheckAndApplyFilter() If ActiveSheet.______ = False Then ActiveSheet.Range("A1:D1").AutoFilter End If End Sub |
(選択紙)
- AutoFilterMode
- FilterMode
- HasFilter
- EnableFilter
正解:
1) AutoFilterMode
(解説)WorkSeet オブジェクト .AutoFilterMode プロパティ
- AutoFilterMode は オートフィルターが適用されているかどうか を判定できる。
- (2, 3行目)If・・・False なら、オートフィルターが設定されていないので Then・・・AutoFilter を適用する。
- 注意)ActiveSheet.AutoFilterMode = True のようにしてもオートフィルターは適用できない。よって、追加するには上記サンプルコードのようにRange オブジェクト .AutoFilter メソッド を使う。
ディスカッション
コメント一覧
まだ、コメントがありません