Excel VBA Justifyメソッド 文字を下の行に割り当てる
今回はVBAで文字を幅いっぱいに割り当てられるJustifyメソッドを紹介します!
VBAの Justify メソッドとは
セル幅をはみ出した文字列を下の行に割り当ててくれるメソッドです。
実際の動きを見ていただいたくとわかりやすいかと思います。↓

A3セルに255文字の文字列が入力されています。これにJustifyを行います。

処理を行った結果、A列の幅をはみ出ないように複数行に文字列が割り当てられています。
このようにJustifyメソッドを利用すれば、列幅に全角何文字入るのか?などを求めることなく、幅いっぱいに文字が割り当てられます。
文字をセル幅におさめたい場合に使えそうな処理ですね。
サンプルコード
今回使用したコードはこちらです。非常にシンプルです。
Sub subDoJustify()
Worksheets("Sheet1").Range("A3").Justify
End Sub
Range オブジェクト . Justify
という使い方ですね。
また、Justifyが行われる際は、確認メッセージが表示されます。

ソースに「確認メッセージを非表示に設定する」処理を加えると表示されなくなります。
注意点
便利なJustifyメソッドですが、実は割り当てられる文字は255文字までという制限があります。
私も知らないまま実装を行い、修正を余儀なくされました(恥)

A3セルに2000文字の文字列が入力されています。これにJustifyを行います。

2000文字の文字列を割り当てたはずが、255文字を割り当てた結果と同様になってしまいました。
255文字までが割り当てられ、256文字以降は切り捨てられてしまいます。
256文字以上の文字列にJustifyを行う場合は工夫が必要になりますね。
256文字以上のJustify
以下では、256文字以上の文字列を割り当てるときのサンプルコードを紹介します
サンプルコード
Sub subConfigJustify()
Dim lngRowCount As Long '最終行
Dim wst As Worksheet 'ワークシート
Set wst = Worksheets("Sheet2")
lngRowCount = fncJustify(3, 1, 14, wst) '文字のある行、列の範囲左、列の範囲右、ワークシート
End Sub
Function fncJustify(lngRowCount As Long, lngStartCol As Long, lngEndCol As Long, wst As Worksheet) As Long
'変数定義
Dim lngLastRow As Long '最終行
Dim strJustify As String '
'編集する文字を保持する
strJustify = wst.Cells(lngRowCount, lngStartCol)
'255文字目まで割り当てる
'確認メッセージ非表示
Application.DisplayAlerts = False
wst.Range(wst.Cells(lngRowCount, lngStartCol), wst.Cells(lngRowCount,lngEndCol)).Justify
Application.DisplayAlerts = False
'最終行を取得
lngLastRow = wst.Cells(Rows.Count, lngStartCol).End(xlUp).Row
'255文字以下になるまで(256文字以上の間)繰り返す
Do While Len(strJustify) > 255
'割り当てた文字を削除
strJustify = Right(strJustify, Len(strJustify) - 255)
'割り当てられた最終行の文字と残りの文字を結合
strJustify = wst.Cells(lngLastRow, lngStartCol) & strJustify
'結合した文字をセルに編集
wst.Cells(lngLastRow, lngStartCol) = strJustify
'255文字割り当てる
'確認メッセージ非表示
Application.DisplayAlerts = False
wst.Range(wst.Cells(lngLastRow, lngStartCol), wst.Cells(lngRowCount, lngEndCol)).Justify
Application.DisplayAlerts = False
'最終行を取得
lngLastRow = wst.Cells(Rows.Count, lngStartCol).End(xlUp).Row
Loop
End Function
処理の流れ
- 文字を保持する
- Justifyで割り当てる
- 最終行を取得する
- 保持した文字から割り当てられた255文字を削除する
- 文字を割り当て終えるまで2~4を繰り返す
といったかんじです。
動かした様子

A3セルに2000文字の文字列が入力されています。これに上記のソースコードでJustifyを行うと…

しっかりと2000文字が割り当てられています!
※CONCATNATE関数で文字を結合し、LEN関数で文字数を計算しています。
Justifyメソッドのように便利ながらも制限があるものには、工夫が必要ですね。
まずは、どのようなものか調べてから処理に組み込むようにしていきたいです。