« Display strings on the right side of cells | トップページ | Automatically adjust height of merged cell »

2018年7月24日 (火)

結合したセルの高さを自動調整する

Excelで行と行の間をダブルクリックすると
セルの高さが自動調整されます。

しかし、結合したセルでは
高さの自動調整ができません。

結合したセルに
「セルの書式設定」-「折り返して全体を表示する」
が適用されているときでも
高さが自動調整されません。
この状態で印刷すると必要な部分が欠けてしまいます。

結合したセルの高さ調整をVBAでできるようにしていきます。
ワークシートを使った簡単な方法を思いつきました。

コードの流れは
ざっくり次の通り

①作業用シート「macro180724a」を作成する
②結合されたセル内の文字列を
 作業用シートの結合されていないセルA1に入力する。
③セルA1の幅を結合されたセル全体の幅と同じにする
④セルA1で高さ自動調整をして
 セルの高さを取得する
⑤この高さを元の結合されたセルに設定する。

コードはこちら

結合したセルの高さを自動調整するコード:

Sub macro180724a()
'結合したセルの高さ調整
'マクロを実行する前に
'調整したい 範囲を選択しておく

    Application.ScreenUpdating = False
   
    Dim obj As Object
    Dim i As Integer
    Dim c As Integer
    Dim width1 As Single
    Dim rng1 As Range
    Set rng1 = Selection
   
    Dim sh1 As Worksheet
    Sheets.Add.Name = "macro180724a"
    Set sh1 = Sheets ("macro180724a")
    With sh1.Cells(1, 1)
        .WrapText = True
        .ShrinkToFit = False
        Rows(.Row).EntireRow.AutoFit
    End With
   
    For Each obj In rng1
         'セルの結合あり
       If obj.MergeCells = True Then
            sh1.Range("A1") = obj.MergeArea.Cells(1, 1).Text
            For i = 1 To obj.MergeArea.Count
                If obj.MergeArea.Item(i).Column > c Then
                     width1 = width1 + obj.MergeArea.Item (i).ColumnWidth
                     c = obj.MergeArea.Item(i).Column
                 Else
                     i = obj.MergeArea.Count
                End If
                If i = obj.MergeArea.Count Then
                    sh1.Cells(1, 1).ColumnWidth = width1
                    Rows(sh1.Cells(1, 1).Row).EntireRow.AutoFit
                    c = 0
                     width1 = 0
                End If
            Next i
           
            With obj
                .WrapText = True
                 .ShrinkToFit = False
                .RowHeight = sh1.Cells(1, 1).RowHeight
            End With
            
        End If
    Next
   
    Application.DisplayAlerts = False
    sh1.Delete
    Application.DisplayAlerts = True
   
    Application.ScreenUpdating = True
End Sub

下の画像の状態で上記のコードを実行
Vba20180724a
実行結果:
Vba20180724b

上記コードを何回か試しましたが、
入力された文字列やセルの幅によっては
1行余分な高さに設定されることもあるので注意してください。

|

« Display strings on the right side of cells | トップページ | Automatically adjust height of merged cell »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 結合したセルの高さを自動調整する:

« Display strings on the right side of cells | トップページ | Automatically adjust height of merged cell »