【VB.NET】ClosedXML:コメント

MEMO
  • この記事は GitHub - ClosedXML - Wiki を参考に書かせていただいたものですが、C# から VB.NET への書き換えをし、英語から日本語へ翻訳しただけでなく、元記事の構成・コード・コメント等を変更している場合もありますのでご了承ください。
  • 現在 ClosedXML のメンテナンスをご担当されている Francois Botha 様からの掲載許可もいただいてます。
  • この記事のコードサンプルについては、Imports ClosedXML.Excel が宣言されていることを前提としています。
  • ClosedXML の作成者について:Francois Botha, Aleksei Pankratev, Manuel de Leon, Amir Ghezelbash
  • ClosedXML のライセンスについて:GitHub - ClosedXML - MIT License
コメントとメモの名称について

 

 

この記事の執筆時点で私(エレン・イースト)が使用している Excel は Office 365 Solo の一部であり、バージョンは 1906 です。

 

この記事で解説している「コメント」は Excel VBA での Comment または Comments に相当するものであり、これまで多くのユーザーが慣れ親しんできた見た目が黄色い矩形のコメントのことですが、Excel 1906(2019年6月)の UI では名称が変わってしまい、「メモ」と呼ぶようになったようです。

そして、Excel 1906 の UI で「コメント」と呼んでいるのは Excel VBA での CommentThreaded または CommentsThreaded に相当するものであり、多くのユーザーが慣れ親しんできた見た目とも異なるものです。

 

 

 

 

ただし「メモ」の書式設定ダイアログには相変わらず「コメント」と表示されていたりします。ややこしいですね!!

↑「メモ」と呼ぶようになったはずのオブジェクトの枠線上で右クリックすると、
↓「コメント」の書式設定が表示される。

 

この記事の中ではとりあえず従来通り、黄色の矩形の Comment / Comments のことを「コメント」と呼ぶことにします。

コメントの表示状態

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("コメントの表示状態")

'デフォルトではコメントは非表示です
ws.Cell("A1").SetValue("非表示コメントあり").Comment.AddText("非表示")

'コメントを表示した状態で追加します
ws.Cell("A2").Comment.SetVisible.AddText("表示")

'上記コメントの ZOrder はそれぞれ 1 と 2 です
'ここでは ZOrder を明示的に指定します
ws.Cell("A3").Comment.SetZOrder(5).SetVisible().AddText("最前面")

'A3 のコメントの下にコメントを追加するには
'A3 のコメントの ZOrder よりも小さな値を指定します
ws.Cell("A4").Comment.SetZOrder(4).SetVisible().AddText("背面")
ws.Cell("A4").Comment.Style.Alignment.SetVertical(XLDrawingVerticalAlignment.Bottom)

'下記のようにしてすべてのコメントを表示させることができます
'ws.CellsUsed(True, Function(c) c.HasComment).ToList.ForEach(Sub(c) c.Comment.SetVisible)

'コンテンツに合わせて列幅を調整
'(日本語のコンテンツに対して AdjustToContents を使う場合、日本語フォントを設定しておかないと正しく動作しない)
ws.Style.Font.FontName = "游ゴシック";
ws.Columns.AdjustToContents

wb.SaveAs("D:\test\CommentsVisibility.xlsx")

コメントの位置

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("コメントの位置")

ws.Columns.Width = 10

ws.Cell("A1").Comment.AddText("コメントを付けるには変な位置ですが…")
With ws.Cell("A1").Comment.Position
  .SetColumn(3) '3列目から開始
  .SetColumnOffset(5) '3列目の中央から開始
  .SetRow(5) '5行目から開始
  .SetRowOffset(7.5) '5行目の中央から開始
End With

'すべてのコメントを表示
ws.CellsUsed(True, Function(c) c.HasComment).ToList.ForEach(Sub(c) c.Comment.SetVisible)

wb.SaveAs("D:\test\CommentsPosition.xlsx")

コメントの作成者

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("Signatures")

'デフォルトではコメントの作成者(Signature)は Office のユーザー名になります
'ws.Cell("A2").Comment.AddSignature.AddText("Hello World!")

'コメントの Author を指定してデフォルト値を上書きできます
ws.Cell("A2").Comment _
  .SetAuthor("エレン・イースト") _
  .AddSignature _
  .AddText("Hello World!")

'すべてのコメントを表示
ws.CellsUsed(True, Function(c) c.HasComment).ToList.ForEach(Sub(c) c.Comment.SetVisible)

wb.SaveAs("D:\test\CommentsSignatures.xlsx")

コメントの配置(アラインメント)

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("コメントの配置")

'コンテンツにフィットするように自動的にコメントのサイズを調整
ws.Cell("A1").Comment.Style.Alignment.SetAutomaticSize
ws.Cell("A1").Comment.AddText("なんだか窮屈だね")

'デフォルト値
ws.Cell("A3").Comment _
  .AddText("デフォルトの配置:").AddNewLine _
  .AddText("縦位置 = 上詰め").AddNewLine _
  .AddText("横位置 = 左詰め").AddNewLine _
  .AddText("方向 = 左から右")

'配置を変えてみる
ws.Cell("A8").Comment _
  .AddText("縦位置 = 下詰め").AddNewLine _
  .AddText("横位置 = 右詰め")
ws.Cell("A8").Comment.Style _
  .Alignment.SetVertical(XLDrawingVerticalAlignment.Bottom) _
  .Alignment.SetHorizontal(XLDrawingHorizontalAlignment.Right)

