[ExcelVBA]吹き出しをダブルクリックで自動作成

# はじめに
　2023年の4月から新しい現場に移り、テストを担当することになりました。本格的にテストを担当するのはこれが初めて。しかし初日からかなり膨大な量のテスト項目が用意されていて、参画初週から残業三昧になってしまいました。
　ただ泣き言だけを言っていても何も解決しないので、時間がかかっている作業の効率化を行っていきたいと思います。
# 改善点の特定
　業務を行いながらどこで時間がかかっているかをメモしてみると、エビデンスの作成に時間がかかっていることが判明。そしてその中でも一番時間がかかっているのが、吹き出し付けの作業であることがわかりました。
# 作業の問題点と改善案
　吹き出し付けの作業と言ってもピンとこないと思うので、簡単に作業内容を説明しておきたいと思います。
　まず前提として作業ツールはExcelです。Excelにシートにテストした画面のキャプチャを貼り付け、テストするボタンや表示されているテキストなどの該当箇所がどこかということをわかりやすくするために吹き出しをつける作業です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604139/d229e7c9-18a0-2813-0160-d14147ce3053.png)
　まず吹き出しをつくって該当箇所に配置、その後吹き出しの中の番号を変更するという単純で簡単な作業ではあるのですが、1画面に対し吹き出しを訳60~100個程度つける上に、吹き出しの中のテキストを変更するたびにマウス操作からキーボード操作へ切り替えが発生する。一日この作業を何度もやってると吹き出しのテキストを間違えたりもするので、吹き出しを作成した数以上にマウスとキーボードを行ったり来たりして、ちりも積もれば何とやらで、かなり時間がかかっている印象でした。
　そこで今回は簡単なマウス操作だけで以下の作業が完結するようにVBAを組んでいきたいと思います。
- 吹き出しの作成
- 吹き出し内のテキスト編集
# VBAコード
今回作成したコードは以下の通りです。ポイントとしては標準モジュールに記述するのではなく、吹き出しをつけたいシート自体にコードを記述することです。（標準モジュールに書いてしまうとうまく動作しません）
```vb:Sheet1(ふきだし)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim StartX As Single
    Dim StartY As Single
    Dim EndX As Single
    Dim EndY As Single
    Dim TextNo As Long
    Dim Mode As String
    Dim ws As Worksheet

    '設定シートの設定
    Set ws = ThisWorkbook.Sheets("設定")
    Mode = ws.Cells(1, 2).Value

    If Mode = "on" Or Mode = "ON" Then
        '設定シートからふきだしNoを取得
        TextNo = ws.Cells(2, 2).Value
        With Target
            'Targetの左端
            StartX = .Left
            'Targetの上端
            StartY = .Top
            'Targetの横幅
            EndX = 55
            'Targetの高さ
            EndY = 25
        
            'ふきだし挿入
            With ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, StartX, StartY, EndX, EndY)
                '枠線非表示
                .Line.Visible = msoFalse
                 '吹き出しの矢先の位置設定
                .Adjustments.Item(1) = -0.44469
                .Adjustments.Item(2) = 0.925
                
                '吹き出しのテキストの挿入
                With .TextFrame.Characters
                    .Text = "No" & TextNo
                    'フォントサイズ変更
                    .Font.Size = 18
                End With
            End With
        Cancel = True
        End With
        '設定シートのふきだしNoのカウントアップ
        ws.Cells(2, 2) = TextNo + 1
    End If

End Sub
```
# 今回の仕様
　まず今回仕様を大まかに説明します。ふきだしシートのセルをダブルクリックすると吹き出しが自動で作成され、テキストも自動で入力される形となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604139/368c92a5-03b2-c6fc-dd36-dbce529e9e45.png)


　ただこれだとセルに文字を入力する際に不便になってしまうため、設定シートをつくり、ふきだし自動作成モードのonとoffで切り替えられるようにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604139/19ac5255-fffe-c63b-d2fc-56fd14898ba4.png)

　また吹き出しに入力される番号についても設定シート側で管理されるしようとなっており、ふきだしNoの番号が吹き出し内に記入され、自動的にカウントアップされます。そのため、もし間違えて吹き出しを消してしまったなんて場合でもふきだしNoの番号を変えることで簡単に作り直せるつくりにしてあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604139/7f614d5a-a1cf-cbb7-380c-eca7dd102c8d.png)

# まとめ
　今回の作成したコードによって吹き出しをつくり、吹き出し内のテキストも編集するといった動作をマウス操作だけで完結することができるようになりました。反省点としては吹き出し内のテキスト番号を戻す際に、設定シートの入力作業が発生するところがいけてないですね…（この記事を書いているときに気づきました。）そのため、この後番号をボタンで調節できる機能を実装していこうと思います。
# 参考文献
- [やさしいExcelVBA - Excel VBA 図形(オートシェイプ)一覧と作成、追加する方法](https://officedic.com/excel-vba-make-autoshape/ "https://officedic.com/excel-vba-make-autoshape/")
- [kirinote.com - 【エクセルマクロ】ダブルクリックで図形挿入：動画あり
](https://kirinote.com/excelvba-doubleclick-shapeadd/ "https://kirinote.com/excelvba-doubleclick-shapeadd/")
- [インストラクターのネタ帳 - 図形・オートシェイプの枠線を非表示にするExcelマクロ](https://www.relief.jp/docs/excel-vba-hide-borders-shapes.html "https://www.relief.jp/docs/excel-vba-hide-borders-shapes.html")
- [インストラクターのネタ帳 - VBAで図形にテキスト・文字列を入力する－TextFrame.Characters](https://www.relief.jp/docs/excel-vba-insert-text-to-shape.html "https://www.relief.jp/docs/excel-vba-insert-text-to-shape.html")