【Excelマクロ応用術】VBAで文字数が一番多い列幅で複数列を自動調整する方法

スポンサーリンク

アイキャッチ画像

この記事では、複数の列幅を調整する際に、1番大きな列の幅に調整する方法を紹介します。

 

VBAの環境構築がまだの人はは以下を参考にしてださい。

 

さっそくですが、以下のようなExcelの表があるとします。

マクロ実行前の表

 この表のうち、3行目のフルーツの項目について、列幅を揃えるとします。この表だと、文字数が一番多い「グレープフルーツ」の列幅に合わせたいですよね。

 

列幅を自動で調整する際は、文字数に合わせて調整されます。そのため、一番文字数が多い、セルの列幅に合わせて調整をすれば良いです。

 

手順としては以下通りです。

  1. 文字数を配列に入れる
  2. 文字数の最大値を取得
  3. 文字数の最大値のインデックス番号を取得
  4. 最大の文字数のセルの列幅を自動調整
  5. 4の列幅の大きさを取得
  6. 該当の列を5で取得した大きさに指定

 

コードと解説は以下の通りです。

    ' iはインデックス番号とセルの列番号を指す数値
    ' lens(4)はインデックス番号0~4の5つの配列
    Dim i, lens(4) As Long
    
    ' i = 2~6の繰り返し
    ' lens(0)にCells(3, 2) → 3(「りんご」の文字数)のように文字数を配列に入れる
    For i = 2 To 6
        lens(i - 2) = Len(Cells(3, i))
    Next
    
    ' maxlenが文字数の最大値
    ' jがインデックス番号を入れる変数
    ' countは文字列の最大値のインデックスを探すために使う変数
    Dim maxlen, j, count As Long
    
    ' 配列lensの最大値を取得
    maxlen = WorksheetFunction.Max(lens)
    
    
    count = 0
    ' jにlensのインデックス番号の最小値~最大値を繰り返し
    For j = LBound(lens) To UBound(lens)
        ' 配列lensのインデックス番号jが最大値だったらForを抜ける
        If lens(j) = maxlen Then
            Exit For
        End If
        
        ' lens(j)が最大値でなければcountに+1する
        ' 上記のif文で配列を抜けた時には、countがインデックス番号になっている
        count = count + 1
    Next
        
    ' 文字数が最大値の列幅を自動調整
    ' インデックス番号は0スタートであることと、該当の列のスタートがB列のため、countに+2する
    Cells(3, count + 2).Columns.AutoFit
    
    ' max_column_lenは文字列最大値の列幅の大きさ
    Dim max_column_len As Long
    max_column_len = Cells(3, count + 2).ColumnWidth
    
    ' 該当の列幅を文字列最大値の列幅に合わせる
    Range(Cells(3, 2), Cells(3, 6)).ColumnWidth = max_column_len

コードを実行すると、以下のような画像となります。

マクロ実行後の表

以上、VBAで文字数が一番多い列幅で複数列を自動調整する方法の紹介でした。

 

以下、VBAを学ぶのにおすすめの書籍となっています。ぜひ参考にしてください。