【2025年9月】
人前でExcelを操作しているとき、私はよくセル内の数式をコメント(メモ)で表示します。
ご覧になった方から「今どうやったんですか?」「それ何ですか?」などと、今までに数え切れないほど質問されてきました。これは、自作のアドインです。かなり昔に作りました[*1(下記参照)]。
上図のように、セルの数式をコメントで表示するマクロです。ただ表示するだけなら、意外と簡単なんですけど、関数名だけ文字の色を変えたり、表示する位置を記憶して前回と同じ位置に表示したり、コメント枠の大きさを変更できたりと、本物はけっこう多機能ですw 私の「VBAアドイン活用」セミナーに参加された方には、お土産として差し上げているのですけど、これ、きっとAIで作れますよね。ちなみに、表示しているのは旧コメント機能です。今はメモという名称に変わりました。
セルに入力されている数式を、Excelのメモ機能で表示するVBAのコードを作って
ExcelのVBAで、セルに入力されている数式をそのセルのメモ(コメント)として表示するには、 以下のようなVBAコードを使うことができます。 Sub ShowFormulasInComments() Dim cell As Range For Each cell In ActiveSheet.UsedRange If cell.HasFormula Then cell.ClearComments cell.AddComment Text:="数式: " & cell.Formula End If Next cell End Sub このコードは、アクティブなシートのすべてのセルを調べて、数式が入力されているセルに その数式内容をメモとして表示します。既存のメモは消去されます。必要に応じて、 範囲を変更したり、コメントの内容を調整してください。
ああ、プロンプトが雑すぎました。そういうことじゃ、ないんです。もう一度。
アクティブセルに入力されている数式を、アクティブセルにExcelのメモ機能として追加して、画面上に表示するVBAのコードを作って
Sub ShowActiveCellFormulaInComment() Dim cell As Range Set cell = ActiveCell If cell.HasFormula Then cell.ClearComments cell.AddComment Text:="数式: " & cell.Formula cell.Comment.Visible = True Else MsgBox "アクティブセルに数式は入力されていません。" End If End Sub このコードは、アクティブセルに数式が入力されている場合、その数式をメモ(コメント) として追加し、画面上に表示します。マクロ有効ブックで実行してください。
とりあえず、できましたね。では、本物に近づけていきましょう。
アクティブセルに入力されている数式だけを、アクティブセルにExcelのメモ機能として追加して、画面上に表示するVBAのコードを作って。メモ内の文字サイズを24ポイントにして、メモ枠の大きさを自動調整して。
Sub AddFormulaAsComment() Dim c As Range Set c = ActiveCell Dim f As String f = c.Formula If f <> "" Then ' 既存のコメントを削除 On Error Resume Next c.Comment.Delete On Error GoTo 0 ' 数式をコメントとして追加 c.AddComment Text:=f ' フォントサイズを24ポイントに設定 With c.Comment.Shape.TextFrame.Characters.Font .Size = 24 End With ' コメント枠の大きさを自動調整 c.Comment.Shape.TextFrame.AutoSize = True End If End Sub
おお、なかなかいいじゃないですか。なんか似てきました。表示位置も指定してみましょう。ちなみに、本物と同じ仕様にします。
アクティブセルに入力されている数式だけを、アクティブセルにExcelのメモ機能として追加して、画面上に表示するVBAのコードを作って。メモ内の文字サイズを24ポイントにして、メモ枠の大きさを自動調整して。メモ枠の上位置を、アクティブセルの上位置から30ポイント下に下げて。メモは常に表示されるようにして。
Sub AddFormulaAsNoteAndShow() Dim c As Range Set c = ActiveCell Dim f As String f = c.Formula If f <> "" Then ' 既存のメモ(Note)を削除 On Error Resume Next c.Note.Delete On Error GoTo 0 ' 数式をメモとして追加 c.AddNote Text:=f ' フォントサイズを24ポイントに設定 With c.Note.Shape.TextFrame2.TextRange.Font .Size = 24 End With ' メモ枠の大きさを自動調整 c.Note.Shape.TextFrame2.AutoSize = msoTrue ' メモ枠の位置を調整(上端をセルの上端から30ポイント下へ) With c.Note.Shape .Top = c.Top + 30 .Left = c.Left End With ' メモを常に表示 c.Note.Visible = True End If End Sub
おや、エラーになってしまいました。ひとつ前のコードは正常に動作したのに。原因は明らかです。セル(Rangeオブジェクト)に、AddNoteなんてコマンドはありません。ひとつ前のコードでは、正しくAddComment使ってたのにな。何か、勘違いしたのでしょうか。手で直してもいいですけど、AIに告げて修正してもらいましょう。
提示されたコードを実行したら「c.AddNote Text:=f」の行でエラーになりました。エラーを修正してください。
ご指摘ありがとうございます。VBAでは「AddNote」は存在しません。従来の「メモ」は 「AddComment」で追加します(※「コメント」と表示されますが、従来の「メモ」機能です)。 また、コメントの常時表示・位置調整・フォントサイズ設定も下記のように修正できます。 Sub AddFormulaAsCommentAndShow() Dim c As Range Set c = ActiveCell Dim f As String f = c.Formula If f <> "" Then ' 既存のコメントを削除 On Error Resume Next c.Comment.Delete On Error GoTo 0 ' 数式をコメントとして追加 c.AddComment Text:=f ' フォントサイズを24ポイントに設定 With c.Comment.Shape.TextFrame.Characters.Font .Size = 24 End With ' コメント枠の大きさを自動調整 c.Comment.Shape.TextFrame.AutoSize = True ' コメント枠の位置を調整(セルの上端から30ポイント下へ) With c.Comment.Shape .Top = c.Top + 30 .Left = c.Left End With ' コメントを常に表示 c.Comment.Visible = True End If End Sub
自分の間違いを素直に認めて、ただちに修正してくれるのは好感が持てますね。どこぞの"数式担当"さんとは大違いです。メモ枠の左位置も調整してもらいます。
アクティブセルに入力されている数式だけを、アクティブセルにExcelのメモ機能として追加して、画面上に表示するVBAのコードを作って。メモ内の文字サイズを24ポイントにして、メモ枠の大きさを自動調整して。メモ枠の上位置を、アクティブセルの上位置から30ポイント下に下げて。メモ枠の左位置を、アクティブセルの右位置から12ポイント右に移動して。メモは常に表示されるようにして。
Sub AddFormulaAsCommentAndShow_CustomPosition() Dim c As Range Set c = ActiveCell Dim f As String f = c.Formula If f <> "" Then ' 既存のコメントを削除 On Error Resume Next c.Comment.Delete On Error GoTo 0 ' 数式をコメントとして追加 c.AddComment Text:=f ' フォントサイズを24ポイントに設定 With c.Comment.Shape.TextFrame.Characters.Font .Size = 24 End With ' コメント枠の大きさを自動調整 c.Comment.Shape.TextFrame.AutoSize = True ' コメント枠の位置を調整 With c.Comment.Shape .Top = c.Top + 30 .Left = c.Left + c.Width + 12 End With ' コメントを常に表示 c.Comment.Visible = True End If End Sub
できましたね。本物とそっくりです。普通に使うのでしたら、これで充分なのでは?では最後に、私が悩んだ「数式文字列の中で、関数名だけ青色にする」部分も聞いてみましょう。これ、できたら相当すごいです。でも、たぶんやってくれるでしょう。期待します。現在はSUM関数しか使っていませんので、もしかすると"SUM"という文字列を限定してくるかもなので、IF関数も追加します。
アクティブセルに入力されている数式だけを、アクティブセルにExcelのメモ機能として追加して、画面上に表示するVBAのコードを作って。メモ内の文字サイズを24ポイントにして、メモ枠の大きさを自動調整して。メモ枠の上位置を、アクティブセルの上位置から30ポイント下に下げて。メモ枠の左位置を、アクティブセルの右位置から12ポイント右に移動して。数式の文字列内に含まれる「関数名と認識される」文字だけを青色に設定して。関数は何が使われるか分からないとします。メモは常に表示されるようにして。
Sub AddFormulaAsCommentWithBlueFunctions() Dim c As Range Set c = ActiveCell Dim f As String f = c.Formula If f <> "" Then ' 既存のコメントを削除 On Error Resume Next c.Comment.Delete On Error GoTo 0 ' 数式をコメントとして追加 c.AddComment Text:=f ' フォントサイズを24ポイントに設定 With c.Comment.Shape.TextFrame.Characters.Font .Size = 24 End With ' 関数名を青色に設定 Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") regEx.Global = True regEx.IgnoreCase = False regEx.Pattern = "([A-Z][A-Z0-9_\.]*)\s*\(" Dim matches As Object Set matches = regEx.Execute(f) Dim i As Integer For i = 0 To matches.Count - 1 With c.Comment.Shape.TextFrame.Characters(matches(i).FirstIndex + 1, Len(matches(i).SubMatches(0))) .Font.Color = RGB(0, 112, 192) ' 青色 End With Next i ' コメント枠の大きさを自動調整 c.Comment.Shape.TextFrame.AutoSize = True ' コメント枠の位置を調整 With c.Comment.Shape .Top = c.Top + 30 .Left = c.Left + c.Width + 12 End With ' コメントを常に表示 c.Comment.Visible = True End If End Sub
できた!さすが"VBA担当"さん!正規表現を使いましたか。ちなみに、セルや数式に名前を定義していたり、かなり変わった使い方をしていると、文字色変更が対応出来なくなるかもですけど、そしたら正規表現のパターンを変えればいいですね。ちなみに本物は、人前で失敗すると恥ずかしいのでw もっと多くの方法で関数名だけを抽出しています。
こうした特殊なマクロも、問題なく作成できますね。AIの「VBAコード生成」はすごいです。途中で一回間違えましたけど、そんなのは"ご愛敬"でしょう。指摘したら、すぐに修正してくれましたからね。みなさんも、ぜひこのコードをアドインに仕込んで活用してください。ちなみに、本物はもっと高機能だけどね~( ̄^ ̄)v
余談
(*1)最初に作ったのは、かなり昔です。私が会社員を辞めてライターとして独立し、パソコン雑誌や書籍の執筆をしていた頃、とある出版社さんから「読者にセミナーやって」と依頼されました。懐かしい。まだ30歳代前半の頃でした。場所は新橋です。SL広場の近くだったかな。よく覚えています。朝マックを食べてから行きました。たぶん、初めてのセミナーだったと思います。ネタは「ワークシート関数の活用」的なやつです。たくさんの数式を準備して挑みました。開始後しばらくして「では、この数式を入力してください」みたいに告げると「先生、(文字が小さくて)見えませ~ん」と言われました。部屋はけっこう広く50人くらい集まっていて、そりゃ後ろの席でなくても、数式バーに書かれている文字は見えないですよねw 初めてのセミナーだったので、そこに気づきませんでした。慌てて、とりあえず数式をホワイトボードに手書きし「これを写してください」と対処しました。こりゃヤバいってんで、控え室でお昼のお弁当を食べながら、この"数式をコメントで表示するマクロ"を作り午後の部を乗り切りました。そのときの様子は、なぜか今でも克明に覚えています。それから数十年、長い間使い続け「もっと、こうできたら便利かも」って、いろんな機能を追加しました。今ではすっかり指に馴染んでいて、他の人のExcelを触っているときでも、つい指が勝手に動いたりしちゃいます。いやぁ、時の経つのは早いですね。当時に、今のようなAIがあったら、もっとお弁当をゆっくり食べられたのにw