Excelのコメントに「本文のフォント」をまとめて設定する（むりやり）

ExcelのコメントのフォントにVBAから本文のフォントを設定する方法です。
「本文のフォント」を設定することで、コメントのフォントもセルや図形などのフォントと同じになり、見た目が統一されます。

かなり強引な方法のため、もっと良い方法があれば教えていただけるとうれしいです。

# コード

任意のワークシートを引数に渡すと、そのワークシート内のすべてのコメントのフォントを「本文のフォント」に設定します。

やや挙動が怪しいことがありますので、確認の際はあらかじめファイルを保存してから行ってください。

```vb
'ワークシート内の全てのコメントのフォントを「本文のフォント」に変更する
'COM操作では難しそうなため、SendKeysを使用して強引に変更する
Public Sub ChangeAllCommentFontToThemeMinorFont(ws As Excel.Worksheet)
    'VBAのSendKeysのバグ対策のため
    Dim wsShell As Object
    Set wsShell = VBA.CreateObject("WScript.Shell")
    
    'SendKeysで操作するため、対象のシートを最前面にする
    Dim wb As Excel.Workbook
    Set wb = ws.Parent
    
    wb.Windows.Item(1).Activate
    ws.Activate
    VBA.AppActivate wb.Windows.Item(1).Caption
    
    Dim i As Long
    For i = 1 To 2 '数は要調整
        Call VBA.DoEvents
    Next i
    
    
    Dim cmt As Excel.Comment
    For Each cmt In ws.Comments
        'コメントを選択する必要があるため、一旦表示する
        Dim visCmt As Boolean
        visCmt = cmt.Visible
        cmt.Visible = True
        cmt.Shape.Select
        
        '本文のフォントに変更するキー操作
        wsShell.SendKeys "%HFF{DOWN}{PGUP 20}{DOWN 1}{ENTER}", True
        Call VBA.DoEvents
        '%HFF:ホームタブ→フォントにフォーカス
        '{DOWN}{PGUP 20}:プルダウンを開いて一番上（見出しのフォント）まで移動（PGUPの数は要調整）
        '{DOWN}{ENTER}:2番目（本文のフォント）に移動して確定
        
        cmt.Visible = visCmt
    Next cmt
End Sub
```

## 妥協案

テーマのフォントに追従はしませんが、単発ならこちらの方が安定しているはずです。
テーマによっては`themeMinorFontEaName`を取得できない（空文字列になる）ので、その場合は注意が必要です。

```vb
Public Sub ChangeAllCommentFontToThemeMinorFont2(ws As Excel.Worksheet)
    Dim wb As Excel.Workbook
    Set wb = ws.Parent
    
    '本文のフォント - 日本語
    Dim themeMinorFontEaName As String
    themeMinorFontEaName = wb.Theme.ThemeFontScheme.MinorFont.Item(msoThemeEastAsian).Name
    
    Dim cmt As Excel.Comment
    For Each cmt In ws.Comments
        cmt.Shape.TextFrame.Characters().Font.Name = themeMinorFontEaName
    Next cmt
End Sub
```


# 強引な方法を選択した経緯

## コメントのデフォルトのフォントはExcelなどの設定に依存しない

コメントを新規に挿入したときのフォントは、ブックのテーマのフォントやその他Excelの設定には依存していません。
例えば、私の環境では`MS P ゴシック`がデフォルトになっています。


以下のページを見ると、Windowsの設定を参照して決まっているようです（Windows 10では該当する箇所がぱっと見つかりませんでしたが）。

> [ワークシートのコメントの書式設定 - Excel](https://support.office.com/ja-jp/article/%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E6%9B%B8%E5%BC%8F%E8%A8%AD%E5%AE%9A-eb1b7d0a-6fe0-4a0c-b1e6-f1d68e6edda1 "ワークシートのコメントの書式設定 - Excel")

コメントのためだけにWindowsの設定を変更するのも大仰ですし、テーマのフォントは性質上設定出来ないと思われます（未確認）。

そのため、既存のコメントの書式を変更するアプローチで考えてみます。

## 手動操作の場合

コメントを選択して、リボンのなどから「本文のフォント」を設定すると、テーマの変更に追従する状態のフォントを設定できます。
つまり、「本文のフォント」としての設定が可能だとわかります。

ただし、コメントは複数選択できないため、ひとつひとつ操作をしていく必要があります。

## COMでコメントのフォントを設定出来る場所

コメントは、COMの型では`Excel.Comment`となります。
これから下の階層を辿ると、以下の場所から`Excel.Font`オブジェクトを参照出来そうです。

```vb
'全てExcelのタイプライブラリ内で定義されているオブジェクト
'Comment->Shppe->TextFrame->Characters->Font
Comment.Shape.TextFrame.Characters().Font

'Comment->Shppe->OLEFormat->TextBox->Font
Comment.Shape.OLEFormat.Object.Font


'以下は不可（TextFrame2が取得できない）
'Comment->Shppe->TextFrame2->Office.TextRange2->Office.Font2
Comment.Shape.TextFrame2.TextRange.Font
```

## `Font.ThemeFont`は設定不可

`Excel.Font`オブジェクトということで、以下の記事のように`ThemeFont`を設定できれば良いのですが、エラーとなってしまいます。

> [[Excel]セルのフォントをテーマのフォントに戻す - Qiita](https://qiita.com/nukie_53/items/c3a873f2a64300468eb1 "[Excel]セルのフォントをテーマのフォントに戻す - Qiita")

通常の図形でも同じ動作のため、`Font.ThemeFont`はセルにのみ使えるのでしょう。


ここまでの内容を踏まえ、手動操作なら「本文のフォント」を設定出来るが、COM側の操作だと難しいと判断し、SendKeysを使用する事にしました。