はじめに
Excelのセル内で改行(Alt + Enter
)を使って長い数式や文章を入力すると、数式バーには最初の1行しか表示されず、全体を確認するために毎回手動でバーの高さを広げなければならず、不便ですよね。
VBAのシートイベントを使えば、「セルを選択した瞬間に、そのセルの内容が全て表示されるように、数式バーの高さを自動で調整する」という、非常に便利な機能を実装できます。
この記事では、ユーザーがセルを選択するたびに、そのセルの改行数を数えて、数式バーの高さを最適化するマクロの作り方を解説します。
数式バーの高さを自動調整するVBAサンプルコード
このコードは、シートモジュールに記述します。特定のワークシート(例: Sheet1
)のタブを右クリックし、「コードの表示」を選択して表示されるコードウィンドウに貼り付けてください。標準モジュールではない点に注意してください。
シートモジュールの完成コード
' シート上で選択範囲が変更されたときに実行されるイベント
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' 複数のセルが選択された場合は、先頭のセルを対象とする
Dim activePrimaryCell As Range
Set activePrimaryCell = Target.Cells(1, 1)
'--- 選択セルの内容に含まれる改行(vbLf)の数を数える ---
Dim lineCount As Long
' Split関数で、vbLf(改行コード)を区切り文字として文字列を配列に分割
' UBoundでその配列の最大インデックスを取得すれば、改行の数がわかる
lineCount = UBound(Split(activePrimaryCell.Formula, vbLf)) + 1
'--- 数式バーの高さ(行数)を設定 ---
' Application.FormulaBarHeightプロパティで高さを変更
Application.FormulaBarHeight = lineCount
End Sub
コードの解説
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
これは特別な名前のイベントプロシージャで、このコードが書かれているワークシート上で、ユーザーがセルを選択し直すたびに自動的に実行されます。
Target As Range
: 新しく選択されたセル(範囲)そのものを表します。
lineCount = UBound(Split(activePrimaryCell.Formula, vbLf)) + 1
この一行が、セル内の行数を数える核心部分です。
activePrimaryCell.Formula
: 選択されたセルの内容を、数式も含めて文字列として取得します。Split(..., vbLf)
:Split
関数を使い、文字列をvbLf
(VBAにおける改行コード)を区切り文字として、配列に分割します。例えば、3行のテキストは、2つの改行で区切られているため、3つの要素を持つ配列になります。UBound(...)
: 分割してできた配列の、最大のインデックス番号を取得します。3つの要素を持つ配列(インデックス 0, 1, 2)の場合、UBound
は2
を返します。+ 1
: インデックス番号は0から始まるため、実際の行数はUBound
の結果に1
を足した値になります。
Application.FormulaBarHeight = lineCount
Application.FormulaBarHeight
プロパティは、数式バーの表示行数を設定するためのものです。このプロパティに、先ほど計算した lineCount
を代入することで、数式バーの高さが選択セルの行数と一致するように調整されます。
まとめ
今回は、Worksheet_SelectionChange
イベントを利用して、選択したセルの内容に応じて数式バーの高さをリアルタイムに自動調整する方法を解説しました。
Worksheet_SelectionChange
イベントで、セル選択の操作を検知する。Split
関数とvbLf
を使って、セル内の改行数を数える。Application.FormulaBarHeight
プロパティに、計算した行数を設定する。
このマクロを一度設定しておくだけで、複数行にわたる長い数式や文章の視認性が劇的に向上し、日々のExcel作業がより快適になります。ぜひ、ご自身のよく使うシートに実装してみてください。