'方向を変えてみる
ws.Cell("D3").Comment.AddText("方向 = 下から上")
ws.Cell("D3").Comment.Style _
  .Alignment.SetOrientation(XLDrawingTextOrientation.BottomToTop) _
  .Alignment.SetAutomaticSize

ws.Cell("E3").Comment.AddText("方向 = 上から下")
ws.Cell("E3").Comment.Style _
  .Alignment.SetOrientation(XLDrawingTextOrientation.TopToBottom) _
  .Alignment.SetAutomaticSize

ws.Cell("F3").Comment.AddText("方向 = 縦書き")
ws.Cell("F3").Comment.Style _
  .Alignment.SetOrientation(XLDrawingTextOrientation.Vertical) _
  .Alignment.SetAutomaticSize

'すべてのコメントを表示
ws.CellsUsed(True, Function(c) c.HasComment).ToList.ForEach(Sub(c) c.Comment.SetVisible)

wb.SaveAs("D:\test\CommentsAlignment.xlsx")

色と線

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("コメントの色と線")

ws.Cell("A2").Comment _
  .AddText("カラフルな") _
  .AddText("コメント").SetBold().SetFontColor(XLColor.Red) _
  .AddText("になりました!")

With ws.Cell("A2").Comment.Style
  .ColorsAndLines.SetFillColor(XLColor.RichCarmine) '塗りつぶしの色
  .ColorsAndLines.SetFillTransparency(0.25) '塗りつぶしの不透明度 25%(透明度75%)
  .ColorsAndLines.SetLineColor(XLColor.Blue) '線の色
  .ColorsAndLines.SetLineTransparency(0.75) '線の不透明度 75%(透明度25%)
  .ColorsAndLines.SetLineDash(XLDashStyle.LongDash) '線のスタイル
  .ColorsAndLines.SetLineStyle(XLLineStyle.ThickBetweenThin) '実線/点線
  .ColorsAndLines.SetLineWeight(7.5) '線の太さ
End With

'すべてのコメントを表示
ws.CellsUsed(True, Function(c) c.HasComment).ToList.ForEach(Sub(c) c.Comment.SetVisible)

wb.SaveAs("D:\test\CommentsColorsAndLines.xlsx")

コメントのサイズ

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("コメントのサイズ")

'comment.Style.Size.Automatic(SetAutomaticSize) は
'comment.Style.Alignment.AutomaticSize と同じものです。
'Excel の UI ではコメントサイズの自動調整オプションは
'[配置]タブにありますが(.Alignment.AutomaticSize)
'[サイズ]タブの下にあるほうが自然なので
'.Size.AutomaticSize プロパティを用意しました。
ws.Cell("A2").Comment.AddText("なんか窮屈だよね")
ws.Cell("A2").Comment.Style.Size.SetAutomaticSize

ws.Cell("A4").Comment.AddText("サイズを変えてみます")
With ws.Cell("A4").Comment.Style
    '単位は(行の高さの単位と同じく)ポイント
    .Size.SetHeight(30) 
    '単位は(列の幅の単位と同じく)"0" を表示できる数
    '(たとえば 3 を指定した場合は "000" と同じ幅)
    .Size.SetWidth(30)  
End With
'なお、日本語版Excelの[コメントの書式設定]ダイアログの
'[サイズ]タブでは、デフォルトの単位が cm になっていると思います。

'すべてのコメントを表示
ws.CellsUsed(True, Function(c) c.HasComment).ToList.ForEach(Sub(c) c.Comment.SetVisible)

wb.SaveAs("D:\test\CommentsSize.xlsx")

コメントの保護

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("コメントの保護")

With ws.Cell("A1").Comment
    .SetVisible.AddText("(*^▽^*)")
    With .Style
        .Protection.SetLocked(False) 'ロックの解除
        .Protection.SetLockText(False) '文字列のロックの解除
    End With
End With

wb.SaveAs("D:\test\CommentsProtection.xlsx")

コメントのプロパティ

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("コメントのプロパティ")

'セルに合わせて移動やサイズ変更をする
ws.Cell("A1").Comment.Style.Properties.Positioning = XLDrawingAnchor.MoveAndSizeWithCells
'セルに合わせて移動するがサイズ変更はしない
ws.Cell("A2").Comment.Style.Properties.Positioning = XLDrawingAnchor.MoveWithCells
'セルに合わせて移動やサイズ変更をしない
ws.Cell("A3").Comment.Style.Properties.Positioning = XLDrawingAnchor.Absolute

wb.SaveAs("D:\test\CommentsProperties.xlsx")

コメントの余白

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("コメントの余白")

ws.Cell("A2").Comment _
  .SetVisible _
  .AddText("むかし、むかし、ある所におじいさんとおばあさんが住んでいました。").AddNewLine _
  .AddText("おじいさんは山へしば刈りに、おばあさんは川へ洗濯に行きました。").AddNewLine _
  .AddText("おばあさんが川で洗濯をしていると大きな桃が流れてきました。")

ws.Cell("A2").Comment.Style _
  .Margins.SetAll(0.25) _
  .Size.SetAutomaticSize

wb.SaveAs("D:\test\CommentsMargins.xlsx")

コメントの代替テキスト

Dim wb = New XLWorkbook
Dim ws = wb.Worksheets.Add("コメントの代替テキスト")

ws.Cell("A1").Comment.Style.Web.AlternateText = "必要な場合は代替テキストを設定する"

wb.SaveAs("D:\test\CommentsAlternativeText.xlsx")

 

「【VB.NET】ClosedXML の使い方」の一覧を表示

購読する
通知を受け取る対象
guest
0 Comments
Inline Feedbacks
View all comments