LoginSignup
0

More than 5 years have passed since last update.

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

Posted at

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では該当する箇所がぱっと見つかりませんでしたが)。

ワークシートのコメントの書式設定 - Excel

コメントのためだけに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を設定できれば良いのですが、エラーとなってしまいます。

[Excel]セルのフォントをテーマのフォントに戻す - Qiita

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0