Softex CelwareTech Blog
Excel VBA2026-05-27

選択中セルを安全に取得するExcel VBA汎用関数 GetSelectionCell

現在のSelectionがRangeの場合だけセル範囲として返し、図形などを選択している場合はNothingを返すExcel VBA汎用関数を解説します。

Excel VBA汎用プロシージャRangeSelection入力補助

概要

GetSelectionCellは、現在のSelectionRangeかどうかを確認し、セル範囲であれば返す汎用関数です。セル以外、たとえば図形やグラフを選択している場合はNothingを返します。

選択セルに追従する増減ボタンでは、増減ボタンを押したときに現在の対象セルを取得するために使っています。

使う場面

  • 現在選択中のセルを安全に取得したい
  • 図形選択中にセル前提の処理が落ちるのを防ぎたい
  • 汎用マクロでSelectionを扱う前に型チェックしたい
  • ボタン操作時に直前の選択セルを利用したい

使用例

セルが選択されているときだけ処理を続ける形で使います。

Dim targetCell As Range
Set targetCell = GetSelectionCell()

If targetCell Is Nothing Then Exit Sub
MsgBox targetCell(1).Address

コピー可能な実装コード

GetSelectionCell.bas
vba
コードを読み込み中...

初心者向けコード解説

Selectionは、セルだけでなく図形、グラフ、オブジェクトなどを返すことがあります。そのままRangeとして扱うとエラーになるため、いったんObject型のDummyへ受けています。

TypeName(Dummy) = "Range"でセル範囲かどうかを確認し、RangeならOutputへセットします。RangeでなければOutputNothingのままです。

関連記事

注意点

  • 複数セル選択の場合もRangeとして返ります。
  • 呼び出し側でIf SelectCell Is Nothing Then Exit Subのように確認してから使います。
  • 選択範囲の先頭セルだけを使いたい場合は、呼び出し側でSelectCell(1)のように扱います。

軽いまとめ

GetSelectionCellを挟むだけで、Selectionを使うマクロの安全性が上がります。セル前提の処理を汎用化するときに、先に入れておきたい小さな保険です。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →