【Excel】エクセルに検索ボタン・抽選ボタンを設置する(マクロ・フォームコントロール)方法
Excelを使った業務の中で、「特定のデータをすぐに検索したい」「ランダムに抽選を行いたい」と感じたことはないでしょうか。
そんなときに役立つのが、マクロとフォームコントロールを活用したボタンの設置です。
Excelには、VBA(Visual Basic for Applications)を使ったマクロ機能と、フォームコントロールと呼ばれるボタンやリストなどのUIパーツを組み合わせる機能が備わっています。
これらを組み合わせることで、クリック一つで検索や抽選が実行できる、使いやすいシートを作成することが可能です。
本記事では、Excelに検索ボタン・抽選ボタンを設置する具体的な方法を、マクロの書き方からフォームコントロールの使い方まで丁寧に解説していきます。
初心者の方でも理解しやすいよう、手順をステップごとに整理していますので、ぜひ最後までご覧ください。
ExcelのマクロとフォームコントロールでボタンUIを実現できる
それではまず、ExcelのマクロとフォームコントロールでボタンUIを実現できる仕組みについて解説していきます。
Excelでボタンを設置するには、大きく分けて2つのアプローチがあります。
一つ目はフォームコントロールを使う方法、二つ目はActiveXコントロールを使う方法です。
本記事では、より手軽に使えて初心者にも扱いやすい「フォームコントロール」を中心に紹介していきます。
フォームコントロールとは何か
フォームコントロールとは、Excelのシート上に配置できるボタン・チェックボックス・リストボックスなどのUI部品のことです。
「開発」タブから挿入できるこれらのパーツは、マクロと簡単に紐づけられるのが最大の特徴です。
ActiveXコントロールと比較して設定がシンプルで、VBAの知識が浅い段階でも扱いやすい点が魅力といえるでしょう。
マクロ(VBA)の基本的な役割
マクロとは、Excelの操作を自動化するためのプログラムのことです。
VBA(Visual Basic for Applications)というプログラミング言語を使って記述し、ボタンのクリックなどのイベントに応じて実行されます。
検索処理や抽選処理といった繰り返し行う操作を一瞬で自動化できるため、業務効率を大幅に向上させることが可能です。
開発タブを表示する手順
フォームコントロールやVBAエディタを使うには、まず「開発」タブをリボンに表示させる必要があります。
「ファイル」→「オプション」→「リボンのユーザー設定」→「開発」にチェックを入れてOK
この手順で開発タブが表示されれば、フォームコントロールの挿入やVBAエディタへのアクセスがスムーズになります。
設定は一度行えば次回以降は不要ですので、最初に済ませておくことをおすすめします。
Excelに検索ボタンを設置する方法(マクロ・フォームコントロール)
続いては、Excelに検索ボタンを設置する方法を確認していきます。
検索ボタンは、指定したキーワードをセル範囲から探し出し、該当セルを選択・強調表示するような用途でよく使われます。
ここでは、入力欄(セル)に検索ワードを入力し、ボタンを押すと一致するデータを見つけてくれるシンプルな仕組みを作成していきます。
検索マクロのコード例
以下は、A列のデータからB1セルに入力したキーワードを検索し、一致したセルをアクティブにするマクロの基本例です。
Sub 検索ボタン()
Dim keyword As String
Dim searchRange As Range
Dim foundCell As Range
keyword = Range(“B1”).Value
Set searchRange = Range(“A2:A100”)
Set foundCell = searchRange.Find(What:=keyword, LookIn:=xlValues, LookAt:=xlPart)
If Not foundCell Is Nothing Then
foundCell.Select
MsgBox “「” & keyword & “」が見つかりました。”
Else
MsgBox “「” & keyword & “」は見つかりませんでした。”
End If
End Sub
このコードでは、Find メソッドを使って部分一致検索を行っています。
LookAt:=xlPart と指定することで、完全一致でなく部分一致での検索が可能になります。
フォームコントロールでボタンを配置する手順
マクロを書いたら、それをボタンに紐づける手順は以下の通りです。
| 手順 | 操作内容 |
|---|---|
| ① 開発タブを開く | リボンの「開発」タブをクリック |
| ② 挿入をクリック | 「フォームコントロール」の「ボタン(フォームコントロール)」を選択 |
| ③ シート上にドラッグ | ボタンを配置したい場所をドラッグして描画 |
| ④ マクロの登録 | 表示されたダイアログで「検索ボタン」マクロを選択しOK |
| ⑤ ボタン名の変更 | 右クリック→「テキストの編集」でボタンのラベルを変更 |
この手順でボタンとマクロが紐づき、クリックするだけで検索が実行できるようになります。
検索結果をわかりやすく表示する工夫
検索結果をより視覚的に伝えるために、セルの背景色を変えて強調表示する工夫も効果的です。
foundCell.Interior.Color = RGB(255, 255, 0) ‘ 黄色で強調
上記のコードをFoundCellの処理部分に追加することで、見つかったセルが黄色くハイライトされ、一目でわかる検索結果を実現できます。
また、複数の一致データが存在する場合はFindNextメソッドを活用することで、すべての一致セルを順番に選択することも可能です。
検索ボタンの実用性を高めるには、「B1セルが空白のときはMsgBoxで入力を促す」などのエラーハンドリングを加えることが重要です。
ユーザーが誤って空のまま検索を実行してしまうケースを防ぎ、より使いやすいシートが完成します。
Excelに抽選ボタンを設置する方法(マクロ・フォームコントロール)
続いては、Excelに抽選ボタンを設置する方法を確認していきます。
抽選ボタンは、名前リストや応募者リストの中からランダムに1件(または複数件)を選ぶ際に非常に便利です。
イベントの景品抽選やアンケートの当選者選定など、さまざまなシーンで活用できます。
抽選マクロのコード例
以下は、A列に入力された名前リストの中からランダムに1名を抽選するマクロの基本例です。
Sub 抽選ボタン()
Dim lastRow As Long
Dim randomNum As Long
Dim winner As String
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
If lastRow < 2 Then
MsgBox “リストにデータがありません。”
Exit Sub
End If
Randomize
randomNum = Int((lastRow – 1) * Rnd + 2)
winner = Cells(randomNum, 1).Value
MsgBox “抽選結果:” & winner & ” さんが当選しました!”
End Sub
このコードでは、Rnd関数とRandomizeを使ってランダムな行番号を生成し、対応するセルの値を取得しています。
Randomizeを毎回実行することで、実行のたびに異なる乱数シードが設定され、偏りのない抽選が実現できます。
複数名を抽選する応用コード
1名だけでなく、複数名を重複なしで抽選したい場合は、少し工夫が必要です。
Sub 複数抽選()
Dim names() As String
Dim lastRow As Long
Dim i As Long, j As Long, temp As String
Dim pickCount As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
pickCount = 3 ‘ 抽選人数
ReDim names(2 To lastRow)
For i = 2 To lastRow
names(i) = Cells(i, 1).Value
Next i
Randomize
For i = lastRow To 3 Step -1
j = Int((i – 1) * Rnd + 2)
temp = names(i)
names(i) = names(j)
names(j) = temp
Next i
Dim result As String
For i = 2 To pickCount + 1
result = result & names(i) & vbNewLine
Next i
MsgBox “当選者:” & vbNewLine & result
End Sub
このコードは、Fisher-Yatesアルゴリズムに近いシャッフル処理を実装しており、重複なしで複数名を公平に抽選できます。
pickCountの数値を変えるだけで、抽選人数を柔軟に調整できる点も便利なポイントです。
抽選結果を専用セルに出力する方法
MsgBoxで表示するだけでなく、抽選結果をシート上の特定セルに書き出すことで、結果の記録や履歴管理が容易になります。
Range(“C2”).Value = winner ‘ C2セルに当選者名を出力
このように1行追加するだけで、抽選のたびに結果がセルに残るようになります。
複数回抽選を行う場合は、出力先の行をずらしながら記録していく仕組みにすると、履歴として活用できるでしょう。
検索ボタン・抽選ボタンをより便利にする応用テクニック
続いては、検索ボタン・抽選ボタンをより便利にする応用テクニックを確認していきます。
基本的なボタンの設置ができたら、さらに使いやすくするための工夫を加えることで、完成度の高いExcelシートに仕上げることができます。
ボタンのデザインをカスタマイズする方法
フォームコントロールのボタンは、右クリックから「コントロールの書式設定」を開くことで、フォントサイズや文字色などを変更することが可能です。
ただし、背景色の変更はフォームコントロールでは制限があるため、より細かいデザインを求める場合はActiveXコントロールの使用も検討するとよいでしょう。
| コントロールの種類 | 特徴 | デザイン自由度 |
|---|---|---|
| フォームコントロール | 設定が簡単・マクロ紐づけが容易 | やや低い |
| ActiveXコントロール | VBEでのイベント管理が必要 | 高い |
| 図形(オートシェイプ) | デザイン自由度が高い | 非常に高い |
図形(オートシェイプ)にマクロを登録する方法では、右クリックから「マクロの登録」を選ぶことで、好きな形や色のボタンを作成することも可能です。
シート保護とマクロの共存設定
シートを保護しながらマクロボタンを使えるようにするには、VBAコード内でシートの保護を一時解除する処理を加える方法が有効です。
ActiveSheet.Unprotect Password:=”パスワード”
‘ 処理内容
ActiveSheet.Protect Password:=”パスワード”
マクロの実行前後でUnprotect・Protectを呼び出すことで、通常時はシートが保護された状態を保ちつつ、ボタン操作時だけ処理が動く安全な設計が実現できます。
ボタンにショートカットキーを割り当てる方法
VBAエディタでマクロを管理する際、「マクロの実行」ダイアログからショートカットキーを設定することもできます。
「開発」タブ→「マクロ」→対象マクロを選択→「オプション」からショートカットキーを割り当てることで、キーボード操作だけでマクロを呼び出すことも可能になります。
フォームコントロールのボタン、図形へのマクロ登録、ショートカットキーの3つを組み合わせることで、マウス操作・キーボード操作の両方に対応した高い操作性を実現できます。
用途や使用者に合わせた柔軟な設計が、使いやすいExcelシートを生み出すポイントです。
まとめ
本記事では、Excelに検索ボタン・抽選ボタンを設置する方法について、マクロ(VBA)とフォームコントロールの使い方を中心に解説しました。
フォームコントロールは初心者でも扱いやすく、マクロと組み合わせることでクリック一つで処理を実行できるボタンが簡単に作成できます。
検索ボタンではFindメソッドを活用した部分一致検索、抽選ボタンではRnd関数やFisher-Yates的なシャッフル処理を使ったランダム抽選の実装方法をご紹介しました。
また、ボタンのデザインカスタマイズやシート保護との共存、ショートカットキーの設定といった応用テクニックを加えることで、より実用的なシートに仕上げることができます。
今回ご紹介したコードはそのまま活用できるものばかりですので、ぜひ実際のExcelファイルで試してみてください。
マクロとフォームコントロールを使いこなすことで、日々の業務効率が大きく向上するはずです。