【エクセル】チェックボックスのリンクするセルを自動で指定【excel】

Excelでアンケートを作るときに、開発タブを表示して、「挿入→フォームコントロール→チェックボックス」でチェックボックスを追加できるんですが、チェックボックスを100個とか作るときに、手動だと大変だし、コピペすると「リンクするセル」が全部同じになってしまって、使い物にならないのでチェックボックスとそのリンクするセルを自動で挿入するマクロを作りました。

「開発」タブの表示方法

あんまりこの記事とは関係ないのですが、「開発」タブがエクセルのウインドウの上に表示されてない時は、オプションで表示させます。

ます、「(ウインドウ左上)ファイル→(ウインドウ左下)オプション」でオプションウインドウを標示します。(わかりにくい場合は「エクセル 開発 タブ 表示」などで調べると色々出てきます。)

エクセルのオプション

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

開発タブ

マクロを追加する準備

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

VB起動

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個作っておくと便利です。

仕事の省力化に役立てられたら幸いです。

 

 

 

質問・コメントなどあると嬉しいです