「あぁ……またセル範囲を打ち間違えた。$A$1:$C$10って打つの、地味に面倒だしミスるんだよね……」
こんなふうに感じたことはありませんか?
UserFormを作成したものの、対象のセル範囲をテキストボックスへ手入力させる設計は、ユーザーにとって思いのほか大きなストレスになることもあります。
1文字間違えるだけでマクロは止まり、せっかくの効率化が台無しですよね。
実は、Excel標準機能のように「マウスでドラッグして範囲を選択する」ボタンは、VBAでも簡単に作成できます。それが「RefEdit(レフエディット)」コントロールになります。
これを使えば、入力ミスはほぼ0になり、操作時間も短縮できます。今回はその実装方法を解説します!
RefEditとは?
RefEditとは、一言で言うと「Excelのシートとフォームを繋ぐ、伸縮自在なマジックハンド」のような機能になります。
普段、Excelで関数を入力する際、マウスで範囲を選択する時に現れるボタン、あれこそがRefEditです。
下準備:隠れたツールを呼び出す
実はRefEditは、初期状態のツールボックスには配置されておらず、隠れた状態になっています。以下の手順で呼び出すことができます。
- VBAのUserFormデザイン画面で、ツールボックスの何もないところを右クリック。
- 「その他のコントロール」を選択。
- リストから 「RefEdit.Ctrl」 を探してチェックを入れます。
これで、ツールボックスにRefEditのアイコンが登場します!

コピペで動く!基本のコード
配置したRefEdit(名前はRefEdit1とします)で選択した範囲を、メッセージボックスで表示するコードを書いてみましょう。
Private Sub CommandButton1_Click()
' 変数の宣言
Dim targetRange As Range
Dim selectedAddress As String
' RefEditに入力された文字列を取得
selectedAddress = RefEdit1.Value
' 何も選ばれていない時のエラー対策
If selectedAddress = "" Then
MsgBox "セルを選択してください", vbExclamation, "選択ミス"
Exit Sub
End If
' 文字列を実際のセルとして扱う
On Error Resume Next
Set targetRange = Range(selectedAddress)
On Error GoTo 0
' ちゃんと範囲が取得できたら、そのセルに色を塗ってみる
If Not targetRange Is Nothing Then
targetRange.Interior.Color = vbYellow
MsgBox targetRange.Address & " を黄色に塗りました!", vbInformation
Else
MsgBox "正しいセル範囲を選んでください。", vbCritical
End If
End Sub
使う時の注意点
RefEditは非常に強力で便利ですが、1点だけ知っておきたいポイントがあります。
それは「モードレスフォーム(操作中にシートを触れる状態のフォーム)」と併用する際、相性が悪く動作が不安定になるケースがある点です。
まずはシンプルに「ボタンを押したら選択範囲を処理する」という単独の機能から取り入れていただくのがおすすめです!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント