VBAのSelectで条件分岐やオブジェクトの選択を行う方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Selectの概要

条件分岐やオブジェクト選択を行う VBAの予約語

Select

概要 Select は、VBAで複数の条件を分岐する Select Case ステートメントや、セルやシートなどのオブジェクトを選択する Select メソッドとして使用されます。

わかりやすく説明 Select は、「条件に応じて処理を分けたり、Excel のセルやシートを選択するよ!」という命令です。

  • Select Case を使うと、条件分岐を簡潔に記述できる。
  • Range("A1").Select などでセルやシートを選択できる。
  • Excel VBA では Select メソッドを使わず、ActivateValue を使う方が良い場合が多い。

Select Case の基本的な使い方

Select Case を使って、数値に応じた処理を分岐する基本的な例です。

Sub ExampleSelectCase()
    Dim score As Integer
    score = 85

    Select Case score
        Case Is >= 90
            MsgBox "評価: 優", vbInformation, "結果"
        Case Is >= 70
            MsgBox "評価: 良", vbInformation, "結果"
        Case Is >= 50
            MsgBox "評価: 可", vbInformation, "結果"
        Case Else
            MsgBox "評価: 不可", vbInformation, "結果"
    End Select
End Sub

解説:

  • Select Case を使うと、If ... ElseIf よりも見やすく条件分岐を記述できる。
  • Case Is >= 90 のように条件を記述すると、範囲指定が可能。
  • Case Else で、どの条件にも当てはまらない場合の処理を記述できる。

Excel で Select メソッドを使う

セルやシートを選択する場合、Select メソッドを使用します。

Sub SelectExample()
    ' A1セルを選択
    Range("A1").Select
    
    ' シート2を選択
    Sheets("Sheet2").Select
End Sub

解説:

  • Range("A1").Select でセル A1 を選択。
  • Sheets("Sheet2").Select で別のシートを選択。
  • ただし、VBA では Select を使わずに直接操作する方が効率的。

Select を使わずに直接値を設定する

Excel VBA では、Select を使わずにセルやシートを直接操作する方が望ましいです。

Sub AvoidSelectExample()
    ' セル A1 に値を入力(Select 不要)
    Range("A1").Value = "直接入力"
    
    ' シートを選択せずに値を入力
    Sheets("Sheet2").Range("B1").Value = "シートを選択せずに書き込み"
End Sub

解説:

  • Select を使わずに Value を直接設定することで、処理が高速化される。
  • シートを選択せずにデータを操作するのがベストプラクティス。

エラーを回避する方法

Select を使う際に、シートやセルが存在しない場合のエラーハンドリングを追加します。

Sub SafeSelectExample()
    On Error Resume Next
    
    ' 存在しないシートを選択するとエラーになる
    Sheets("Sheet999").Select
    
    If Err.Number <> 0 Then
        MsgBox "シートが存在しません: " & Err.Description, vbExclamation, "エラー"
        Err.Clear
    End If
End Sub

解説:

  • 存在しないシートを選択するとエラーが発生する。
  • エラーハンドリングを追加し、エラーメッセージを表示することで回避。

Selectの注意事項

  • Select Case は If … ElseIf より可読性が高い: 条件分岐が多い場合に適している。
  • Excel の Select メソッドは極力使用を避ける: 直接オブジェクトを操作する方が効率的。
  • シートやセルを選択する前に存在確認をする: 存在しないシートやセルを選択するとエラーになる。

よくある質問

Q: Select Case と If … ElseIf の違いは何ですか?
A: Select Case は複数の条件を整理しやすく、可読性が向上します。条件が多い場合は Select Case の方が適しています。
Q: Excel VBA で Select を使わない方が良いのはなぜですか?
A: Select を使うとコードが遅くなり、不要な画面更新が発生するため、直接オブジェクトを操作する方が効率的です。
Q: セルの選択を解除する方法はありますか?
A: はい。ActiveSheet.Cells(1, 1).Select のように、別のセルを選択すると解除されます。または Application.CutCopyMode = False を使うとコピーや選択状態を解除できます。
Q: Select でエラーが出る場合の対処方法は?
A: シートやセルが存在するか確認してから Select を実行してください。例: If Not SheetExists("Sheet1") Then Exit Sub

まとめ

  • Select は条件分岐(Select Case)とオブジェクト選択(Select メソッド)の2つの用途がある。
  • Select Case を使うと、If ... ElseIf よりも可読性の高い条件分岐ができる。
  • Excel VBA では Select を使わず、直接セルやシートを操作するのが望ましい。
  • エラーハンドリングを適用し、存在しないオブジェクトを選択しようとするエラーを回避する。