Excel VBAでシート1行目のメモを選択中の行の辺りに表示したり非表示にしたりする

ソフトウェア
メモの縦位置が変わった

まとめ

Excel VBA で、シート1行目のセル群にくっつけてある各「メモ」を、選択中の行の辺りに表示したい。また同時に、これらメモの表示/非表示を切り替えたい。そのようなコードを書いてみた。

やりたいこと

Excel VBA で、シートの1行目のセル群にくっつけてある各「メモ」を、選択中の行の辺りに表示(移動)したい。またそれと同時に、これらメモの表示/非表示を切り替えたい。

理由

シートの1行目の列名のところに、列ごとの説明メモをつけることが多いのだが、下の行にスクロールすると、それら1行目のメモが見えなくなってしまう。このメモを、どの行にスクロールしていようとも瞬時に見られるようにしたい。また、これらメモを読み終わったら邪魔なので非表示にしたい。

環境

Microsoft Excel for Microsoft 365 MSO (バージョン 2502 ビルド 16.0.18526.20168) 64 ビット

やったこと

VBEで、対象シートのモジュールの中に、以下のコードを書いてみた。

Option Explicit

'1行目のセルにセットされているコメントの表示/非表示を切り替える。
'また、表示する際には選択中のセルの1行下のところに表示されるようにする。
Sub OnOffandMoveCommentsToSelectedRow()

'各種宣言
'32,767行目以降も使うかもしれないので、数値の変数はDoubleで宣言。
Dim cmt As Comment
Dim rng As Range
Dim topPosition As Double
Dim RowCount As Double

'選択中のセルの行数を取得
RowCount = Selection.Cells(1, 1).Row

'上記の1行下の上端の位置を取得
topPosition = Rows(RowCount).Offset(1, 0).Top

'1行目の各セルをループ
For Each rng In Rows(1).Cells

 ' セルにコメントがあるか確認
 On Error Resume Next
 Set cmt = rng.Comment
 On Error GoTo 0

 'コメントが存在する場合、位置を調整。
If Not cmt Is Nothing Then
 cmt.Shape.Top = topPosition

 'コメントの表示/非表示を切り替える。
 If cmt.Visible Then
  cmt.Visible = False
 Else
  cmt.Visible = True
 End If

End If

Next rng

End Sub

結果

選択している行の1行下に、1行目にあるコメントを表示することができた。

メモの縦位置が変わった

注意

  • 各メモの横の位置は手動で調整する必要がある。
  • メモの表示/非表示の切り替えは、列ごとに異なる。よって、もともとメモが表示されている列ではメモは非表示になるし、もともと非表示なら表示されるようになる。
タイトルとURLをコピーしました