まとめ
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行目にあるコメントを表示することができた。
注意
- 各メモの横の位置は手動で調整する必要がある。
- メモの表示/非表示の切り替えは、列ごとに異なる。よって、もともとメモが表示されている列ではメモは非表示になるし、もともと非表示なら表示されるようになる。