【Excel VBA】Justifyメソッド 文字を下の行に割り当てる

Excel VBA Justifyメソッド 文字を下の行に割り当てる

今回はVBAで文字を幅いっぱいに割り当てられるJustifyメソッドを紹介します!

VBAの Justify メソッドとは

セル幅をはみ出した文字列を下の行に割り当ててくれるメソッドです。

実際の動きを見ていただいたくとわかりやすいかと思います。↓

Justify255文字正常処理前Excel画像

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

Justify255文字正常処理後Excel画像

処理を行った結果、A列の幅をはみ出ないように複数行に文字列が割り当てられています。

このようにJustifyメソッドを利用すれば、列幅に全角何文字入るのか?などを求めることなく、幅いっぱいに文字が割り当てられます。

文字をセル幅におさめたい場合に使えそうな処理ですね。

サンプルコード

今回使用したコードはこちらです。非常にシンプルです。

Sub subDoJustify()

    Worksheets("Sheet1").Range("A3").Justify
    
End Sub

Range オブジェクト . Justify

という使い方ですね。

また、Justifyが行われる際は、確認メッセージが表示されます。

Justify確認メッセージ

ソースに「確認メッセージを非表示に設定する」処理を加えると表示されなくなります。

注意点

便利なJustifyメソッドですが、実は割り当てられる文字は255文字までという制限があります。

私も知らないまま実装を行い、修正を余儀なくされました(恥)

Justify2000文字切り捨てExcel画像1

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

Justify2000文字切り捨てExcel画像2

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

処理の流れ

  1. 文字を保持する
  2. Justifyで割り当てる
  3. 最終行を取得する
  4. 保持した文字から割り当てられた255文字を削除する
  5. 文字を割り当て終えるまで2~4を繰り返す

といったかんじです。

動かした様子

Justify2000文字正常処理前Excel画像

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

Justify2000文字正常処理後Excel画像

しっかりと2000文字が割り当てられています!

※CONCATNATE関数で文字を結合し、LEN関数で文字数を計算しています。

 

Justifyメソッドのように便利ながらも制限があるものには、工夫が必要ですね。

まずは、どのようなものか調べてから処理に組み込むようにしていきたいです。