Excel方眼紙を作成するマクロ

何かと問題視されているExcel方眼紙ですが、
使いどころによっては重宝するかもしれません。

:::note info
設計書とかではなく、別のゲーム的なものの作成(数独、迷路等)とかでは使えるのではないかと思います。
:::

:::note info
現場によってはExcel方眼紙をデフォルトのフォーマットとしているところがあるかもしれません。
:::

今回、そんなExcel方眼紙を作成するマクロを作成しましたので、紹介します。

# 環境
OS：Windows11 Pro(64Bit)、Windows10 Pro(64Bit)
Excel：Microsoft365のExcel(バージョン2209、64Bit)

:::note info
基本的には古すぎるExcelでない限りは別のバージョンであっても正常に動作するかと思います。
:::

# マクロ

```vb:Excel方眼紙作成マクロ
'Excel方眼紙作成マクロ
Sub MakeExcelGraphPaper()
    
    Dim line_thickness As Variant
    
inputvalue:
    line_thickness = InputBox("Excel方眼紙を作成します。" & vbCrLf & "幅を入力してください。" & vbCrLf & "幅の範囲：0 < 幅 ≦ 67.68", "幅入力", 3)
    
    'エラー処理
    If line_thickness = "" Then
        Exit Sub
    End If
    Dim button_value As Long
    If IsNumeric(line_thickness) = False Then
        button_value = MsgBox("数字以外が入力されています！！", vbRetryCancel + vbCritical, "入力エラー")
        If button_value = vbCancel Then
            Exit Sub
        Else
         GoTo inputvalue:
        End If
    Else
        If line_thickness < 0 Or line_thickness > 67.68 Then
            button_value = MsgBox("範囲外の数字が入力されています！！", vbRetryCancel + vbCritical, "入力エラー")
            If button_value = vbCancel Then
                Exit Sub
            Else
             GoTo inputvalue:
            End If
        End If
    End If
    
    '初期状態に戻す
    If line_thickness = 0 Then
        Columns("A:XFD").ColumnWidth = 8.38
        Rows("1:1048576").RowHeight = 18.75
        Exit Sub
    Else
        '方眼紙作成
        Columns("A:XFD").ColumnWidth = line_thickness
        Rows("1:1048576").RowHeight = Columns("I").Width
    End If
    
End Sub
```

このマクロは実行すると方眼紙の幅の入力画面が表示されるので、数字を入力します。
デフォルトでは3が入力された状態となっています。
数字は小数もOKです。
**なお、調べたところ、幅の最大値は67.68付近でしたので、入力値は0≦幅≦67.68で制限をかけています。**
元に戻せなくなってしまうと面倒ですので、
**0を入力したときのみ、方眼紙ではなく、初期状態(Excelを起動した状態)に戻します。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/e3953a25-8a9b-320f-c2e5-6c8bf5925731.png)

数字以外の文字が入力された場合はエラーメッセージが表示されます。
再試行を押した場合は再度幅入力画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/1072fe1e-e863-3b88-00f2-5ced9b515696.png)

また、範囲外の数字を入力した際にも同様のエラーメッセージを表示します。
挙動は数字以外の文字の時と同じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/605df48e-0cee-1efb-18f6-e8e4cd73c620.png)


すると、指定した幅のExcel方眼紙が作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/d5d96ebb-9a3c-ccce-1d2e-6459597cdadd.png)

方眼紙の作成のコードですが、
一旦列の幅のみ設定をして置き、
列の幅を参照し、同じ幅を行に設定することで方眼紙を実現しています。

今回、このマクロですが、**個人用マクロブック**に適用することにより、
マクロが無効になっていても実行できるようにしています。

個人用マクロブックについてはこちらの記事に詳しく書かれていますので、参照ください。
* [個人用マクロブックのすすめ～入門編～](https://qiita.com/iguru/items/a27be8ffb8ae55cf7785)

マクロに対してショートカットキーを割り当てることができるため、
ショートカットキーでマクロを呼び出せるようにしています。

ショートカットキー割り当てについてはこちらの記事を参考にさせていただきました。
* [Excel業務効率化マクロコレクション](https://qiita.com/wdnuki/items/48ec6bf82c435127d710)

ショートカットキー割り当ての部分のマクロになります。
私はほかにもショートカットキーを割り当てているものがある兼ね合いで、
**Crtl + Alt + Shift + X**をショートカットキーに割り当てていますが、
自分の使いやすいショートカットキーに変更してください。

```vb:ショートカットキー割り当て
Sub ShortcutKey()
    '「Crtl + Alt + Shift + X」を「MakeExcelGraphPaper」に割り当てる
    '「Crtl + Alt + Shift + X」は"^%+X"と書く
    Application.OnKey "^%+X", "MakeExcelGraphPaper"
End Sub
```

なお、ショートカットキーをマクロに書く際の文字列の書き方ですが、
特殊文字については下記記事に詳しく書かれています。
* [第128回.マクロをショートカットで起動（OnKeyメソッド）](https://excel-ubara.com/excelvba1/EXCELVBA428.html)

なお、上記記事に書かれていない文字についてはそのまま記載すればOKです。
※英字の場合、大文字・小文字の区別はありません。
例：Ctrl+H → "^H"

:::note warn
元々割り当てられているショートカットキーが存在する場合は上書きされてしまうため、
上書きされたくない場合はショートカットキーの設定には注意してください。
:::

[参考にした記事](https://qiita.com/wdnuki/items/48ec6bf82c435127d710)にもあります通り、ショートカットキーは一度Excelを閉じると忘れてしまうため、
Excel起動の度にマクロを呼び出してあげる必要があります。
下記マクロをThisWorkbookに貼り付けることで起動時にショートカットキーの割り当てが行われます。

```vb:Excel起動時に割り当て
Private Sub Workbook_Open()
    ShortcutKey  
End Sub
```

# まとめ
いかがだったでしょうか。
今回はExcel方眼紙を作成するマクロの実装を行いましたが、
個人用マクロブックのマクロにショートカットキーを割り当てることで
ほかにもさまざまな機能を実装することができます。
マクロにつき、自分でカスタマイズし放題ですので、
自分でマクロが書ける方は色々と実装してみてはいかがでしょうか。