【VBAで感動する瞬間⑲】SelectとActiveCell

記事
学び
こんにちは。  
ごんた@VBAレッスンです。

今日は、VBAでよく出てくる  
「Select」 と 「ActiveCell」 の違いについてお話しします。

この2つ、見た目が似ているので  
初心者さんは同じように感じてしまいます。

でも、実務でVBAを書くときには  
この違いを理解しているかどうかで、コードの安定性が大きく変わります。

■ Select は「選択した範囲」そのもの

まずは Select の本質から。

Select は“選択された範囲を作る動作”であり、 
その範囲そのものを表すイメージ。

Excelでマウスでドラッグして範囲を選ぶのと同じ。

```
Range("A1:C3").Select
```

これは  
A1〜C3 の範囲を選択状態にする
という意味。

つまり、Select は

- “枠”を作る  
- “範囲”を決める  
- “選択状態”を作る  

というイメージ。

■ ActiveCell は「その範囲の中にある現在位置」

そして、選択された範囲の中には  
必ず1つだけ ActiveCell が存在します。

```
Range("A1:C3").Select
MsgBox ActiveCell.Address
```

この場合、ActiveCell は A1

つまり、

Select で作られた“選択範囲”の中に  
ActiveCell(今アクティブなセル)が存在する。

この関係が分かると、  
Active と Select の違いが一気に腑に落ちます。

 ■ 図で表すとこういうイメージ

```
[ A1 ] B1 C1
  A2 B2 C2
  A3 B3 C3
```

- Select → A1〜C3 の“枠”  
- ActiveCell → その枠の中の「現在位置」= A1

このイメージが理解できれば、  
VBAの動きが一気に分かりやすくなる。

■ Select は“動作”、Active は“状態”

ここが一番大事。

Select は「選ぶ動作」  
ActiveCell は「今どこが選ばれているかという状態」

似ているようで、役割はまったく違います。

■ Select を使うコード(例)

```
Range("A1").Select
ActiveCell.Value = "OK"
```

- A1 を選択して  
- その選択されたセルに値を入れる  

という流れ。

---

■ Select を使わないコード(例)

```
Range("A1").Value = "OK"
```

こちらは  
選択を変えずに直接 A1 に書き込む。

実務ではこちらの方が安全で速い。

■ Select を多用すると起きる問題

Select は“人間の操作に近い”ため、実務では不安定になりやすい。

- 画面がカクカク動いて遅い  
- 選択がズレるとエラー  
- 他のシートがアクティブだと誤動作  
- マクロ実行中にユーザーが触ると壊れる  

だから、  
Select は必要なとき以外は使わない方が良い 
というのが実務の鉄則。

■ ActiveCell は便利だけど“依存しすぎると危険”

ActiveCell は便利ですが、  
「今どこがアクティブか」に依存するため、  
状況によっては誤動作の原因になります。

```
ActiveCell.Offset(1, 0).Value = "OK"
```

これは  
「今どこを選んでいるか」 によって結果が変わる。

実務では、  
“どのセルに書くかを明確に指定する” 方が安全です。

■ 今日のまとめ  
> Select は“選択した範囲”。  
> ActiveCell はその中に存在する“現在位置”。
> この関係を理解すると、VBA の動きが一気に分かりやすくなる。

気が付かないだけで、改善の種は至るところにあります。  
Active と Select の違いを理解するだけでも、  
コードの安定性と品質が大きく変わります。

■ 初心者さん向けのレッスンはこちら  
私のレッスンでは、  
「VBAってこんなに分かりやすかったんだ!」  
と感じてもらえるように、丁寧にお伝えしています。

実務に直結する形で、  
初心者さんが安心して学べる内容になっています。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら