Excelでアンケートを作るときに、開発タブを表示して、「挿入→フォームコントロール→チェックボックス」でチェックボックスを追加できるんですが、チェックボックスを100個とか作るときに、手動だと大変だし、コピペすると「リンクするセル」が全部同じになってしまって、使い物にならないのでチェックボックスとそのリンクするセルを自動で挿入するマクロを作りました。
「開発」タブの表示方法
あんまりこの記事とは関係ないのですが、「開発」タブがエクセルのウインドウの上に表示されてない時は、オプションで表示させます。
ます、「(ウインドウ左上)ファイル→(ウインドウ左下)オプション」でオプションウインドウを標示します。(わかりにくい場合は「エクセル 開発 タブ 表示」などで調べると色々出てきます。)

次に、オプションウインドウで→左側のメニューの下のほう「リボンのユーザー設定」をクリック→ウインドウ右側「リボンのユーザー設定」の下のセレクトボックスで「メインタブ」を選択→その下に表示されるツリー上のチェックのリストの「開発」のチェックをON→ウインドウ右下の「OK」ボタンをクリックすると、エクセルのウインドウの上に「開発」というタブが表示されるようになります。

マクロを追加する準備
で、マクロを追加していきます。開発タブをクリック→VisualBasicをクリック。VisalBasicのウインドウが開きます。

VisualBasicのウインドウで、挿入→標準モジュールを選択。そうすると、ウインドウ左側に「標準モジュール」というフォルダができて、その下に「Module1」というのが追加されるのでダブルクリックします。

チェックボックス自動挿入マクロをコピペして保存
下記マクロをコピペして保存します。
Sub チェックボックス自動生成()
Dim i As Long
Dim checkboxCol As String
Dim linkCol As String
Dim lineStart As Long
Dim lineEnd As Long
Dim CellW As Long
Dim CellH As Long
checkboxCol = Application.InputBox("チェックボックスを設置する列(例:A)", "半角アルファベット", Type:=2)
linkCol = Application.InputBox("リンク先のセル(例:C)", "半角アルファベット", Type:=2)
lineStart = Application.InputBox("入力を開始する行番号(例:1)", "半角数字", Type:=1)
lineEnd = Application.InputBox("入力を終了する行番号(例:100)", "半角数字", Type:=1)
For i = lineStart To lineEnd
ActiveSheet.Range(checkboxCol & CStr(i)).Select
CellW = ActiveCell.Width
CellH = ActiveCell.Height
ActiveSheet.CheckBoxes.Add(0, 0, CellH, CellH).Select
With Selection
.Caption = ""
.Value = xlOff
.LinkedCell = CStr(linkCol) & i
.Display3DShading = False
.Top = ActiveCell.Top
.Left = ActiveCell.Left + (CellW - CellH) / 2
End With
Next
End Subチェックボックスを設置する列やらなんやらを入力して設定できるようにしています。あと、チェックボックスの位置調整が微妙にめんどいので、セルの中央に来るように計算しています。

チェックボックス自動挿入マクロを実行する
マクロの実行は、「開発」タブの「マクロ」→「チェックボックス自動生成(さっき作ったマクロ名)」→「実行」で実行できます。

ダイアログが出てくるので必要事項を入力するとこんな感じで自動的にチェックボックスが挿入されます。

応用編:色が付いたところだけ挿入するやつ
実用上は、チェックボックスがダーッと並んでいる場合じゃなくて、行が飛び飛びでチェックボックスを挿入したい時があります。
そこで、マクロを改造して「色がついているときはチェックボックスを入れる」というマクロを作りました。
Sub 色が付いた列だけチェックボックスを自動生成()
Dim i As Long
Dim checkboxCol As String
Dim linkCol As String
Dim lineStart As Long
Dim lineEnd As Long
Dim CellW As Long
Dim CellH As Long
checkboxCol = Application.InputBox("チェックボックスを設置する列(例:A)", "半角アルファベット", Type:=2)
linkCol = Application.InputBox("リンク先のセル(例:C)", "半角アルファベット", Type:=2)
lineStart = Application.InputBox("入力を開始する行番号(例:1)", "半角数字", Type:=1)
lineEnd = Application.InputBox("入力を終了する行番号(例:100)", "半角数字", Type:=1)
For i = lineStart To lineEnd
ActiveSheet.Range(checkboxCol & CStr(i)).Select
CellW = ActiveCell.Width
CellH = ActiveCell.Height
If ActiveCell.Interior.Color = 13431551 Then
ActiveSheet.CheckBoxes.Add(0, 0, CellH, CellH).Select
With Selection
.Caption = ""
.Value = xlOff
.LinkedCell = CStr(linkCol) & i
.Display3DShading = False
.Top = ActiveCell.Top
.Left = ActiveCell.Left + (CellW - CellH) / 2
End With
End If
Next
End Sub
Sub 現在のセルの背景色を取得する()
ActiveCell.Value = ActiveCell.Interior.Color
End Sub
22行目「13431551」という番号が、色の番号です。(正確にはちょっと違うけど、細かいことは良いからとにかくゴールに行きたい人は色の番号くらいの認識でも良いかなと思います。)
で、具体的に「どの色がどの番号になるか」が分からないと話にならないので、ついでに「現在選択中のセルの色を調べる」というマクロも追加しています。
背景色を設定したセルを1つ選択して、「現在のセルの背景色を取得する」というマクロを実行すれば、そのセルの中にその色の番号が入力されます。そこに表示された番号を22行目の「13431551」と入れ替えると、自分が思った色の列にだけチェックボックスを追加できます。
・・・という感じです。シート全体を検索する方法とか色々ありますが、これでかなりの省力化ができるのではないでしょうか。別のワークシートと一緒に開いておけば、別のワークシート上でも使えるので1個作っておくと便利です。
仕事の省力化に役立てられたら幸いです。

職場のPCがネットにつながっておらず、こちらのプログラムを印刷→手入力しましたが、まだ走ってくれません・・・家のPCでコピペで試したらできましたので、手入力の間違いであることは確かです。
チェックボックスが2000個にも及ぶシートになってしまいそうなので(その時点でもう少しデザインを練り直すべきなんでしょうが・・・)、何とか頑張ります。
貴重な伝授、ありがとうございます。
Excelで見積書を作る際に手間だな~と思っていた矢先にこの記事にたどり着きました。
大変助かりました。ありがとうございます。