ExcelのコメントのフォントにVBAから本文のフォントを設定する方法です。
「本文のフォント」を設定することで、コメントのフォントもセルや図形などのフォントと同じになり、見た目が統一されます。
かなり強引な方法のため、もっと良い方法があれば教えていただけるとうれしいです。
コード
任意のワークシートを引数に渡すと、そのワークシート内のすべてのコメントのフォントを「本文のフォント」に設定します。
やや挙動が怪しいことがありますので、確認の際はあらかじめファイルを保存してから行ってください。
'ワークシート内の全てのコメントのフォントを「本文のフォント」に変更する
'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
を取得できない(空文字列になる)ので、その場合は注意が必要です。
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では該当する箇所がぱっと見つかりませんでしたが)。
コメントのためだけにWindowsの設定を変更するのも大仰ですし、テーマのフォントは性質上設定出来ないと思われます(未確認)。
そのため、既存のコメントの書式を変更するアプローチで考えてみます。
手動操作の場合
コメントを選択して、リボンのなどから「本文のフォント」を設定すると、テーマの変更に追従する状態のフォントを設定できます。
つまり、「本文のフォント」としての設定が可能だとわかります。
ただし、コメントは複数選択できないため、ひとつひとつ操作をしていく必要があります。
COMでコメントのフォントを設定出来る場所
コメントは、COMの型ではExcel.Comment
となります。
これから下の階層を辿ると、以下の場所からExcel.Font
オブジェクトを参照出来そうです。
'全て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
を設定できれば良いのですが、エラーとなってしまいます。
通常の図形でも同じ動作のため、Font.ThemeFont
はセルにのみ使えるのでしょう。
ここまでの内容を踏まえ、手動操作なら「本文のフォント」を設定出来るが、COM側の操作だと難しいと判断し、SendKeysを使用する事にしました。